On Github andresgz / calidev-alta-disponibilidad
# :( 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
Codebase: Código base seguido por Control de versiones, Muchos deploymentsDependencias: Declarar dependencias explícitamenteConfiguración: Almacenar configuración en el entorno
Backing Services: Treat backing services as attached resourcesDesarrollar, 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 modelDesechabilidad: Fast startup, graceful shutdownDev/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