Compartir a través de


Modelo de madurez de confiabilidad

El recorrido de confiabilidad es un proceso paso a paso en el que cada fase se basa en la anterior para garantizar que los sistemas permanezcan disponibles y satisfagan las expectativas del usuario. Este modelo de madurez está diseñado para ayudarle a evaluar el estado actual y ofrecer una ruta estructurada para mejorar.

La base comienza por arrancar las funcionalidades de confiabilidad básicas que ofrece Azure mediante el uso de características de confiabilidad de Azure integradas, como la redundancia de zona para mejoras inmediatas sin una sobrecarga de optimización extensa.

Contraintuitivamente, la manera de lograr una alta confiabilidad es aceptar errores inevitables. En lugar de intentar evitar cada problema, es más eficaz planear cómo responderá el sistema cuando se produzcan problemas. Sus requisitos empresariales ayudan a determinar qué riesgos merecen la pena abordar de forma proactiva. Los equipos invierten en funcionalidades de supervisión avanzadas con observabilidad estructurada, amplían la mitigación de errores para incluir problemas de nivel de aplicación y comienzan a probar medidas de resistencia.

A continuación, los equipos integran información empresarial con aptitudes técnicas. Los equipos implementan el modelado de salud, realizan el análisis de modos de fallo y preparan planes de recuperación ante desastres completos. Esta fase garantiza la responsabilidad a través de objetivos medibles y preparación sistemática para diversos escenarios de error.

Una vez que el sistema esté activo, el énfasis se mueve a la administración de los desafíos de los entornos de producción, incluida la administración de cambios y la gestión del crecimiento de los datos y la complejidad operativa, y cómo afectan a la confiabilidad del sistema.

El nivel final se ejecuta indefinidamente y su objetivo es permanecer resiliente. Este nivel representa la evolución más allá de los controles técnicos a la adaptación arquitectónica. Este nivel se centra en permitir que los sistemas resistan riesgos nuevos e imprevistos a medida que las cargas de trabajo evolucionan y crecen.

El modelo se estructura en cinco niveles de madurez distintos, cada uno con un objetivo principal y un conjunto de estrategias principales. Use las vistas con pestañas siguientes para explorar cada nivel. Asegúrese de revisar también los inconvenientes resaltados y los riesgos asociados a medida que avanza.

Icono objetivo Establecer una base sólida para la resistencia en la infraestructura y las operaciones de la carga de trabajo, en lugar de dedicar tiempo a las tareas de optimización.

El nivel 1 del modelo de madurez está diseñado para ayudar a los equipos de carga de trabajo a crear una base sólida para la confiabilidad del sistema. El enfoque se centra en el arranque, que es el proceso de establecer los fundamentos para futuras decisiones de confiabilidad. Esta fase implica principalmente la implementación funcional con extensiones secundarias a las prácticas actuales.

Esta fase incluye la investigación, la obtención de información y la creación de un inventario de los sistemas. También usa características de confiabilidad integradas en Azure, como habilitar la redundancia de zona para mejoras inmediatas.

Al establecer estos conceptos básicos, puede preparar al equipo para avanzar a través de los niveles del modelo de madurez de confiabilidad para mejorar progresivamente la resistencia y el rendimiento del sistema.

Estrategias clave

✓ Evaluar oportunidades para descargar la responsabilidad operativa

