# :(
def check_for_me(self):
users = Users.objects.filter(role='developer')
for el in users:
# This would execute a db query
# each iteration
prof = el.profile
if prof.real_name is 'Andres':
return True
return False
# :)
def check_for_me(self):
# This is 'lazy'
users = Users.objects.filter(role='developer')
users = users.select_related('profile')
for el in users:
# This would NOT execute an additional db query
prof = el.profile
if prof.real_name is 'Andres':
return True
return False
- Use declarative formats for setup automation.
- Have a clean contract with the underlying operating system, offering maximum portability between execution environments;
- Are suitable for deployment on modern cloud platforms,
- Minimize divergence between development and production, enabling continuous deployment for maximum agility;
- And can scale up without significant changes to tooling, architecture, or development practices.
Codebase: Código base seguido por Control de versiones, Muchos deployments
Dependencias: Declarar dependencias explícitamente
Configuración: Almacenar configuración en el entorno
Backing Services: Treat backing services as attached resources
Desarrollar, liberar, ejecutar: Separar las etapas de desarrollo.
Procesos: Ejecutar aplicaciones como uno o más procesos "stateless".
Port binding: Servicios via "port binding"
Concurrencia: Scale out via the process model
Desechabilidad: Fast startup, graceful shutdown
Dev/prod parity: Desarrollo, staging, y producción iguales.
Construyamos una aplicación
Altamente disponible!
"Everything fails all the time"
Werner Vogels
CTO de Amazon
Las aplicaciones deben continuar funcionando
META
Consideraciones
2. Múltiples Zonas de disponibilidad
Multiple Availability Zones
AutoEscalamiento
Un sistema desacoplado es más fácil de escalar
Entre menos acoplados estén los componentes, más fácilmente se pueden escalar y más tolerantes a fallas se vuelven
@calidevco