Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitecturaPERDIDO de sophiagworld

Este artículo contiene algunos patrones comunes para ayudar a los ingenieros a trabajar con servicios a gran escala a los que acceden millones de usuarios. 

Según la experiencia del autor, esta no es una lista exhaustiva, pero de hecho eficaz consejo. Vamos a empezar.

Traducido con soporte Soluciones en la nube Mail.ru.

Nivel de entrada

Las medidas que se enumeran a continuación son relativamente sencillas de implementar pero tienen un gran impacto. Si no los ha probado antes, se sorprenderá de las importantes mejoras.

Infraestructura como código

La primera parte del consejo es implementar la infraestructura como código. Esto significa que debe tener una forma programática de implementar toda la infraestructura. Suena complicado, pero en realidad estamos hablando del siguiente código:

Despliegue de 100 máquinas virtuales

  • con ubuntu
  • 2 GB de RAM cada uno
  • tendrán el siguiente código
  • con estos parametros

Puede realizar un seguimiento de los cambios en su infraestructura y revertirlos rápidamente mediante el control de versiones.

El modernista que hay en mí dice que puedes usar Kubernetes/Docker para hacer todo lo anterior, y tiene razón.

Además, puede proporcionar automatización utilizando Chef, Puppet o Terraform.

Integración y entrega continuas

Para crear un servicio escalable, es importante tener un proceso de compilación y prueba para cada solicitud de extracción. Incluso si la prueba es muy simple, al menos garantizará que el código que implemente se compile.

Cada vez en esta etapa respondes la pregunta: ¿Mi ensamblaje compilará y pasará pruebas? ¿Es válido? Esto puede parecer un listón bajo, pero resuelve muchos problemas.

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
No hay nada más bonito que ver estas garrapatas

Para esta tecnología puedes evaluar Github, CircleCI o Jenkins.

Equilibradores de carga

Entonces, queremos ejecutar un balanceador de carga para redirigir el tráfico y garantizar la misma carga en todos los nodos o el servicio continúa en caso de falla:

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Un equilibrador de carga suele hacer un buen trabajo al distribuir el tráfico. La mejor práctica es sobreequilibrar para no tener un único punto de falla.

Normalmente, los balanceadores de carga se configuran en la nube que utiliza.

RayID, ID de correlación o UUID para solicitudes

¿Alguna vez ha encontrado un error de aplicación con un mensaje como este: "Algo salió mal. Guarde esta identificación y envíela a nuestro equipo de soporte"?

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Un identificador único, ID de correlación, RayID o cualquiera de sus variaciones es un identificador único que le permite rastrear una solicitud a lo largo de su ciclo de vida. Esto le permite rastrear toda la ruta de la solicitud en los registros.

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
El usuario realiza una solicitud al sistema A, luego A contacta a B, quien contacta a C, lo almacena en X y luego la solicitud se devuelve a A.

Si se conectara de forma remota a máquinas virtuales e intentara rastrear la ruta de la solicitud (y correlacionar manualmente qué llamadas se realizan), se volvería loco. Tener un identificador único hace la vida mucho más fácil. Esta es una de las cosas más sencillas que puede hacer para ahorrar tiempo a medida que crece su servicio.

Nivel medio

El asesoramiento aquí es más complejo que los anteriores, pero las herramientas adecuadas facilitan la tarea, proporcionando un retorno de la inversión incluso para las pequeñas y medianas empresas.

Registro centralizado

¡Felicidades! Ha implementado 100 máquinas virtuales. Al día siguiente, el director ejecutivo llega y se queja de un error que recibió mientras probaba el servicio. Informa la identificación correspondiente de la que hablamos anteriormente, pero tendrás que revisar los registros de 100 máquinas para encontrar la que causó el bloqueo. Y hay que encontrarlo antes de la presentación de mañana.

Si bien esto suena como una aventura divertida, es mejor asegurarse de poder buscar todas las revistas en un solo lugar. Resolví el problema de centralizar registros utilizando la funcionalidad incorporada de la pila ELK: admite la recopilación de registros con capacidad de búsqueda. Esto realmente ayudará a resolver el problema de encontrar una revista específica. Como beneficio adicional, puedes crear gráficos y otras cosas divertidas como esas.

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Funcionalidad de pila ELK

Agentes de seguimiento

Ahora que su servicio está en funcionamiento, debe asegurarse de que funcione sin problemas. La mejor manera de hacer esto es ejecutar varios agentes, que trabajan en paralelo y comprueban que funciona y se realizan las operaciones básicas.

En este punto compruebas que la versión en ejecución se siente bien y funciona bien.

Para proyectos pequeños y medianos, recomiendo Postman para monitorear y documentar las API. Pero, en general, solo desea asegurarse de tener una manera de saber cuándo se produjo una interrupción y recibir una notificación oportuna.

