Skip to content

Latest commit

 

History

History
21 lines (13 loc) · 5.96 KB

README.es.md

File metadata and controls

21 lines (13 loc) · 5.96 KB

El Manifiesto de Sistemas Reactivos

Organizaciones que trabajan en dominios diferentes independientemente están descubriendo patrones para construir software que buscan lo mismo. Estos sistemas son más robustos, más flexibles y están mejor posicionados para cumplir las demandas modernas.

Estos cambios han sucedido porque los requerimientos de aplicaciones han cambiado dramáticamente en los últimos años. Sólo unos pocos años atrás, una gran aplicación tenía decenas de servidores, segundos de tiempo de respuesta, horas de mantenimiento fuera de línea y gigabytes en datos. Hoy, las aplicaciones son desplegadas en cualquier cosa, desde dispositivos móviles hasta clusters en la nube corriendo en miles de procesadores multi-core. Los usuarios esperan tiempos de respuesta de milisegundos y que sus sistemas operen 24/7 (uptime 100%). Los datos son medidos en Petabytes. Las demandas de hoy simplemente no están siendo satisfechas por la arquitectura de software de ayer.

Creemos se necesita un enfoque coherente para las arquitecturas de sistemas, y creemos que todos los aspectos necesarios ya están siendo reconocidos individualmente. Queremos sistemas: Responsivos, Resilientes, Elásticos y Orientados a Mensajes. Nosotros les llamamos Sistemas Reactivos.

Los Sistemas construidos como Sistemas Reactivos son más flexibles, con bajo acoplamiento y escalables. Esto hace que ellos sean más fáciles de desarrollar y amenos al momento de cambiarlos. Ellos son significativamente más tolerantes a fallas y cuando fallan lo hacen con elegancia en vez de ser un desastre. Los sistemas reactivos son altamente responsivos, dando a los usuarios retroalimentación efectiva e interactiva.

Los Sistemas Reactivos son:

  • Responsivos: Los sistemas responden de una manera oportuna en la medida de lo posible. La responsividad es la piedra angular de la usabilidad y utilidad, pero mas que esto, responsividad significa problemas que pueden ser detectados rápidamente y tratados efectivamente. Los sistemas responsivos se enfocan en proveer tiempos de respuesta rápidos y consistentes, estableciendo límites superiores de manera que ellos entreguen una calidad de servicio. Este comportamiento consistente se traduce en que simplifica el tratamiento de errores, construye confianza con el usuario fina y alienta una mayor interacción.
  • Resilientes: Los sistemas permanecen responsivos cuando enfrentan fallas. Esto aplica no solo a la alta disponibilidad, sistemas de misión crítica - cualquier sistema que no es resiliente, no será responsivo después de una falla. La resiliencia es alcanzada con replicación, contención , aislamiento y delegación. Las fallas son contenidas dentro de cada componente, aislando cada componente de los demás, y de este modo asegurando que las partes del sistemas puedan fallar y recuperarse sin comprometer el sistema como un todo. La recuperación de cada componente es delegada a otro (externo) y la alta disponibilidad es asegurada por replicación donde sea necesario. El cliente de cada componente no es agobiado con tener que manejar sus fallas.
  • Elasticos:: El sistema se mantiene responsivo bajo variaciones en la carga de trabajo. Los sistemas Reactivos pueden reaccionar a cambios en la frecuencia de peticiones incrementando o reduciendo los recursos asignados para servir dichas peticiones. Esto implica diseños que no tengan puntos de contención o cuellos de botella centralizados, resultando en la habilidad de fragmentar o replicar componentes y distribuir las entradas a través de ellos. Los Sistemas Reactivos soportan algoritmos predictivos, así como Reactivos y de escalablidad poveyendo relevantes medidas de rendimiento en tiempo real. Ellos alcanzan elasticidad de una forma rentable sobre plataformas de bajo costo (o equilibrado) tanto en hardware como software.
  • Orientados a Mensajes: Los Sistemas Reactivos confían en el intercambio de mensajes asíncronos para establecer límites entre componentes, lo que asegura el bajo acoplamiento, aislamiento, transparencia de ubicación y proporciona los medios para delegar errores como mensajes. Empleando explícitamente el intercambio de mensajes ayuda a: la administración de la carga, la elasticidad, y el control de flujo; a través de la conformación y monitoreo de colas en el sistema, y la aplicación de contrapresión cuando sea necesario. La ubicación transparente de mensajes como un medio de comunicación hace posible a la administración de fallas el poder trabajar con los mismmos bloques y semánticas a través de un cluster o dentro de un sólo nodo. La comunicación No-bloqueante permite que los receptores consuman recursos sólo desde y mientras dichos recursos estén activos, lo que lleva a una menor sobrecarga del sistema.

Los grandes sistemas estás compuestos de otros más pequeños y por lo tanto dependen de las propieades Reactivas de sus constituyentes. Esto significa que los Sistemas Reactivos aplican principios de diseño de manera que apliquen estas propiedades a toda escala, haciéndoles componibles. Los sistemas más grandes del mundo confían sobre arquitecturas basadas en estas propiedades y sirven las necesidades de miles de millones de personas diariamente. Es tiempo de aplicar estos principios de diseño conscientemente desde un principio en vez de redescubrirlos cada vez.

Firme el Manifiesto