Saltar al contenido

Blog técnico | Arquitectura del sistema: Atributos de calidad

Al diseñar la arquitectura de una aplicación o sistema de aplicaciones interrelacionadas, es esencial identificar qué atributos de calidad del sistema son más importantes para los usuarios, desarrolladores y propietarios. A menudo esto se hace implícitamente sobre la base de la experiencia y las preferencias de las diversas personas que participan en el proyecto. Cuando los atributos de calidad se seleccionan con intención y propósito, ayudan a orientar el diseño del sistema. En , los atributos de calidad en los que nos centramos han evolucionado a medida que la empresa ha ido evolucionando.

Cuando éramos un solo equipo

Inicialmente, los valores de nuestro sistema estaban ligados a los valores de nuestro equipo. Estos incluían:

Blog técnico | Arquitectura del sistema: Atributos de calidad
Blog técnico | Arquitectura del sistema: Atributos de calidad
  • Favorecer al cliente
  • Hacer lo que es correcto para el negocioModificabilidadMantenibilidadEstabilidadCapacidad de crecimiento

¿Cómo afectaron estos valores a nuestro diseño?

Al hacer cambios en el sistema en este momento, a menudo nos preguntamos si esto sería una buena experiencia para el cliente y si esto es lo que esperaríamos de un producto que hemos comprado. Valorábamos más tener un sistema de alta disponibilidad con características sólidas como una roca que crear una experiencia menos consistente con un mayor número de características.

Como una compañía en crecimiento con una base de clientes creciente y en evolución, también necesitábamos actualizar y mejorar nuestro producto rápidamente. Hacer lo que es correcto para el negocio significaba asegurarnos de que podíamos hacer mejoras de forma rápida y segura mientras seguíamos añadiendo usuarios a un ritmo rápido. Las pruebas automatizadas eran un componente esencial de nuestra estrategia. Además, establecimos un servidor de integración continuo, trabajamos en la rama principal con cambios de características y construimos una tubería de entrega continua que permitió despliegues y retrocesos rápidos y automatizados.

Cuando nos dividimos por primera vez en múltiples equipos

A medida que las necesidades del negocio crecían, el equipo de desarrollo creció hasta el punto de que se hizo difícil coordinar el trabajo y los lanzamientos. Durante un equipo externo, discutimos el creciente problema e identificamos atributos de calidad adicionales del sistema que habíamos llegado a valorar, incluyendo:

  • Escalabilidad horizontal del sistema de la Organización de Ingeniería
  • Autonomía del equipo (especialmente en lo que respecta a la liberación de características)
  • Innovación de productos y amplificación; Modificabilidad
  • Integración de los productos adquiridos

¿Cómo afectaron estos valores a nuestro diseño?

Los componentes más pequeños son más fáciles de razonar y por lo tanto más fáciles de cambiar y desplegar. Los grupos más pequeños tienden a tener más facilidad para tomar decisiones y ejecutarlas. Estos tópicos nos llevaron a dividir nuestro equipo y nuestra base de código monolítica en una colección de contextos delimitados.

Queríamos una forma simple y consistente de integrar estos componentes y los que llegaron a través de las adquisiciones. Determinamos que la creación de reglas estrictas para el espacio intersticial entre los equipos y componentes podría permitirnos una mayor autonomía dentro de los contextos delimitados . Al centrarnos en los mensajes AMQP+JSON y en las APIs HTTP+JSON, eliminamos muchos de los límites en las decisiones de los equipos, incluyendo las restricciones en el lenguaje de desarrollo de elección. Esto a su vez permitió una mayor innovación dentro del producto.

Durante nuestro actual período de crecimiento continuo

A medida que nuestro número de equipos y contextos delimitados ha ido creciendo, seguimos aprendiendo y evolucionando nuestra comprensión de los requisitos de nuestro sistema dentro de nuestro negocio. Actualmente, hacemos hincapié en los siguientes atributos de calidad:

  • Toma de decisiones basada en datos
  • Autonomía del equipo (especialmente en lo que respecta a la liberación de características)
  • Escalabilidad horizontal del sistema de la Organización de Ingeniería
  • Innovación de productos
  • Calidad & Testabilidad
  • Mantenibilidad
  • Disponibilidad
  • La recuperación sobre la fiabilidad

¿Cómo afectan estos valores a nuestro diseño?

Separar nuestro sistema en contextos delimitados sigue dando sus frutos, ya que ahora tenemos casi tres docenas de equipos trabajando en la plataforma. Estos equipos se despliegan cientos de veces al mes con menos del 3% de las liberaciones retrocedidas. Los lanzamientos que requieren la coordinación de múltiples equipos ocurren con poca frecuencia. Nuestro énfasis en las pruebas automatizadas y en la posibilidad de probarlas, además de incluir a los desarrolladores en la rotación de guardia, nos ayuda a mantener una alta calidad en todo el sistema.

Ejecutamos nuestro producto en la nube y aprovechamos las herramientas de automatización para asegurarnos de que ejecutamos múltiples instancias redundantes de cada servicio. Esta misma herramienta puede ser utilizada para reconstruir rápidamente las instancias si necesitamos recuperar o escalar para mantener nuestros SLAs internos y externos. Nuestros ejercicios regulares de recuperación de desastres nos mantienen seguros de que podemos recuperarnos en caso de fallos.

La autonomía del equipo es uno de nuestros valores más importantes. Contratamos a desarrolladores de software profesionales y creemos en darles la libertad y la responsabilidad de entregar valor al cliente de la mejor manera que saben. Esto significa que tenemos más variación de lo que se podría esperar en nuestras prácticas de desarrollo y nuestras elecciones de tecnología de equipo a equipo.

Para asegurar que las elecciones de cualquier equipo no afecten negativamente a la capacidad de otros equipos de ofrecer valor al cliente, hemos mantenido nuestras estrictas reglas en torno a la comunicación entre contextos delimitados. Seguimos prefiriendo la comunicación asincrónica a través de eventos de negocios de mensajería. Cuando la comunicación síncrona es la elección apropiada, seguimos requiriendo HTTP+JSON.

A medida que hemos ido creciendo y aprendiendo, se ha hecho evidente que algunos contextos delimitados necesitan una copia fiable, actualizada y almacenada localmente de los datos de otro contexto delimitado, pero por lo demás no están interesados en reaccionar a los acontecimientos comerciales publicados de ese contexto delimitado. Para atender esta necesidad, estamos sistematizando la replicación de datos entre las fuentes de la verdad mediante un registro de confirmación distribuido. Esto ha simplificado algunas de las interacciones entre contextos delimitados y ha permitido una toma de decisiones más precisa, efectiva y basada en datos.

Arquitectura continua

El contexto siempre cambia y las elecciones arquitectónicas deben evolucionar en base a nueva información. Seleccionar, actualizar y comunicar los atributos de calidad clave de un sistema es una de las responsabilidades del arquitecto.

  • ¿Qué atributos de calidad son más importantes para su sistema hoy en día?
  • ¿Cómo sabes que estás enfatizando los atributos de calidad correctos?
  • ¿Qué te haría cambiarlos?

Sea diligente en la evaluación de la eficacia y la aplicabilidad de los atributos de calidad de sus sistemas.

Categorías: cultureTags: values, architecture