En esta sección del framework de arquitectura, se explora cómo la ejecución, administración y supervisión eficientes de los sistemas que entregan valor empresarial dan como resultado excelencia operativa.
El framework consta de la siguiente serie de artículos:
- Descripción general
- Consideraciones sobre el diseño del sistema de Google Cloud
- Excelencia operativa (este artículo)
- Seguridad, privacidad y cumplimiento
- Confiabilidad
- Rendimiento y optimización de costos
La excelencia operativa te ayuda a sentar las bases para otro principio fundamental: la confiabilidad. Consulta la sección Confiabilidad para conocer los requisitos técnicos y de procedimiento relacionados con la arquitectura y la operación de servicios confiables en Google Cloud.
Estrategias
Usa estas estrategias para alcanzar la excelencia operativa.
Automatiza la compilación, la prueba y la implementación. Usa canalizaciones de integración e implementación continua (CI/CD) para compilar pruebas automatizadas en tus actualizaciones. Realiza implementaciones y pruebas de integración automatizadas.
Supervisa las métricas de los objetivos comerciales. Define, mide y alerta sobre las métricas empresariales pertinentes.
Realiza pruebas de recuperación ante desastres. No esperes a que ocurra un desastre. En su lugar, verifica de forma periódica que tus procedimientos de recuperación ante desastres funcionen y prueba los procesos con regularidad.
Prácticas recomendadas
Sigue estas prácticas para alcanzar la excelencia operativa.
- Aumenta la velocidad del lanzamiento y el desarrollo de software.
- Supervisa el estado del sistema y de la empresa.
- Planifica y diseña para evitar fallas.
Las siguientes secciones abarcan las prácticas recomendadas en detalle.
Aumenta la velocidad del lanzamiento y el desarrollo
Usa un enfoque de CI/CD para aumentar la velocidad. Primero, haz que tu equipo de desarrollo de software sea más productivo y automatiza las pruebas de integración en el proceso de compilación. Debes automatizar la implementación después de que la compilación cumpla con los criterios de prueba específicos. Los desarrolladores pueden hacer cambios más pequeños y frecuentes. Los cambios se prueban de forma exhaustiva, y se reduce su tiempo de implementación.
En esta sección, se describen los elementos de un enfoque de CI/CD: la ingeniería de lanzamientos, la automatización, los repositorios de código central, las canalizaciones de compilación, la implementación y las pruebas.
Ingeniería de lanzamientos
La ingeniería de lanzamientos es una función de trabajo que supervisa la forma en que se compila y entrega el software. La ingeniería de lanzamientos se rige por cuatro prácticas:
- Modo de autoservicio. Establece lineamientos para ayudar a los ingenieros de software a evitar errores comunes. Aplicado por procesos automatizados.
- Actualizaciones frecuentes. Una velocidad alta facilita la solución de problemas. Las actualizaciones frecuentes se basan en pruebas de unidades automatizadas.
- Compilaciones herméticas. Garantiza la coherencia con tus herramientas de compilación. Crea versiones de los compiladores que usaste para compilar versiones ahora y hace un mes.
- Aplicación de la política. Todos los cambios necesitan revisión de código, lo que incluye un conjunto de lineamientos y políticas para aplicar la seguridad. Esto mejora la revisión del código, la solución de problemas y la prueba de un nuevo lanzamiento.
Automatización
Automatiza tu canalización de lanzamiento y compilación para analizar problemas conocidos y realizar pruebas rápidas. También puedes usar la automatización para eliminar tareas repetitivas.
Repositorios de código central
Almacena tu código en un repositorio central, con versiones y etiquetado (por ejemplo, test, dev, prod) según sea necesario. Seguir estos pasos ayuda a garantizar que tu canalización de compilación produzca resultados coherentes. En Google Cloud, puedes almacenar tu código en la versión de Cloud Source Repositories e integrarlo a varios productos.
Canalizaciones de compilación
Crea una versión de tu configuración de compilación para asegurarte de que todas las compilaciones sean coherentes y, si es necesario, de revertir a la última configuración más conocida. En Google Cloud, Cloud Build te ayuda a definir dependencias y versiones para compilar un paquete de aplicaciones. Puedes usar Cloud Functions para activar un proceso de compilación de forma periódica o activar compilaciones en eventos específicos cuando se registra un código nuevo. También puedes usar Cloud Functions para activar las pruebas y automatizar la canalización completa.
Realiza pruebas
Las pruebas son una parte fundamental de un lanzamiento exitoso. Estos son algunos ejemplos de pruebas:
- Prueba de unidades. Las pruebas de unidades son rápidas y te ayudan a realizar implementaciones rápidas.
- Pruebas de integración. Estas pruebas pueden volverse complejas cuando pruebas la integración con servicios interconectados.
- Pruebas del sistema. Las pruebas del sistema consumen mucho tiempo y son complejas, pero te ayudan a identificar casos extremos y solucionar problemas antes de la implementación.
Puedes realizar otras pruebas, incluidas pruebas estáticas, de carga, de seguridad, etc., antes de implementar tu aplicación en producción. Después de automatizar las pruebas, puedes actualizar y agregar pruebas nuevas para mejorar y mantener el estado operativo de tu implementación.
Implementación
Puedes elegir la forma en que se lanza tu aplicación. Se recomienda realizar pruebas canary y observar si hay errores en tu sistema, lo que es más fácil si tienes un sistema de supervisión y alertas sólido. En Google Cloud, puedes usar grupos de instancias administrados (MIG) para realizar pruebas A/B o canary, así como realizar un lanzamiento lento o una reversión si es necesario.
Preguntas sobre diseño
- ¿Cómo administra tu equipo de desarrollo la compilación y el lanzamiento?
- ¿Qué pruebas de integración y seguridad emplea tu equipo de desarrollo?
- ¿Cómo se realiza una reversión?
Recomendaciones
- Haz que la canalización de CI/CD sea la única forma de implementar en producción.
- Aísla y protege tu entorno de CI/CD.
- Compila solo una vez y asciende el resultado a través de la canalización.
- Mantén tus canalizaciones de CI/CD rápidas.
- Minimiza las ramas en tu sistema de control de versiones.
Servicios clave
Cloud Source Repositories es un servicio de repositorios de Git privado con todas las funciones, alojado en Google Cloud. Puedes usar Cloud Source Repositories para el desarrollo colaborativo de cualquier aplicación o servicio.
Con Container Registry, tu equipo puede administrar las imágenes de Docker, llevar a cabo análisis de vulnerabilidades y decidir quién accede a qué recursos con un control de acceso preciso, todo en un solo lugar. Las integraciones de CI/CD existentes te permiten configurar canalizaciones de Docker automatizadas por completo para obtener comentarios sin demoras.
Cloud Build es un servicio que ejecuta tus compilaciones en la infraestructura de Google Cloud. Cloud Build puede importar código fuente de GitHub, Bitbucket, Cloud Storage o Cloud Source Repositories, ejecutar una compilación según tus especificaciones y producir artefactos, como contenedores de Docker o archivos de Java.
Supervisa el estado del sistema y de la empresa
El proyecto de investigación y evaluación de DevOps (DORA) define la supervisión de la siguiente manera:
La supervisión es el proceso de recopilar, analizar y usar la información para hacer un seguimiento de las aplicaciones y la infraestructura a fin de poder orientarse en el momento de tomar decisiones empresariales. La supervisión es una función clave porque te brinda estadísticas sobre tus sistemas y tu trabajo.
A través de la supervisión, puedes tomar decisiones sobre el impacto de los cambios en tu servicio, aplicar el método científico a la respuesta ante incidentes y medir la alineación del servicio con los objetivos de tu negocio. Con la supervisión implementada, puedes hacer lo siguiente:
- Analizar las tendencias a largo plazo
- Comparar tus experimentos en el tiempo
- Definir alertas sobre métricas críticas
- Crear paneles relevantes en tiempo real
- Realizar un análisis retrospectivo
Supervisa las métricas basadas en negocios y las métricas de estado del sistema. Las métricas basadas en negocios te ayudan a comprender cómo los sistemas respaldan tu negocio. Por ejemplo, podrías supervisar el costo de entregar un usuario en una aplicación, el cambio en el volumen del tráfico hacia tu sitio después de un nuevo diseño o el tiempo que le toma a un cliente comprar un producto en tu sitio. Las métricas de estado del sistema te ayudan a comprender si los sistemas funcionan de forma correcta y dentro de niveles de rendimiento aceptables.
Usa los siguientes cuatro indicadores de oro para supervisar tu sistema:
- Latencia. Es el tiempo que toma realizar una solicitud.
- Tráfico. Cuánta demanda se coloca en tu sistema.
- Errores. La tasa de solicitudes que fallan. Las solicitudes pueden fallar de forma explícita (por ejemplo, HTTP 500), implícita (por ejemplo, una respuesta HTTP 200 exitosa, pero con contenido incorrecto) o por política (por ejemplo, si confirmaste tiempos de respuesta de un segundo, cualquier respuesta que tome más de un segundo generará un error).
- Saturación. Qué tan completo es tu servicio. Una medida de tus recursos más restringidos (es decir, en un sistema con restricción de memoria, se muestra la memoria; en un sistema con restricción de E/S, se muestra la E/S).
Registro
Los servicios de registro son fundamentales para supervisar tus sistemas. Si bien las métricas forman la base de los elementos específicos que se supervisan, los registros contienen información valiosa que necesitas para la depuración, el análisis relacionado con la seguridad y los requisitos de cumplimiento. Google Cloud incluye Cloud Logging, un servicio de registro integrado que puedes usar para almacenar, buscar, analizar, supervisar y generar alertas sobre los datos de registros y eventos de Google Cloud. Cloud Logging recopila los registros de los servicios de Google Cloud de forma automática. Puedes usar estos registros a fin de compilar métricas para supervisar y crear exportaciones de registros a servicios externos, como Cloud Storage, BigQuery y Pub/Sub.
Métricas
Define métricas para medir el comportamiento de tu implementación. Asegúrate de que las definiciones de métricas siempre se traduzcan a necesidades empresariales y considera ascender o combinar algunas métricas para formar indicadores de nivel de servicio (SLI). Para obtener detalles, consulta Confiabilidad.
Todos los niveles de tu servicio generan métricas, desde la infraestructura y las herramientas de redes hasta la lógica empresarial. Algunos ejemplos son los siguientes:
- Solicitudes por segundo, según lo que mida el balanceador de cargas
- Total de bloques de disco leídos, por disco
- Paquetes enviados a través de una interfaz de red determinada
- Tamaño del montón de memoria para un proceso determinado
- Distribución de las latencias de respuesta
- Cantidad de consultas no válidas que rechazó una instancia de base de datos
Supervisión
La supervisión de una aplicación compleja es una tarea de ingeniería importante en sí misma. Google Cloud proporciona Cloud Monitoring, un servicio administrado que forma parte del operations suite de Google Cloud. Puedes usar Cloud Monitoring a fin de supervisar las métricas personalizadas y los servicios de Google Cloud, y Cloud Monitoring proporciona una API para la integración con herramientas de supervisión de terceros.
Cloud Monitoring agrega métricas, registros y eventos desde la infraestructura, lo que brinda a los desarrolladores y operadores un amplio conjunto de señales visibles que ayudan a acelerar el análisis de causas raíz y reducen el tiempo promedio de resolución (MTTR). Puedes definir alertas y métricas personalizadas que cumplan con tus objetivos comerciales y te ayuden a agregar, visualizar y supervisar el estado de tu sistema.
Cloud Monitoring proporciona paneles predeterminados para servicios de aplicaciones de código abierto y en la nube. Mediante el modelo de métricas, puedes definir paneles personalizados con herramientas de visualización potentes y configurar gráficos en el Explorador de métricas.
Paneles
Después de implementar la supervisión, compila paneles que sean relevantes para ti a fin de tomar medidas. Haz que tus paneles sean simples y fáciles de leer. Debes realizar análisis a corto plazo o en tiempo real y a largo plazo y visualizarlos. Para obtener detalles, consulta Confiabilidad.
Alertas
Asegúrate de que el sistema de alertas se asigne directamente a las cuatro señales de oro para supervisar tu sistema, de modo que puedas comparar el rendimiento con el tiempo a fin de determinar la velocidad de la función o revertir los cambios.
Haz que las alertas sean prácticas. Cuando envíes alertas, incluye una descripción y proporciona toda la información necesaria para que la persona de guardia tome medidas de inmediato. No se necesitan más que algunos clics y navegación para comprender cómo tomar medidas con respecto a las alertas.
Siempre intenta eliminar las dificultades, por ejemplo, mediante la eliminación o automatización de las correcciones de los errores que ves con frecuencia. Permite que la persona de guardia se enfoque en hacer que los componentes operativos sean confiables. Para obtener detalles, consulta Confiabilidad.
Ruta de derivación
Una ruta de derivación bien definida es clave si quieres reducir el esfuerzo que inviertes en obtener asistencia para los productos de Google Cloud. Esta ruta incluye aprender a trabajar con el equipo de asistencia de Google, encontrar documentos de arquitectura que se ajusten a los ingenieros de asistencia, definir cómo comunicarse durante una interrupción y configurar la supervisión y el registro a fin de diagnosticar problemas.
Para comenzar a definir una ruta de derivación, asegúrate de que los administradores de seguridad, red y sistema estén configurados de forma correcta a fin de recibir correos electrónicos y alertas importantes de Google Cloud. Esto ayuda a los administradores a tomar decisiones fundamentadas y a solucionar los problemas con anticipación. De manera similar, asegúrate de que los propietarios de proyectos tengan nombres de usuario enrutables por correo electrónico para que puedan recibir correos electrónicos importantes.
Recomendaciones
- Elige métricas pertinentes que se adapten a las necesidades de tu negocio.
- Usa Cloud Monitoring e implementa agentes de supervisión para las métricas personalizadas, si es necesario.
- Asegúrate de que Cloud Logging esté configurado para todas las entradas de registro.
- Diseña alertas bien definidas, como el porcentaje de éxito o falla.
- Envía alertas con información para tomar medidas.
- Considera comprar un paquete de asistencia para empresas o basado en funciones.
- Define una ruta de derivación y proporciona indicadores útiles, como la hora, el producto y la ubicación, mientras trabajas con la asistencia de Cloud.
Servicios clave
Cloud Monitoring proporciona agregación, paneles y recopilación de métricas, así como un framework de alertas y verificaciones en extremos para aplicaciones web y otros servicios con acceso a través de Internet.
Cloud Logging te permite filtrar, buscar y ver registros y exportarlos a BigQuery, Cloud Storage o Pub/Sub desde tus servicios de aplicación de código abierto y en la nube. Puedes definir métricas basadas en el contenido de los registros que se incorporan en los paneles y las alertas.
El Depurador de Cloud conecta los datos de producción de la aplicación con el código fuente mediante una inspección del estado de la aplicación en cualquier ubicación de código en producción sin detener ni ralentizar las solicitudes.
Error Reporting analiza y agrupa los errores de las aplicaciones en la nube y te notifica cuando se detectan errores nuevos.
Cloud Trace te permite generar informes y muestras de latencia para App Engine, que incluyen distribuciones de latencia y estadísticas por URL.
Cloud Profiler proporciona la generación continua de perfiles de consumo de recursos en las aplicaciones en producción, lo que permite identificar y eliminar problemas de rendimiento.
Recursos
Patrones de diseño para las exportaciones de registros
Diseña para la recuperación ante desastres
Diseñar tu sistema para anticipar y controlar las situaciones de falla ayuda a garantizar que, si sucede una catástrofe, se minimice el impacto en los sistemas. Para anticiparte a las fallas, asegúrate de tener un plan de recuperación ante desastres (DR) bien definido y que se pruebe con regularidad para crear copias de seguridad y restablecer los servicios y los datos.
En cualquier momento, pueden producirse eventos que interrumpan el servicio. Tu red puede sufrir una interrupción, la última actualización de tu aplicación puede producir un error crítico o tal vez debas lidiar con un desastre natural. Cuando no todo sale como esperas, es importante contar con un plan de DR sólido, orientado y comprobado.
Planificación
La DR es un subconjunto del plan de continuidad empresarial. La planificación de DR comienza con un análisis del impacto en el negocio que define dos métricas clave:
Un objetivo de tiempo de recuperación (RTO), que es el período máximo aceptable en que la aplicación puede estar sin conexión. Por lo general, este valor se define como parte de un Acuerdo de Nivel de Servicio (ANS) más amplio.
Un objetivo de punto de recuperación (RPO), que es el período máximo aceptable en el que se pueden perder datos de la aplicación debido a un incidente importante. Esta métrica varía según las formas en las que se usan los datos. Por ejemplo, los datos del usuario que se modifican con frecuencia podrían tener un RPO de solo algunos minutos. Los datos modificados con menor frecuencia y menos críticos podrían tener un RPO de varias horas (en esta métrica, solo se describe el período, no se indica la cantidad ni la calidad de los datos que se pierden).
Por lo general, cuanto menores sean los valores de RTO y RPO (es decir, cuanto más rápido tu aplicación deba recuperarse de una interrupción), mayor será el costo de ejecución de la aplicación. En el siguiente gráfico, se muestra la relación del costo y el RTO/RPO:
Debido a que los valores de RTO y RPO menores implican una mayor complejidad, la sobrecarga administrativa sigue una curva similar. Por ejemplo, puede que una aplicación con alta disponibilidad (HA) requiera que administres la distribución entre dos centros de datos separados a nivel físico, que administres la replicación, etcétera.
En general, los valores de RTO y RPO se acumulan en otra métrica: el objetivo de nivel de servicio (SLO), que es un elemento medible clave de un ANS.
- Un ANS es el acuerdo completo en el que se especifica qué servicio se proporcionará, cómo se brindará asistencia, así como los tiempos, las ubicaciones, los costos, el rendimiento, las penalizaciones y las responsabilidades de las partes involucradas.
- Los SLO son características medibles y específicas del ANS, como la disponibilidad, la capacidad de procesamiento, la frecuencia, el tiempo de respuesta o la calidad.
Un único ANS puede contener muchos SLO. Los RTO y RPO son medibles y se deben considerar SLO.
Requisitos de infraestructura
Para la DR, se recomienda tener en cuenta una serie de requisitos, incluidos los siguientes:
- Capacidad: asegurar los recursos suficientes para escalar según sea necesario.
- Seguridad: proporcionar seguridad física para proteger los activos.
- Infraestructura de red: incluir componentes de software, como firewalls y balanceadores de cargas.
- Asistencia: poner a disposición técnicos capacitados para que realicen mantenimiento y solucionen problemas.
- Ancho de banda: planificar un ancho de banda adecuado para la carga máxima.
- Instalaciones: asegurar una infraestructura física, que incluya equipos y energía.
Recuperación ante desastres en Google Cloud
Google Cloud puede ayudarte a reducir el costo del cumplimiento de los requisitos de RTO y RPO en comparación con el cumplimiento local. Google Cloud te ayuda a evitar la mayoría de estos factores complicados relacionados con el hardware físico, o todos, lo que reduce muchos costos empresariales. Además, el enfoque de Google Cloud en la simplicidad administrativa está diseñado para ayudar a reducir los costos de administración de una aplicación compleja.
Google Cloud ofrece varias características pertinentes a la planificación de la DR:
Red global. Google tiene una de las redes informáticas más grandes y avanzadas del mundo. En la red troncal de Google, se usan herramientas de redes avanzadas definidas por software y servicios de almacenamiento en caché perimetral para brindar un rendimiento rápido, coherente y escalable.
Redundancia. Los varios puntos de presencia (POP) en todo el mundo garantizan una gran redundancia. Tus datos se duplican de forma automática en dispositivos de almacenamiento en varias ubicaciones.
Escalabilidad. Google Cloud está diseñada para escalar como otros productos de Google (por ejemplo, Búsqueda y Gmail), incluso cuando experimentas un gran aumento en el tráfico. Los servicios administrados, como App Engine, los escaladores automáticos de Compute Engine y Datastore ofrecen ajuste de escala automático para que la aplicación pueda aumentar o reducir la escala según sea necesario.
Seguridad. El modelo de seguridad de Google se creó a partir de más de 15 años de experiencia con el propósito de mantener a los clientes protegidos cuando usan las aplicaciones de Google, como Gmail y Google Workspace. Además, los equipos de ingeniería de confiabilidad de sitios de Google ayudan a asegurar una alta disponibilidad y evitar el abuso de los recursos de la plataforma.
Cumplimiento. Google se somete a auditorías de terceros independientes periódicas para verificar que Google Cloud cumpla las normas y prácticas recomendadas de seguridad, privacidad y cumplimiento. Google Cloud respalda el cumplimiento de certificaciones como ISO 27001, SOC 2/3 y PCI DSS 3.2.1.
Recomendaciones
- Define tus objetivos de RTO y RPO.
- Diseña tu plan de DR en función de las soluciones para datos y aplicaciones.
- Prueba tu plan de DR de forma manual al menos una vez al año.
- Evalúa la implementación de la inserción de fallas controladas para detectar regresiones de forma anticipada.
- Aprovecha la ingeniería del caos para encontrar áreas de riesgo.
Servicios clave
La instantánea de disco persistente ofrece instantáneas o copias de seguridad incrementales de máquinas virtuales (VM) de Compute Engine que puedes copiar entre regiones y usar para volver a crear discos persistentes en caso de que ocurra un desastre.
La migración en vivo mantiene las instancias de VM en ejecución aun cuando ocurre un evento del sistema host, como la actualización de hardware o software.
Cloud Storage es un depósito de objetos que proporciona clases de almacenamiento, como Nearline y Coldline, que son adecuadas para casos prácticos específicos, como la creación de copias de seguridad.
Cloud DNS proporciona una manera programática de administrar las entradas de DNS como parte de un proceso de recuperación automatizado. Cloud DNS usa la red mundial de Google de servidores de nombres Anycast para entregar datos en las zonas de DNS desde ubicaciones redundantes en todo el mundo, lo que proporciona alta disponibilidad y baja latencia a los usuarios.
Recursos
- Guía de planificación de la recuperación ante desastres | Arquitecturas
- Piezas fundamentales de la recuperación ante desastres | Arquitecturas
- Situaciones de recuperación ante desastres para datos | Arquitecturas
- Situaciones de recuperación ante desastres para aplicaciones | Arquitecturas
- Diseño de infraestructura para la disponibilidad y la resiliencia (PDF)