Esta estrategia es fundamentalmente un enfoque de desarrollo frente a uno de compra o dependencia de terceros. La decisión depende de la cantidad de responsabilidad que se pueda administrar en esta fase, a la vez que se sigue apoyando el desarrollo futuro. Se desea usar recursos relevantes para la carga de trabajo, pero siempre es necesario explorar las oportunidades para delegar su mantenimiento. Estos son algunos casos de uso clásicos en los que es posible que quiera aplicar este enfoque.

  • Descargue las responsabilidades en la plataforma en la nube eligiendo soluciones de plataforma como servicio (PaaS). Proporcionan soluciones preparadas para necesidades comunes de resistencia, como la replicación, la conmutación por error y los almacenes de copia de seguridad. Al adoptar este enfoque, el proveedor de nube controla las mejoras de hospedaje, mantenimiento y resistencia.

    Por ejemplo, el proveedor de nube replica datos en varios nodos de proceso y distribuye las réplicas entre zonas de disponibilidad. Si crea su propia solución en máquinas virtuales (VM), debe administrar estos aspectos usted mismo, lo que puede llevar mucho tiempo y ser complejo.

  • Delegue responsabilidades operativas que no están directamente alineadas con los objetivos empresariales de la carga de trabajo. Algunas operaciones especializadas, como la administración de bases de datos y la seguridad, pueden afectar potencialmente a la confiabilidad de la carga de trabajo. Explore la posibilidad de tener equipos experimentados, tecnología o ambos controlar esas tareas.

    Por ejemplo, si el equipo no tiene experiencia en bases de datos, use servicios administrados para ayudar a cambiar la responsabilidad al proveedor. Este enfoque puede ser útil al empezar porque permite al equipo centrarse en la funcionalidad de la carga de trabajo. Muchas empresas han compartido servicios administrados centralmente. Si los equipos de plataforma están disponibles, úselos para controlar estas operaciones. Sin embargo, este enfoque podría agregar dependencias y complejidad organizativa.

    Como alternativa, si el equipo tiene la experiencia adecuada, puede tomar una decisión explícita de usar sus aptitudes y seleccionar servicios que no incluyan funcionalidades de administración.

  • Descargue las responsabilidades de los proveedores que no son de Microsoft. Elija productos fuera de la estantería como punto de partida. Cree soluciones personalizadas solo cuando contribuyen al valor empresarial de la carga de trabajo.

Riesgo: Si la opción comprar o confiar cumple parcialmente sus requisitos, es posible que tenga que implementar extensiones personalizadas. Este método puede dar lugar a una situación de "bloqueo de personalización", donde las actualizaciones y la modernización resultan poco prácticas. Revise periódicamente los requisitos y compárelos con las funcionalidades de la solución. Desarrolle una estrategia de salida para cuando haya una desviación significativa entre los dos.

El escenario opuesto también es un riesgo. Aunque la opción de compra o confianza puede parecer más sencilla al principio, podría requerir volver a evaluar y rediseñar más adelante si las limitaciones del servicio PaaS, la solución de proveedor o los recursos propiedad de la plataforma no cumplen la granularidad o el nivel de autonomía necesarios para la carga de trabajo.

✓ Identificar los flujos críticos de usuario y sistema

Dividir la carga de trabajo en flujos es fundamental en esta fase. Céntrese en los flujos de usuario y sistema . Los flujos de usuario determinan las interacciones del usuario y los flujos del sistema determinan la comunicación entre los componentes de carga de trabajo que no están asociados directamente con las tareas del usuario.

Por ejemplo, en una aplicación de comercio electrónico, los clientes realizan actividades de front-end, como la exploración y el orden. Mientras tanto, las transacciones de back-end y los procesos desencadenados por el sistema cumplen las solicitudes de usuario y controlan otras tareas. Esos flujos distintos forman parte del mismo sistema, pero implican distintos componentes y sirven para distintos propósitos.

Empiece a crear un catálogo de flujos en esta fase. Observe las interacciones del usuario y la comunicación de componentes. Enumere y clasifique los flujos, defina sus puntos iniciales y finales y anote las dependencias. Documente los resultados y las excepciones mediante diagramas para mayor claridad. Este catálogo puede servir como una herramienta importante para la conversación inicial con las partes interesadas empresariales para identificar los aspectos más importantes desde su perspectiva. Esta conversación puede informar al primer nivel de priorización.

