En este documento se describen las prácticas recomendadas para diseñar sistemas resilientes en Compute Engine. Ofrece consejos generales y abarca algunas funciones de Compute Engine que pueden ayudarte a reducir el tiempo de inactividad de las instancias y a prepararte para los momentos en los que tus instancias de Compute Engine fallen de forma inesperada.
Un sistema resistente es aquel que puede soportar un cierto número de fallos o interrupciones sin interrumpir tu servicio ni afectar a la experiencia de tus usuarios al usarlo. Aunque Compute Engine hace todo lo posible para evitar estas interrupciones, ciertos eventos son impredecibles, por lo que es mejor estar preparado para ellos.
Tipos de errores
En algún momento, es posible que se pierda una o varias de tus instancias de computación debido a fallos del sistema o del hardware. En la siguiente lista se incluyen algunos tipos de situaciones de error que puedes mitigar:
Error inesperado de una sola instancia
Los fallos inesperados de una sola instancia pueden deberse a un fallo del hardware o del sistema. Puedes mitigar estos eventos usando 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, puede que se produzca un error inesperado en una sola VM y se reinicie. A diferencia de un fallo inesperado de una sola VM, Compute Engine reinicia automáticamente la VM después de que falle. Para mitigar estos eventos, crea copias de seguridad de tus datos, usa Hyperdisk o Persistent Disk y utiliza secuencias de comandos de inicio para volver a configurar el software rápidamente.
Errores de zonas o regiones
Los errores de zona y región son poco frecuentes, pero pueden provocar que no se pueda acceder a todas las instancias de una zona o región determinada, o que fallen. Para mitigar estos fallos, crea diversidad entre regiones y zonas e implementa el balanceo de carga. También debes crear copias de seguridad de tus datos o replicar tus discos en varias zonas.
Consejos para diseñar sistemas resilientes
Para mitigar los fallos de las instancias de proceso, diseña tu aplicación de forma que sea resistente a los fallos, las interrupciones de la red y los desastres inesperados. Un sistema resistente gestiona los fallos correctamente. Por ejemplo, redirige el tráfico de una instancia inaccesible a una activa o automatiza las tareas al reiniciar.
A continuación, te ofrecemos algunos consejos generales para diseñar un sistema resistente a los fallos.
Usar la migración activa
Google Cloud realiza periódicamente tareas de mantenimiento en su infraestructura aplicando parches a los sistemas con el software más reciente, realizando pruebas rutinarias y tareas de mantenimiento preventivo, y, en general, asegurándose de que su infraestructura sea lo más segura, rápida y eficiente posible. Compute Engine utiliza la migración activa para que el mantenimiento de esta infraestructura sea transparente de forma predeterminada para tus instancias de proceso.
La migración activa es una tecnología que mueve tus instancias en ejecución de los sistemas que están a punto de someterse a tareas de mantenimiento. Compute Engine lo hace automáticamente en los tipos de instancias admitidos.
Durante la migración en tiempo real, es posible que el rendimiento de tu instancia disminuya durante un breve periodo. En el caso de las instancias que requieren un rendimiento máximo y constante, puedes configurarlas para que se reinicien en otro host en lugar de someterse a una migración en directo. Si eliges esta opción, Compute Engine detendrá la instancia y la reiniciará en un host que no esté implicado en un evento de mantenimiento. Terminar y reiniciar la instancia es adecuado para aplicaciones generales que también se han creado para gestionar los fallos o reinicios de las instancias.
Para configurar tus instancias para la migración en directo o para que se reinicien en lugar de migrarse, consulta Definir la política de mantenimiento del host de una instancia de computación.
Distribuir tus instancias
Crea instancias en más de una región y zona para tener instancias de computación alternativas a las que dirigir el tráfico si se produce una interrupción en una zona o región que contenga una de tus instancias. 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 deja de estar disponible.
Usar nombres de DNS internos específicos de la zona
Define el tipo de DNS interno predeterminado de tu proyecto u organización como DNS zonal. En tus aplicaciones, usa nombres de DNS zonales cuando accedas a otras instancias de proceso. Los servidores DNS internos se distribuyen en todas las zonas, por lo que puedes confiar en los nombres de DNS zonales para resolverlos aunque haya fallos en otras ubicaciones.
El DNS global es menos resiliente debido a los fallos de un solo punto. El DNS zonal mitiga el riesgo de interrupciones entre regiones. El DNS zonal no requiere que los nombres de las instancias sean únicos en todas las regiones de un proyecto, lo que permite crear instancias más rápido.
Para comprobar si una instancia usa nombres de DNS zonales o nombres de DNS globales, consulta Determinar el nombre de DNS interno de una VM.
Si tu proyecto usa nombres de DNS globales, puedes cambiar a nombres de DNS zonales. Para obtener más información, consulta Usar DNS de zona para el tipo de DNS interno.
Crear grupos de VMs
Usa grupos de instancias gestionadas para crear grupos homogéneos de VMs de forma que los balanceadores de carga puedan dirigir el tráfico a más de una VM en caso de que una de ellas deje de estar en buen estado.
Los grupos de instancias gestionados (MIGs) también ofrecen funciones como el autoescalado y la reparación automática. El autoescalado te permite gestionar los picos de tráfico aumentando o disminuyendo el número de VMs en función de señales específicas. La reparación automática realiza comprobaciones del estado y, si es necesario, vuelve a crear automáticamente las VMs en mal estado.
Los grupos de instancias gestionados también están disponibles en las regiones, por lo que puedes crear un grupo de VMs distribuidas en varias zonas de una misma región. Para obtener más información, consulta Crear y gestionar MIGs regionales.
Usar el balanceo de carga
Google Cloud ofrece un servicio de balanceo de carga que te ayuda a gestionar los periodos de tráfico intenso para que no se sobrecarguen tus instancias de computación. Con Cloud Load Balancing, puedes hacer lo siguiente:
Despliega tu aplicación en máquinas virtuales de varias zonas con MIGs regionales. A continuación, puedes configurar una regla de reenvío que pueda distribuir el tráfico entre todas las máquinas virtuales de todas las zonas de la región. Cada regla de reenvío puede definir un punto de entrada a tu aplicación mediante una dirección IP externa.
Despliega VMs en varias regiones mediante el balanceo de carga global. El balanceo de carga de HTTP y HTTPS permite que el tráfico entre en el Google Cloud sistema en la ubicación más cercana al cliente. El balanceo de carga interregional proporciona redundancia para que, si no se puede acceder a una región, el tráfico se desvíe automáticamente a otra. De esta forma, tu servicio seguirá siendo accesible con la misma dirección IP externa.
Usa el autoescalado para añadir o eliminar automáticamente máquinas virtuales de un MIG en función de los aumentos o las disminuciones de la carga.
Además, Cloud Load Balancing ofrece comprobaciones del estado de las VMs, lo que permite detectar y gestionar los fallos de las VMs.
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 apaga, respectivamente. Las secuencias de comandos de inicio y apagado pueden automatizar tareas como instalar software, ejecutar actualizaciones, crear copias de seguridad y registrar datos.
Las secuencias de comandos de inicio y apagado son una forma eficaz e indispensable de iniciar o apagar correctamente tus instancias. En lugar de configurar tus instancias con imágenes personalizadas, puede ser útil configurarlas con secuencias de comandos de inicio.
Las secuencias de comandos de inicio se ejecutan cada vez que la instancia se reinicia o se reinicia debido a errores, 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 en la instancia. Codificar los cambios para configurar una instancia en una secuencia de comandos de inicio suele ser más fácil que intentar averiguar qué archivos o bytes han cambiado en una imagen personalizada.
Las secuencias de comandos de apagado se ejecutan cuando se apaga la instancia, ya sea de forma intencionada o no. Pueden realizar tareas de última hora, como crear copias de seguridad de los datos, guardar registros y cerrar las conexiones correctamente antes de detener una instancia.
Para obtener más información, consulta Ejecutar secuencias de comandos de inicio y Ejecutar secuencias de comandos de cierre.
Crear una copia de seguridad de tus datos
Crea copias de seguridad de tus datos con regularidad y en varias ubicaciones. Puedes subir tus archivos a Cloud Storage, crear capturas de disco o replicar tus datos en un disco de otra zona mediante la replicación síncrona o en otra región mediante la replicación asíncrona.