Patrones de diseño (o técnicas) para la escalabilidad
-
10-07-2019 - |
Pregunta
¿Qué patrones de diseño o técnicas has utilizado específicamente para la escalabilidad ?
Patrones como el Flyweight me parecen a mí ser una versión especializada del Patrón de fábrica , para promover una alta escalabilidad o cuando se trabaja dentro de las limitaciones de memoria o almacenamiento.
¿Qué otros has usado? ( Desormalización de bases de datos , etc. .) ¿Le parece que las reglas cambian cuando la alta disponibilidad o escalabilidad es su objetivo principal?
Las posibles situaciones son:
- Dispositivos móviles con memoria, potencia de procesamiento y conectividad más limitadas que una computadora de escritorio o portátil
- Alto número de usuarios en hardware limitado (estrategias de almacenamiento en caché, etc.)
- Optimización del esquema de la base de datos para la eficiencia en lugar de un diseño normalizado (por ejemplo, envoltura de columnas de SharePoint para almacenamiento)
Solución
Algunos patrones que vienen en mente:
- Aplicación sin estado
- Acoplamiento suelto
- Asincronía
- Carga diferida
- Almacenamiento en caché
- Paralelismo
- Particionamiento
- Enrutamiento
Algunos recursos:
- Mejores prácticas de escalabilidad: lecciones de eBay
- Availability & amp; Consistencia presentación del CTO de Amazon Dr. Werner Vogels
- Presentaciones de Microsoft PDC'08
- Mejores prácticas en construcción Servicio escalable listo para la nube basado
Otros consejos
Haga que la aplicación sea lo más apátrida posible. Será más fácil adaptarse a una granja de servidores.
Nada es gratis: todo se reduce a cuáles son los compromisos aceptables para cumplir con los objetivos de su negocio. Las principales variables son:
- Costo
- Disponibilidad
- Consistencia
- Supervivencia (por ejemplo, tolerancia de partición)
Los libros POSA (Arquitectura de software orientada a patrones) son una gran fuente para tales patrones.
POSA 4 , especialmente, se refiere a la informática distribuida, pero todo los volúmenes están llenos de patrones de escalabilidad.
Lo que he observado con la lógica de aplicación sin estado es que introduce muchos otros requisitos, como el bloqueo en la base de datos, que eventualmente funcionan en contra de la escalabilidad.
Digamos que la lógica de la aplicación implementada no tiene estado en una granja de servidores, entonces para una solicitud que está llegando a dos nodos de un clúster al mismo tiempo, tenemos que introducir conceptos como bloqueo de base de datos para asegurarnos de que solo se procesará una solicitud.
Estoy lidiando con tales situaciones ahora y me preguntaba cómo todos los demás están lidiando con ese comportamiento sin estado.