Clasifique un flujo como crítico mediante la evaluación del riesgo y el impacto en las actividades empresariales principales. Si espera una interrupción, la degradación correcta se centra en mantener estos flujos críticos. En el ejemplo de comercio electrónico, los flujos críticos incluyen búsquedas de productos, agregar artículos al carrito y procesar el pago porque estas tareas son esenciales para el negocio. Otros procesos, como actualizar los datos del producto y mantener imágenes de producto, no son tan críticos. Asegúrese de que los flujos críticos permanecen operativos durante una interrupción para evitar la pérdida de ingresos al permitir que los usuarios sigan buscando productos y agregando elementos al carro.

Nota:

Un proceso de negocio puede ser crítico incluso si no es sensible al tiempo. La criticidad del tiempo es un factor clave. Por ejemplo, cumplir los requisitos de auditoría es un proceso crítico, pero es posible que no necesite presentar datos para una auditoría inmediatamente. El proceso sigue siendo importante, pero su confiabilidad no es crítica en términos de tiempo, dado que es aceptable una recuperación en pocas horas.

Para más información, consulte Azure Well-Architected Framework: Optimización del diseño de cargas de trabajo mediante flujos.

✓ Seleccione el modelo de diseño adecuado, los recursos y las características.

Debe aplicar esta estrategia en los siguientes niveles:

  • Arquitectura: El diseño de la carga de trabajo debe tener en cuenta las expectativas de confiabilidad en varios niveles de infraestructura. Las decisiones iniciales pueden ser la elección entre la contenedorización o PaaS para hospedar la aplicación. O bien, puede considerar las configuraciones de red, como el centro y el radio (hub and spoke) o una sola red virtual.

    También debe establecer límites que creen segmentación en función de la funcionalidad. Por ejemplo, en lugar de hospedar todo en una máquina virtual con un disco virtual de una sola zona, considere la posibilidad de dividir el almacenamiento de datos y el proceso y el uso de servicios dedicados.

    Precaución

    En escenarios de migración, adoptar un enfoque lift-and-shift sin revisar nuevas oportunidades puede resultar en beneficios perdidos e ineficiencias. Es importante investigar la modernización pronto para evitar que se bloquee con las configuraciones que son difíciles de cambiar y para aprovechar las mejores opciones y mejoras.

  • Servicios de Azure: Use árboles de decisión para ayudarle a seleccionar los servicios adecuados para su diseño. Elija los componentes que satisfagan sus necesidades actuales, pero siga siendo flexible para poder cambiar los servicios a medida que evoluciona la carga de trabajo y requiere más características.

  • SKU o niveles dentro de los servicios de Azure: Revise las características de cada SKU y comprenda las garantías de disponibilidad de la plataforma. Evalúe los acuerdos de nivel de servicio para comprender la cobertura proporcionada alrededor del percentil publicado.

  • Características que admiten la confiabilidad: Elija servicios nativos en la nube para mejorar la disponibilidad a través de configuraciones sencillas sin cambiar el código. Es importante comprender las opciones y seleccionar intencionadamente las configuraciones, como aumentar la redundancia de zona o replicar datos en una región secundaria.

✓ Implementar con un nivel básico de redundancia

Dentro de cada parte de la solución, evite puntos únicos de error, como instancias únicas. En su lugar, cree varias instancias para la redundancia. Los servicios de Azure suelen controlar la redundancia, especialmente con los servicios PaaS, que normalmente incluyen redundancia local de forma predeterminada y opciones para actualizar. Preferiblemente, use redundancia de zona para distribuir esas instancias entre varios centros de datos de Azure. Si no lo hace, al menos garantiza la redundancia local, pero este método conlleva un mayor riesgo. En los niveles futuros, evaluará si es posible que se cumplan los requisitos de confiabilidad ampliando la solución con componentes con redundancia geográfica.

