Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La metodología de diseño crítica se basa en cinco principios clave de diseño que sirven como brújula para las decisiones de diseño posteriores en las áreas de diseño críticas. Le recomendamos encarecidamente que se familiarice con estos principios para comprender mejor su impacto y las desventajas asociadas a la no adhesión.
Fiabilidad
Principio de diseño | Consideraciones |
---|---|
Diseño activo/activo | Para maximizar la disponibilidad y lograr la tolerancia a errores regionales, los componentes de la solución deben distribuirse entre varias zonas de disponibilidad y regiones de Azure mediante un modelo de implementación activo o activo siempre que sea posible. |
Reducción del radio de alcance de la explosión y aislamiento de fallos | El error es imposible de evitar en un entorno de nube de hiperescala muy distribuido, como Azure. Al anticipar errores y el impacto correlacionado, desde componentes individuales a regiones de Azure completas, se puede diseñar y desarrollar una solución de forma resistente. |
Observar el estado de la aplicación | Antes de que se puedan mitigar los problemas que afectan a la confiabilidad de las aplicaciones, primero deben detectarse y comprenderse. Al supervisar el funcionamiento de una aplicación con respecto a un estado correcto conocido, es posible detectar o incluso predecir problemas de confiabilidad, lo que permite realizar acciones correctivas rápidas. |
Potenciación de la automatización | Una de las principales causas del tiempo de inactividad de la aplicación es un error humano, tanto si se debe a la implementación de software probado insuficientemente como a una configuración incorrecta. Para minimizar la posibilidad y el impacto de los errores humanos, es fundamental esforzarse por la automatización en todos los aspectos de una solución en la nube para mejorar la confiabilidad; pruebas automatizadas, implementación y administración. |
Diseño para la recuperación automática | La recuperación automática describe la capacidad de un sistema para tratar los errores automáticamente a través de protocolos de corrección predefinidos conectados a los modos de error dentro de la solución. Es un concepto avanzado que requiere un alto nivel de madurez del sistema con supervisión y automatización, pero debe ser una aspiración del inicio para maximizar la confiabilidad. |
Prevención de complejidad | Evite la complejidad innecesaria al diseñar la solución y todos los procesos operativos para impulsar la confiabilidad y la eficiencia de la administración, lo que minimiza la probabilidad de errores. |
Eficiencia del rendimiento
Principio de diseño | Consideraciones |
---|---|
Diseño de la escalabilidad horizontal | La escalabilidad horizontal es un concepto que se centra en la capacidad de un sistema para responder a la demanda a través del crecimiento horizontal. Esto significa que a medida que crece el tráfico, se agregan más unidades de recursos en paralelo en lugar de aumentar el tamaño de los recursos existentes. La capacidad de un sistema para manejar los aumentos esperados e inesperados del tráfico a través de unidades de escalabilidad es esencial para el rendimiento y la confiabilidad generales, al reducir aún más el impacto de la falla de un único recurso. |
Automatización para hiperescala | Las operaciones de escalado en toda la solución deben estar totalmente automatizadas para minimizar el impacto en el rendimiento y la disponibilidad debido a aumentos inesperados o previstos en el tráfico, asegurando que se comprenda el tiempo necesario para realizar estas operaciones de escalado y se alinee con un modelo de salud de la aplicación. |
Validación y pruebas continuas | Las pruebas automatizadas deben realizarse dentro de los procesos de CI/CD para impulsar la validación continua de cada cambio de aplicación. Las pruebas de carga contra una línea base de rendimiento con experimentación de caos sincronizada deben incluirse para validar los umbrales, los objetivos y las suposiciones existentes, así como para ayudar a identificar rápidamente los riesgos para la resiliencia y la disponibilidad. Estas pruebas deben realizarse en entornos de ensayo y pruebas, pero también opcionalmente en entornos de desarrollo. También puede ser beneficioso ejecutar un subconjunto de pruebas en el entorno de producción, especialmente junto con un modelo de implementación azul/verde para validar las nuevas etiquetas de implementación antes de recibir tráfico de producción. |
Reducción de la sobrecarga con servicios de proceso administrados | El uso de servicios de proceso administrados y arquitecturas en contenedores reduce significativamente la sobrecarga administrativa y operativa continua de diseño, funcionamiento y escalado de aplicaciones cambiando la implementación y el mantenimiento de la infraestructura al proveedor de servicios administrados. |
Establecer el rendimiento inicial e identificar el cuello de botella | Las pruebas de rendimiento con telemetría detallada de todos los componentes del sistema permiten la identificación de cuellos de botella dentro del sistema, incluidos los componentes que deben escalarse en relación con otros componentes, y esta información debe incorporarse a un modelo de capacidad. |
Capacidad del modelo | Un modelo de capacidad permite planear los niveles de escala de recursos para un perfil de carga determinado y, además, expone cómo funcionan los componentes del sistema en relación entre sí, lo que permite planear la asignación de capacidad en todo el sistema. |
Excelencia operativa
Principio de diseño | Consideraciones |
---|---|
Componentes acoplados flexiblemente | El acoplamiento flexible permite pruebas, implementaciones y actualizaciones independientes y a petición de los componentes de la aplicación, a la vez que minimiza las dependencias entre equipos para soporte técnico, servicios, recursos o aprobaciones. |
Automatización de procesos de compilación y versión | Los procesos de compilación y versión totalmente automatizados reducen la fricción y aumentan la velocidad de implementación de actualizaciones, lo que aporta repetibilidad y coherencia entre entornos. La automatización reduce el bucle de comentarios de los desarrolladores que insertan cambios para obtener información sobre la calidad del código, la cobertura de pruebas, la resistencia, la seguridad y el rendimiento, lo que aumenta la productividad del desarrollador. |
Agilidad del desarrollador | La automatización de integración continua e implementación continua (CI/CD) permite el uso de entornos de desarrollo de corta duración con ciclos de vida vinculados a la de una rama de características asociada, que promueve la agilidad del desarrollador y impulsa la validación lo antes posible dentro del ciclo de ingeniería para minimizar el costo de ingeniería de los errores. |
Cuantificar el estado operativo | La instrumentación de diagnóstico completa de todos los componentes y recursos permite observar continuamente los registros, las métricas y los seguimientos, pero también facilita el modelado de estado para cuantificar el estado de la aplicación en el contexto de los requisitos de disponibilidad y rendimiento. |
Ensayar la recuperación y practicar el fracaso | La planificación y la práctica de la continuidad empresarial (BC) y la recuperación ante desastres (DR) son esenciales y deben realizarse con frecuencia, ya que los aprendizajes pueden mejorar iterativamente los planes y procedimientos para maximizar la resistencia en caso de tiempo de inactividad no planeado. |
Adopción de la mejora operativa continua | Priorice la mejora rutinaria del sistema y la experiencia del usuario mediante un modelo de mantenimiento para comprender y medir la eficacia operativa con mecanismos de comentarios para permitir que los equipos de aplicaciones comprendan y solucione las brechas de forma iterativa. |
Seguridad
Principio de diseño | Consideraciones |
---|---|
Supervisar la seguridad de toda la solución y planear las respuestas a incidentes | Correlacionar eventos de seguridad y auditoría para modelar el estado de la aplicación e identificar amenazas activas. Establezca procedimientos automatizados y manuales para responder a incidentes mediante herramientas de administración de eventos e información de seguridad (SIEM) para el seguimiento. |
Modelar y probar contra posibles amenazas | Asegúrese de endurecer adecuadamente los recursos y establezca procedimientos para identificar y mitigar las amenazas conocidas, utilizando pruebas de penetración para verificar la mitigación de amenazas, además del análisis estático de código y el escaneo de códigos. |
Identificación y protección de puntos de conexión | Supervise y proteja la integridad de red de los puntos de conexión internos y externos a través de dispositivos y prestaciones de seguridad, como firewalls o firewalls de aplicaciones web. Use enfoques estándar del sector para protegerse contra vectores de ataque comunes, como ataques de denegación distribuida-Of-Service (DDoS), como SlowLoris. |
Protección contra vulnerabilidades de nivel de código | Identifique y mitigue vulnerabilidades de nivel de código, como scripting entre sitios o inyección de código SQL, e incorpore revisiones de seguridad en los ciclos de vida operativos de todas las partes del código base, incluidas las dependencias. |
Automatización y uso de privilegios mínimos | Impulsar la automatización para minimizar la necesidad de interacción humana e implementar privilegios mínimos tanto en la aplicación como en el plano de control para protegerse frente a escenarios de filtración de datos y de actores malintencionados. |
Clasificación y cifrado de datos | Clasifique los datos según el riesgo y aplique el cifrado estándar del sector en reposo y en tránsito, lo que garantiza que las claves y los certificados se almacenan de forma segura y administrada correctamente. |
Optimización de costos
Existen ventajas obvias de costos asociadas a la introducción de una mayor confiabilidad, que se deben tener en cuenta cuidadosamente en el contexto de los requisitos de carga de trabajo.
Maximizar la confiabilidad puede afectar al costo financiero general de la solución. Por ejemplo, la duplicación de recursos y la distribución de recursos entre regiones para lograr una alta disponibilidad tiene implicaciones claras en los costos. Para evitar costos excesivos, no sobre-ingenierice ni sobre-aprovisione más de lo que requieren los requisitos empresariales pertinentes.
Además, se ha agregado un costo asociado a la inversión en ingeniería en conceptos fundamentales de confiabilidad, como adoptar la infraestructura como código, automatización de implementación y automatización de pruebas. Esto conlleva un costo en términos de tiempo y esfuerzo, lo que podría invertirse en otro lugar para ofrecer nuevas características y funcionalidades de la aplicación.
Paso siguiente
Las áreas de diseño están interconectadas, por lo que los cambios en una área pueden afectar a otros. Comience con el área más crítica para su negocio y revise las consideraciones y recomendaciones para comprender cómo las opciones crean ventajas y desventajas en toda la arquitectura.