Receptivo: el sistema responde de manera oportuna si es posible. La capacidad de respuesta es la piedra angular de la usabilidad y la utilidad, pero más que eso, la capacidad de respuesta significa que los problemas pueden detectarse rápidamente y resolverse de manera efectiva. Los sistemas receptivos se centran en proporcionar tiempos de respuesta rápidos y consistentes, estableciendo límites superiores confiables para que ofrezcan una calidad de servicio constante. Este comportamiento consistente a su vez simplifica el manejo de errores, aumenta la confianza del usuario final y fomenta una mayor interacción.
Resistente: el sistema permanece receptivo ante fallas. Esto se aplica no solo a los sistemas de misión crítica de alta disponibilidad: cualquier sistema que no sea resistente no responderá después de una falla. La resiliencia se logra mediante replicación, contención, aislamiento y delegación. Las fallas están contenidas dentro de cada componente, aislando los componentes entre sí y asegurando así que partes del sistema puedan fallar y recuperarse sin comprometer el sistema en su conjunto. La recuperación de cada componente se delega a otro componente (externo) y se garantiza una alta disponibilidad mediante la replicación cuando sea necesario. El cliente de un componente no tiene la carga de manejar sus fallas.
Elástico: el sistema se mantiene receptivo bajo una carga de trabajo variable. Los sistemas reactivos pueden reaccionar a los cambios en la velocidad de entrada aumentando o disminuyendo los recursos asignados para dar servicio a estas entradas. Esto implica diseños que no tienen puntos de contención o cuellos de botella centrales, lo que resulta en la capacidad de fragmentar o replicar componentes y distribuir entradas entre ellos. Los sistemas reactivos admiten algoritmos de escala predictivos y reactivos al proporcionar medidas de rendimiento en vivo relevantes. Alcanzan elasticidad de manera rentable en plataformas de hardware y software de productos básicos.
- ¿Cuáles son las dinámicas actuales del negocio de almacenamiento en la nube a partir de octubre de 2014?
- ¿Qué centros de datos proporcionan servicios de Azure?
- ¿Cómo debo elegir entre AWS, Azure y Google Cloud para mi inicio?
- ¿Por qué DigitalOcean afirma ser simple cuando sus usuarios deben ser expertos en la línea de comandos de Linux? Otros proveedores le permiten simplemente cargar un archivo WAR (o similar).
- ¿Qué tipos de instancia de AWS EC2 debo usar para alojar mis aplicaciones (NodeJS + AngularJS)?
Dirigido por mensajes: los sistemas reactivos confían en el paso de mensajes asíncrono para establecer un límite entre los componentes que garantiza un acoplamiento flexible, aislamiento, transparencia de ubicación y proporciona los medios para delegar errores como mensajes. Emplear el paso explícito de mensajes permite la gestión de la carga, la elasticidad y el control del flujo al dar forma y monitorear las colas de mensajes en el sistema y aplicar contrapresión cuando sea necesario. La mensajería transparente de ubicación como medio de comunicación hace posible la gestión de fallas para trabajar con las mismas construcciones y semánticas en un clúster o dentro de un único host. La comunicación sin bloqueo permite que los destinatarios solo consuman recursos mientras están activos, lo que genera menos sobrecarga del sistema.
Los sistemas grandes están compuestos por otros más pequeños y, por lo tanto, dependen de las propiedades reactivas de sus componentes. Esto significa que los sistemas reactivos aplican principios de diseño, por lo que estas propiedades se aplican en todos los niveles de escala, lo que los hace compostables. Los sistemas más grandes del mundo dependen de arquitecturas basadas en estas propiedades y satisfacen las necesidades de miles de millones de personas diariamente. Es hora de aplicar estos principios de diseño conscientemente desde el principio en lugar de redescubrirlos cada vez.
Estos son parte del Manifiesto Reactivo
Dicha arquitectura utiliza comunicación asincrónica, no bloquea, por lo tanto, cualquier sistema desbordado no afecta significativamente a los sistemas que dependen de él. Se enfoca en componer servicios enfocados en tiempo de ejecución.