Compensación: Una compensación significativa es el mayor costo de redundancia. Además, la comunicación entre zonas puede introducir latencia. En el caso de las aplicaciones heredadas que requieren una latencia mínima, la redundancia puede degradar el rendimiento.

Riesgo: Si una aplicación no está diseñada para un entorno de varias instancias, podría tener problemas con varias instancias activas, lo que puede provocar datos incoherentes. Además, si una aplicación se compila para una configuración local que tiene baja latencia, el uso de zonas de disponibilidad podría interrumpir su rendimiento.

✓ Habilite métricas, registros y seguimientos para supervisar los flujos

Elija herramientas nativas de plataforma como Azure Monitor para garantizar la visibilidad de las métricas, los registros y los seguimientos. Use características integradas para establecer alertas para posibles problemas. Debe tener alertas básicas para enviar notificaciones y obtener alertas. Aproveche las funcionalidades de la plataforma Azure que indican los cambios en el estado de mantenimiento de los servicios, como:

Configure grupos de acciones de Azure Monitor para la infraestructura y la aplicación.

Dilema: A medida que recopila más registros, debe administrar el volumen creciente, lo que afecta a los costos relacionados con el almacenamiento de esos registros. Use directivas de retención para administrar el volumen. Use Azure Monitor para establecer un límite diario en un área de trabajo. Para obtener más información, consulte Recomendaciones de configuración para confiabilidad.

Comience a crear observabilidad en las capas siguientes.

Infraestructura

Comience habilitando los registros de diagnóstico y asegurándose de recopilar métricas nativas de los componentes de la plataforma para su análisis. Recopile información sobre el uso de recursos, como CPU, memoria, entrada/salida y actividad de red.

Aplicación

Recopile métricas de nivel de aplicación, como el consumo de memoria o la latencia de solicitudes, y registre las actividades de la aplicación. Realice el registro de operaciones en un hilo o proceso independiente del hilo de aplicación principal. Este enfoque no hace que el registro ralentice las tareas principales de la aplicación.

Además, compruebe las pruebas de disponibilidad básicas en Application Insights.

Datos

Para supervisar las bases de datos en un nivel básico, recopile métricas clave que emiten los recursos de la base de datos. De forma similar a los componentes de infraestructura, realice un seguimiento del uso de recursos en el contexto de los almacenes de datos, como las métricas de red. La recopilación de datos sobre cómo se agrupan las conexiones es importante para mejorar la eficacia en las fases posteriores.

Para la confiabilidad, es importante realizar un seguimiento de las métricas de conexión, como la supervisión de conexiones activas y con errores. Por ejemplo, en Azure Cosmos DB, se devuelve un código de estado 429 cuando el número de solicitudes supera las unidades de solicitud asignadas y las conexiones comienzan a generar errores.

✓ Empezar a crear un cuaderno de estrategias de mitigación de errores

Los errores van desde errores transitorios intermitentes a ligeramente extendidos y interrupciones catastróficas.

En el nivel 1, céntrese en los errores de la plataforma. A pesar de que están fuera de su control, todavía debe tener estrategias para controlarlas. Por ejemplo, solucione las interrupciones zonales mediante zonas de disponibilidad. Anticipar fallos transitorios en el nivel de plataforma y gestionarlos en la carga de trabajo.

El proceso de control de estos errores varía en función de la complejidad. Comience a documentar posibles errores de nivel de plataforma, sus riesgos asociados y las estrategias de mitigación. Este ejercicio es principalmente teórico y madura con automatización en niveles posteriores.

Debe documentar errores, incluidos factores como su probabilidad, impacto y estrategias de mitigación. Use una escala de importancia crítica que se alinee con los objetivos de la carga de trabajo. Tu escala puede incluir:

  • Alto. Una interrupción completa del sistema que da lugar a una pérdida financiera significativa y un descenso en la confianza del usuario.

  • Mediana. Una interrupción temporal que afecta a parte de la carga de trabajo y provoca molestias del usuario.

  • Bajo. Un problema de software menor que afecta a una característica no esencial de la aplicación y provoca un tiempo de inactividad mínimo para los usuarios.

