Una aplicación scalabale es capaz de soportar una amplia gama de usuarios sin comprometer la experiencia del usuario o incurrir en un costo irrazonable.
Como solicitó por ejemplo una aplicación de chat, le daré un ejemplo para un sistema de chat cliente-servidor basado en web / móvil, y otro ejemplo para un sistema de chat basado en escritorio que se beneficia enormemente (en términos de escala) de una arquitectura completamente diferente. .
Sistema de chat basado en web / móvil
- ¿Cuál es el mejor servicio en la nube para análisis?
- ¿Es aconsejable utilizar AWS Route 53 para un sitio web privado?
- ¿Cuáles son las principales diferencias entre las bases de datos de Amazon RDS y Rackspace Cloud?
- ¿Por qué Facebook no crea una plataforma de computación en la nube para competir con Amazon, Microsoft, IBM, Oracle y Google?
- ¿Cuál es la ventaja de Chromebook además del precio más bajo?
El sistema web / móvil generalmente incluye servicios de front-end, un equilibrador de carga para enrutar las solicitudes de los usuarios al front-end disponible, servicios de back-end para computación y procesamiento de datos más pesados y almacenamiento.
Las aplicaciones de front-end son típicamente sin estado (escalamiento sin estado mejor). Son responsables de manejar las solicitudes de los usuarios, mostrar la página web y extraer / enviar datos desde / hacia el back-end. El back-end está compuesto (o mejor dicho) por micro servicios pequeños, independientes y desacoplados, cada uno enfocado en hacer una pequeña tarea. En un sistema de chat, normalmente tendrá un servicio de presencia (responsable de mantener la ubicación y el estado de los usuarios), servicio de mensajería instantánea, servicio de lista de contactos, etc.
Cada servicio debe tener al menos dos instancias, idealmente implementadas en servidores / bastidores / DC separados, de modo que cada uno pueda ser disparado a la cabeza sin causar una interrupción.
Para el almacenamiento persistente, un almacenamiento NoSQL (docdb, mongodb, etc.) hará que la escala horizontal sea mucho más simple que un almacenamiento SQL (MySQL, MS-SQL). Entonces, a menos que su aplicación requiera un modelo de consistencia más fuerte, NoSQL probablemente sería una mejor opción.
Su implementación aumentará o disminuirá (con suerte automáticamente) horizontal y verticalmente, según los requisitos de escalabilidad y el costo. Por lo general, comenzará con la menor cantidad de servidores posible (mínimo dos para permitir la actualización sin tiempo de inactividad) y aumente la capacidad según sea necesario.
Sugiero seguir los siguientes pasos:
- Pruebe su sistema de carga con un número creciente de usuarios sintéticos
- Aumentar el tamaño de las instancias (agregar RAM / CPU)
- Optimice sus aplicaciones para asegurarse de que se amplíen con gracia.
- Agregar capacidad (servidores front-end / back-end)
- Optimice sus aplicaciones para asegurarse de que se escalen con gracia
- Optimice el acceso a su capa de almacenamiento, use el almacenamiento en caché para aumentar el rendimiento y reducir los costos
- Medir e iterar
Seguramente encontrará los errores interesantes solo después de que su aplicación se implemente en producción y sea utilizada por usuarios reales. Desea construir una buena tubería de telemetría y seguir prácticas como Canary Deployment & Test Flights (combinado con monitoreo activo / pasivo) para mitigar el impacto en sus usuarios y poder detectar y recuperarse de estos errores rápidamente (con suerte antes de que sus usuarios lo hagan). aviso). Su arquitectura de microservicios le permitirá hacerlo de manera mucho más eficiente (que una arquitectura monolítica), confíe en mí.
Sistema de chat de escritorio
La belleza de los sistemas de chat (de escritorio) es que pueden escalar indefinidamente sin costosos recursos centralizados mediante el uso de una arquitectura descentralizada de muelle a muelle.
La arquitectura P2P puede escalar utilizando la potencia de procesamiento y conexión en red de las máquinas de los usuarios finales , que crece en proporción directa a la base de usuarios. Si diez usuarios están usando el sistema, el sistema tiene diez recursos a su disposición, si millones de usuarios están usando el sistema, el sistema tiene un millón de recursos. Un sistema P2P no tiene reparos en utilizar las máquinas de los usuarios finales disponibles para ejecutar la lógica que beneficia a la red en su conjunto, no solo a la aplicación cliente que se ejecuta en la máquina.
Un sistema de chat descentralizado utilizaría las máquinas de los usuarios finales disponibles para enrutar mensajes entre clientes, tal vez también manteniendo un índice global al ejecutar aplicaciones interconectadas en máquinas cliente con recursos disponibles.
Skype es un gran ejemplo para una aplicación que fue capaz de escalar magníficamente para servir a decenas de millones de usuarios que utilizan una arquitectura inteligente de muelle a muelle (P2P), sin una inversión significativa en infraestructura.