En este documento, se describen las prácticas recomendadas para diseñar sistemas resilientes en Compute Engine. Proporciona consejos generales y cubre algunas funciones en Compute Engine que pueden ayudar a mitigar el tiempo de inactividad de la instancia y a prepararse para los momentos en que las instancias de Compute Engine fallan de forma inesperada.
Un sistema resiliente es aquel que puede tolerar una cierta cantidad de fallas o alteraciones sin interrumpir el servicio ni afectar la experiencia del usuario. Si bien Compute Engine hace todo lo posible para evitar estas alteraciones, algunos eventos son impredecibles y lo mejor es estar preparado.
Tipos de fallas
En algún momento, una o varias de tus instancias de procesamiento podrían perderse debido a fallas del sistema o del hardware. La siguiente lista contiene algunos tipos de situaciones de falla que puedes mitigar:
Falla inesperada de una sola instancia
Las fallas inesperadas de una sola instancia pueden deberse a fallas del hardware o del sistema. Puedes mitigar estos eventos mediante discos persistentes y secuencias de comandos de inicio para guardar tus datos y volver a habilitar el software después de reiniciar la VM.
Reinicio inesperado de una sola VM
En algún momento, es posible que experimentes una falla y un reinicio inesperados de una sola VM. A diferencia de una falla inesperada de una sola VM, Compute Engine la reinicia automáticamente después de que falla. Para mitigar estos eventos, haz una copia de seguridad de tus datos, usa Hyperdisk o disco persistentey usa secuencias de comandos de inicio para volver a configurar el software con rapidez.
Fallas de zona o región
Las fallas de zona y región son fallas poco frecuentes que pueden ocasionar una pérdida de acceso o una falla en todas las instancias de una zona o región determinadas. Para mitigarlas, crea diversidad en las regiones y zonas y, también, implementa el balanceo de cargas. Además, debes hacer una copia de seguridad de los datos o replicar los discos en varias zonas.
Sugerencias para diseñar sistemas resilientes
Para ayudar a mitigar las fallas de las instancias de procesamiento, diseña tu aplicación para que sea resiliente a las fallas, las interrupciones de red y los desastres inesperados. Un sistema resiliente controla las fallas con facilidad, por ejemplo, mediante el redireccionamiento del tráfico de una instancia inaccesible a una instancia en vivo o la automatización de tareas durante el reinicio.
A continuación, se detallan algunos consejos generales para diseñar un sistema resiliente frente a fallas.
Usa la migración en vivo
Google Cloud realiza el mantenimiento de su infraestructura de forma periódica. Para ello, aplica parches en los sistemas con el software más reciente, realiza pruebas de rutina y mantenimiento preventivo, y, en general, se asegura de que la infraestructura sea lo más segura, rápida y eficiente posible. Compute Engine usa la migración en vivo a fin de garantizar que el mantenimiento de esta infraestructura sea transparente de forma predeterminada para tus instancias de procesamiento.
La migración en vivo es una tecnología que mueve las instancias en ejecución de los sistemas que están por someterse a trabajos de mantenimiento. Compute Engine hace esto de forma automática para los tipos de instancias compatibles.
Durante la migración en vivo, tu instancia puede experimentar una disminución del rendimiento por un corto período. Para las instancias que exigen un rendimiento máximo y constante, puedes configurarlas para que se reinicien en otro host en lugar de realizar una migración en vivo. Si eliges esta opción, Compute Engine detendrá la instancia y la reiniciará en un host que no esté involucrado en un evento de mantenimiento. La finalización y el reinicio de la instancia son adecuados para las aplicaciones generales que también se compilan para controlar fallas o reinicios de la instancia.
Si quieres configurar las instancias para la migración en vivo o a fin de que se reinicien en lugar de migrarse, consulta Cómo establecer la política de mantenimiento del host para una instancia.
Distribuye tus instancias
Crea instancias en más de una región y zona para contar con instancias de procesamiento alternativas a las que dirigir el tráfico si una zona o región que contiene una de tus instancias se interrumpe. Si creas todas tus instancias en la misma zona o región, no podrás acceder a ninguna de ellas si esa zona o región se vuelve inaccesible.
Usa nombres de DNS internos específicos de la zona
Configura el tipo de DNS interno predeterminado para tu organización o proyecto en DNS zonal. En tus aplicaciones, usa nombres de DNS zonales cuando accedas a otras instancias de procesamiento. Los servidores DNS internos se distribuyen en todas las zonas, por lo que puedes confiar en los nombres de DNS zonales como solución, incluso si hay fallas en otras ubicaciones.
El DNS global es menos resiliente debido a fallas en un solo punto. El DNS zonal mitiga el riesgo de interrupciones interregionales. El DNS zonal no requiere que los nombres de las instancias sean únicos en todas las regiones de un proyecto, lo que permite una creación de instancias más rápida.
Para verificar si una instancia usa nombres de DNS zonales o globales, consulta la sección sobre cómo determinar el nombre de DNS interno de una VM.
Si tu proyecto usa nombres DNS globales, puedes cambiar a nombres DNS zonales. Para obtener más información, consulta Usa DNS zonal para tu tipo de DNS interno.
Crea grupos de VM
Usa grupos de instancias administrados a fin de crear grupos homogéneos de VM de modo que los balanceadores de cargas dirijan el tráfico a más de una instancia de VM en caso de que una sola VM esté en mal estado.
Los grupos de instancias administrados (MIG) también ofrecen funciones como el ajuste de escala automático y la reparación automática. El ajuste de escala automático te permite lidiar con los picos de tráfico mediante el aumento o la disminución de la cantidad de VM según señales específicas. La reparación automática realiza la verificación de estado y, si es necesario, vuelve a crear las VM en mal estado de forma automática.
Los MIG también están disponibles para las regiones, por lo que puedes crear un grupo de VM distribuidas en varias zonas dentro de una sola región. Para obtener más información, consulta Crea y administra MIG regionales.
Usa el balanceo de cargas
Google Cloud ofrece un servicio de balanceo de cargas que te permite soportar períodos de mucho tráfico para no sobrecargar tus instancias de procesamiento. Con Cloud Load Balancing, puedes hacer lo siguiente:
Implementar tu aplicación en VM dentro de varias zonas con MIG regionales. Luego, puedes configurar una regla de reenvío que distribuya el tráfico a todas las VM en todas las zonas dentro de la región. Cada regla de reenvío puede definir un punto de entrada a tu aplicación a través de una dirección IP externa.
Implementar VM en varias regiones a través del balanceo de cargas global. El balanceo de cargas de HTTP(S) permite que el tráfico ingrese al sistema de Google Cloud en la ubicación más cercana al cliente. El balanceo de cargas interregional brinda redundancia de modo que, si no puede accederse a una región, el tráfico se desvía a otra de forma automática. De esta manera, se puede acceder al servicio mediante la misma dirección IP externa.
Usa el ajuste de escala automático para agregar o borrar VM de forma automática de un MIG en función de los aumentos o las disminuciones en la carga
Además, Cloud Load Balancing ofrece verificaciones de estado de VM, lo que proporciona asistencia para detectar y manejar las fallas de la VM.
Usa secuencias de comandos de inicio y apagado
Compute Engine ofrece secuencias de comandos de inicio y de apagado que se ejecutan cuando una instancia se inicia o se cierra, respectivamente. Con las secuencias de comandos de inicio y cierre, se pueden automatizar tareas como instalar software, ejecutar actualizaciones, hacer copias de seguridad y registrar datos.
Las secuencias de comandos de inicio y de apagado son una forma invaluable y eficiente de arrancar o cerrar las instancias de manera correcta. En lugar de configurar tus instancias con imágenes personalizadas, puede resultar beneficioso configurarlas con secuencias de comandos de inicio.
Las secuencias de comandos de inicio se ejecutan cada vez que se reinicia la instancia debido a fallas, y se pueden usar para instalar software y actualizaciones. También puedes usar secuencias de comandos de inicio para asegurarte de que los servicios se ejecuten dentro de la instancia. Codificar los cambios para configurar una instancia en una secuencia de comandos de inicio a menudo es más fácil que intentar averiguar qué archivos o bytes cambiaron en una imagen personalizada.
Las secuencias de comandos de apagado se ejecutan cuando la instancia se apaga, ya sea de forma intencional o no. Pueden realizar tareas de último minuto, como crear copias de seguridad de los datos, guardar registros y cerrar conexiones de forma correcta antes de detener una instancia.
Para obtener más información, consulta Ejecuta secuencias de comandos de inicio y Ejecuta secuencias de comandos de cierre.
Crea una copia de seguridad de los datos
Crea una copia de seguridad de los datos con regularidad y en varias ubicaciones. Puedes subir tus archivos a Cloud Storage, crear instantáneas de disco o replicar los datos en un disco de otra zona con la replicación síncrona o en otra región con la replicación asíncrona.