Esta es una plantilla de ejemplo:

Problema Riesgo Fuente Severidad Probabilidad Mitigación
Error de red transitorio El cliente pierde su conexión con el servidor de aplicaciones. Plataforma Azure Alto Muy probable Use patrones de diseño en la lógica del lado cliente, como la lógica de reintento y los disyuntores.
Interrupción de zona El usuario no puede acceder a la aplicación. Plataforma Azure Alto No es probable que Habilite la resistencia de zona en todos los componentes.
Expiración del certificado de seguridad de la capa de transporte (TLS) El cliente no puede establecer una sesión TLS con la aplicación. Error humano Alto Probablemente Use la administración automatizada de certificados TLS.
El uso de CPU o memoria alcanza los límites definidos y hace que se produzca un error en el servidor. Tiempo de espera de solicitud superado. Aplicación Media Probablemente Implementar reinicios automáticos.
El componente no está disponible durante una actualización. El usuario experimenta un error no controlado en la aplicación. Implementación o cambio en la configuración Bajo Es muy probable durante las implementaciones y no es probable en otros momentos Controle los componentes en la lógica del lado cliente.

En el nivel 1, no te esfuerces por lograr una cobertura completa porque siempre hay casos de fallo imprevistos. Si experimenta interrupciones inesperadas, documente las causas y mitigaciones en el manual de operaciones. Trate este recurso como un documento activo que actualice con el tiempo.

✓ Agregar mecanismos para recuperarse de errores transitorios

En un entorno de nube, los errores transitorios son comunes. Indican problemas temporales que los reintentos normalmente pueden resolver en cuestión de segundos.

Utilice SDKs y configuraciones integrados para gestionar estos errores y mantener el sistema activo. Las configuraciones integradas suelen ser la configuración predeterminada, por lo que es posible que tenga que probar para validar la implementación. Además, implemente patrones diseñados para controlar errores transitorios en la arquitectura. Para obtener más información, consulte Patrones de diseño de arquitectura que admiten la confiabilidad.

Los problemas persistentes pueden indicar un error que no es transitorio o el inicio de una interrupción. Este escenario requiere más que corregir problemas localizados dentro de la aplicación. Implica examinar los flujos críticos de usuario y sistema del sistema y agregar técnicas de autoconservación y esfuerzos de recuperación. Estos métodos son prácticas maduras que describe el nivel 2.

✓ Ejecutar pruebas básicas

Integre las pruebas de confiabilidad básicas en las primeras fases del ciclo de vida de desarrollo de software. Busque oportunidades para realizar pruebas, empezando por pruebas unitarias para validar la funcionalidad y las configuraciones.

Además, desarrolle casos de prueba sencillos para los problemas que identifique en el cuaderno de estrategias de mitigación de riesgos. Céntrese en mitigaciones de mayor impacto y menor esfuerzo. Por ejemplo, simulación de interrupciones de red o problemas de conectividad intermitentes para ver cómo la lógica de reintento resuelve las interrupciones.

Riesgo: Las pruebas a menudo presentan fricción en el ciclo de desarrollo. Para mitigar este riesgo, haga que las pruebas de confiabilidad sean rastreables junto con las tareas de desarrollo.

El desarrollo de características es la prioridad y las pruebas pueden introducir fricción en el ciclo de desarrollo. Es más fácil iniciar las pruebas antes de que se complete el desarrollo de características. El diseño de aspectos no funcionales de la aplicación al principio le permite ampliarlos a medida que agrega funcionalidades funcionales, en lugar de crear un trabajo pendiente de problemas para solucionarlos más adelante. Aunque este enfoque requiere más esfuerzo inicialmente, es manejable y evita problemas más grandes más adelante.

Pasos siguientes