Autoescalado dependiendo de la carga

Es muy sencillo. Si tiene solicitudes de servicio de VM y se acerca al 80 % de uso de memoria, puede aumentar sus recursos o agregar más VM al clúster. La ejecución automática de estas operaciones es excelente para cambios de potencia elástica bajo carga. Pero siempre debes tener cuidado con cuánto dinero gastas y establecer límites razonables.

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Con la mayoría de los servicios en la nube, puede configurarlos para que se escalen automáticamente utilizando más servidores o servidores más potentes.

Sistema de experimentos

Una buena forma de implementar actualizaciones de forma segura es poder probar algo para el 1% de los usuarios durante una hora. Por supuesto, usted ha visto esos mecanismos en acción. Por ejemplo, Facebook muestra a partes de la audiencia un color diferente o cambia el tamaño de fuente para ver cómo los usuarios perciben los cambios. Esto se llama prueba A/B.

Incluso la publicación de una nueva función se puede iniciar como un experimento y luego determinar cómo publicarla. También tiene la posibilidad de "recordar" o cambiar la configuración sobre la marcha según la función que está causando la degradación de su servicio.

nivel avanzado

A continuación se ofrecen consejos que son bastante difíciles de implementar. Probablemente necesitarás un poco más de recursos, por lo que a una pequeña o mediana empresa le resultará difícil gestionar esto.

Implementaciones azul-verde

Esto es lo que yo llamo la forma de desarrollo "Erlang". Erlang se volvió ampliamente utilizado cuando aparecieron las compañías telefónicas. Se empezaron a utilizar softswitches para enrutar llamadas telefónicas. El objetivo principal del software de estos conmutadores era no perder llamadas durante las actualizaciones del sistema. Erlang tiene una buena manera de cargar un nuevo módulo sin bloquear el anterior.

Este paso depende de la presencia de un equilibrador de carga. Imaginemos que tiene la versión N de su software y luego desea implementar la versión N+1. 

Usted podría simplemente detenga el servicio e implemente la siguiente versión en un momento que funcione para sus usuarios y obtenga un tiempo de inactividad. Pero supongamos que tienes realmente estrictas condiciones SLA. Entonces, SLA 99,99% significa que puedes desconectarte sólo en 52 minutos por año.

Si realmente desea lograr tales indicadores, necesitará dos implementaciones al mismo tiempo: 

  • el que está ahora mismo (N);
  • próxima versión (N+1). 

Le indica al equilibrador de carga que redirija un porcentaje del tráfico a la nueva versión (N+1) mientras supervisa activamente las regresiones.

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Aquí tenemos una implementación N verde que funciona bien. Estamos intentando pasar a la siguiente versión de esta implementación.

Primero enviamos una prueba realmente pequeña para ver si nuestra implementación N+1 funciona con una pequeña cantidad de tráfico:

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Finalmente, tenemos un conjunto de comprobaciones automatizadas que eventualmente ejecutamos hasta que se completa nuestra implementación. Si usted muy muy Tenga cuidado, también puede guardar su implementación N para siempre para una reversión rápida en caso de una regresión incorrecta:

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Si desea pasar a un nivel aún más avanzado, deje que todo en la implementación azul-verde se ejecute automáticamente.

Detección de anomalías y mitigación automática

Dado que tiene un registro centralizado y una buena recopilación de registros, ya puede establecer objetivos más altos. Por ejemplo, predecir fallas de manera proactiva. Las funciones se rastrean en monitores y registros y se crean varios diagramas, y usted puede predecir de antemano qué saldrá mal:

Cómo dormir bien cuando tienes un servicio en la nube: consejos básicos de arquitectura
Una vez que se detectan anomalías, se comienza a examinar algunas de las pistas que proporciona el servicio. Por ejemplo, un aumento en la carga de la CPU puede indicar que un disco duro está fallando, mientras que un aumento en las solicitudes puede indicar que es necesario ampliar la escala. Este tipo de datos estadísticos le permite hacer que el servicio sea proactivo.

Con estos conocimientos, puede escalar en cualquier dimensión y cambiar de forma proactiva y reactiva las características de las máquinas, bases de datos, conexiones y otros recursos.

Eso es todo

Esta lista de prioridades te ahorrará muchos problemas si estás planteando un servicio en la nube.

El autor del artículo original invita a los lectores a dejar sus comentarios y realizar cambios. El artículo se distribuye como código abierto, solicitudes de extracción del autor. acepta en Github.

Qué más leer sobre el tema:

  1. Ir y cachés de CPU
  2. Kubernetes con espíritu de piratería con una plantilla de implementación
  3. Nuestro canal Around Kubernetes en Telegram

Fuente: habr.com

Añadir un comentario