La traducción del artículo ha sido preparada especialmente para los estudiantes del curso , que comienza hoy mismo!

¿Alguna vez has lanzado un nuevo servicio a producción? ¿O tal vez has estado a cargo del mantenimiento de tales servicios? Si es así, ¿qué criterios usaste? ¿Qué es bueno para la producción y qué no? ¿Cómo entrenas a los nuevos miembros del equipo en lanzamientos o mantenimiento de servicios existentes?
La mayoría de las empresas, en lo que respecta a las prácticas de operación industrial, terminan adoptando enfoques del “Lejano Oeste”. Cada equipo, a través de prueba y error, determina sus herramientas y mejores prácticas. Pero esto a menudo impacta no solo en el éxito de los proyectos, sino también en los ingenieros.
El método de prueba y error crea un entorno en el que prevalece la búsqueda de culpables y la transferencia de responsabilidad. Con este comportamiento, se vuelve cada vez más difícil aprender de los errores y no repetirlos.
Organizaciones exitosas:
- reconocen la necesidad de pautas para producción,
- estudian las mejores prácticas,
- comienzan a discutir sobre la preparación para producción durante el desarrollo de nuevos sistemas o componentes,
- aseguran el cumplimiento de las normas de preparación para producción.
La preparación para producción incluye un proceso de “revisión”. La revisión puede ser en forma de lista de verificación o conjunto de preguntas. Se puede realizar manualmente, automáticamente o de ambas maneras. En lugar de listas de requisitos estáticas, se pueden crear plantillas de listas de verificación que se adapten a necesidades específicas. De esta manera, se puede proporcionar a los ingenieros un medio para heredar conocimientos y la flexibilidad necesaria cuando se requiera.
¿Cuándo verificar un servicio para su preparación para producción?
Es útil realizar la verificación de preparación para producción no solo justo antes del lanzamiento, sino también al transferir el servicio a un nuevo equipo de operaciones o a un nuevo empleado.
Realiza la verificación cuando:
- Lances un nuevo servicio a producción.
- Transfieras la operación del servicio de producción a otro equipo, como SRE.
- Transfieras la operación del servicio de producción a nuevos empleados.
- Organices soporte técnico.
Lista de verificación de preparación para producción
Hace un tiempo, como ejemplo, yo creé una lista de verificación de preparación para producción. Aunque esta lista se desarrolló al trabajar con clientes de Google Cloud, será útil y aplicable fuera de Google Cloud.
Diseño y desarrollo
- Desarrolle un proceso de construcción reproducible que no requiera acceso a servicios externos y que no dependa de fallos en sistemas externos.
- Durante la fase de diseño y desarrollo, defina y establezca SLO para sus servicios.
- Documente las expectativas relacionadas con la disponibilidad de los servicios externos de los que depende.
- Evite un único punto de fallo eliminando las dependencias de un único recurso global. Replicue el recurso o utilice una alternativa de respaldo cuando el recurso no esté disponible (por ejemplo, un valor codificado).
Gestión de la configuración
- La configuración estática, pequeña y no secreta puede pasarse a través de parámetros de línea de comandos. Para todo lo demás, utilice servicios de almacenamiento de configuración.
- La configuración dinámica debe tener configuraciones de respaldo en caso de que el servicio de configuración no esté disponible.
- La configuración del entorno de desarrollo no debe estar vinculada a la configuración de producción. De lo contrario, puede llevar a accesos desde el entorno de desarrollo a servicios de producción, lo que podría causar problemas de privacidad y filtraciones de datos.
- Documente lo que se puede configurar dinámicamente y describa el comportamiento de respaldo si el sistema de entrega de configuración no está disponible.
Gestión de lanzamientos
- Documente detalladamente el proceso de lanzamiento. Describa cómo los lanzamientos afectan al SLO (por ejemplo, un aumento temporal en la latencia debido a fallos en la caché).
- Documente los lanzamientos canarios.
- Desarrolle un plan para analizar los lanzamientos canarios y, si es posible, mecanismos para retrocesos automáticos.
- Asegúrese de que los retrocesos puedan utilizar los mismos procesos que el despliegue.
Idoneidad para la monitorización (Observabilidad)
- Asegúrese de que se recopile un conjunto de métricas necesarias para el SLO.
- Asegúrese de que se pueda distinguir entre datos del cliente y del servidor. Esto es importante para diagnosticar problemas.
- Configure alertas para reducir la carga de trabajo. Por ejemplo, elimine alertas provocadas por operaciones rutinarias.
- Si utiliza Stackdriver, habilite las métricas de la plataforma GCP en sus tableros. Configure alertas para las dependencias de GCP.
- Siempre propague el seguimiento entrante. Incluso si no participa en el seguimiento, esto permitirá a los servicios de nivel inferior depurar problemas en producción.
Protección y seguridad
- Asegúrese de que todas las conexiones externas estén cifradas.
- Asegúrate de que tus proyectos de producción tengan la configuración correcta de IAM.
- Utiliza redes para aislar grupos de instancias de máquinas virtuales.
- Usa VPN para una conexión segura a redes remotas.
- Documenta y monitorea el acceso de los usuarios a los datos. Asegúrate de que todo acceso de los usuarios a los datos se verifique y registre.
- Asegúrate de que los puntos finales para depuración estén limitados por ACL.
- Sanea la entrada del usuario. Configura límites en el tamaño de la carga útil para la entrada del usuario.
- Asegúrate de que tu servicio pueda bloquear selectivamente el tráfico entrante para usuarios individuales. Esto permitirá bloquear infracciones sin afectar a otros usuarios.
- Evita los puntos finales externos que inician una gran cantidad de operaciones internas.
Planificación de capacidad
- Documenta cómo se escala tu servicio. Por ejemplo: número de usuarios, tamaño de la carga útil entrante, cantidad de mensajes entrantes.
- Documenta los requisitos de recursos para tu servicio. Por ejemplo: número de instancias de máquinas virtuales dedicadas, número de instancias de Spanner, hardware especializado como GPU o TPU.
- Documenta las limitaciones de recursos: tipo de recurso, región, etc.
- Documenta las limitaciones de cuotas para la creación de nuevos recursos. Por ejemplo, el límite en la cantidad de solicitudes a la API de GCE si utilizas la API para crear nuevas instancias.
- Considera realizar pruebas de carga para analizar la degradación del rendimiento.
Eso es todo. ¡Nos vemos en clase!
Fuente: habr.com
