Tanto los desarrolladores como los administradores de sistemas se centran regularmente en estrategias para crear infraestructuras que sean fiables y minimicen el tiempo de inactividad. La razón principal es que muchas empresas dependen ahora de servicios basados en Internet, lo que hace que el tiempo de inactividad sea económicamente perjudicial.
Los usuarios esperan un servicio estable y fiable, por lo que las interrupciones no sólo disminuyen la satisfacción de los clientes, sino que aumentan las solicitudes de asistencia.
En este artículo voy a hablar de tres áreas que son especialmente sensibles en lo que respecta al tiempo de inactividad, y ofreceré algunas mejoras que le impulsarán hacia un tiempo de actividad del 99,9999%.
1. Monitorización y alertas
La supervisión adecuada de su infraestructura es el primer paso para ser proactivo con cualquier problema, y es la forma más eficiente de descubrir los problemas antes de que afecten a sus clientes.
Esto también incluye la agregación y conservación de un registro de estadísticas, como las métricas de rendimiento de las aplicaciones y la utilización de los recursos del sistema. Las alertas se basan en la recopilación de métricas mediante la evaluación de las reglas con respecto a las métricas actuales. En otras palabras, busca cualquier cosa extraña.
A menudo se implementa un cliente en cada host que recoge las métricas para la monitorización, y luego informa a un servidor central. Las métricas se almacenan en una base de datos y están disponibles para servicios como búsquedas, alertas y gráficos.
Hay software de monitorización que puede hacer esto por ti, incluyendo
Graphite
Graphite proporciona una API que cuenta con el apoyo de docenas de aplicaciones y lenguajes de programación. Las métricas se empujan, almacenan y grafican en la instalación central de Graphite.
Prometheus
Prometheus puede utilizarse para extraer datos de una variedad de clientes oficiales y apoyados por la comunidad. Tiene un sistema de alertas incorporado, es altamente escalable y viene con bibliotecas de clientes para varios lenguajes de programación.
2. Mejora del despliegue de software
Las estrategias de despliegue de software son un área que mucha gente pasa por alto, pero tiene un gran impacto en su tiempo de inactividad.
Tener un proceso de despliegue que sea muy complejo, o que requiera una serie de pasos manuales para ser completado dará lugar a que el entorno de producción deje atrás el entorno de desarrollo. Esto contribuye a que los lanzamientos de software sean arriesgados porque cada despliegue es un conjunto de cambios mucho mayor, y eso naturalmente conlleva un riesgo mucho mayor de que surjan problemas. Esto, a su vez, da lugar a numerosos errores, que ralentizan el desarrollo y pueden llevar a la indisponibilidad de recursos.
Para combatirlo, hay que planificar por adelantado. Si ya tienes este problema, reserva algo de tiempo para suavizar los problemas y empezar de nuevo, antes de seguir adelante.
Encontrar una estrategia que le permita automatizar el flujo de trabajo, la integración del código, el despliegue y las pruebas, le dará la mejor oportunidad de sincronizar su entorno de producción con su entorno de desarrollo.
Un buen punto de partida para la automatización de los despliegues es asegurarse de que se siguen las mejores prácticas en lo que respecta a la integración y entrega continuas (CI/CD) y a las pruebas del software. Estas mejores prácticas incluyen:
Mantener un único repositorio
Mantener un único repositorio garantiza que cada persona del equipo de desarrollo trabaje con el mismo código y pueda probar sus cambios fácilmente.
Automatizar los procesos de prueba y construcción
Es esencial automatizar el desarrollo y las pruebas. Esto simplificará el despliegue en un entorno similar al caso de uso final, y es particularmente útil cuando se depuran problemas específicos de la plataforma.
3. Implementar la alta disponibilidad
La última estrategia para intentar minimizar el tiempo de inactividad es utilizar el concepto de alta disponibilidad en la infraestructura. Esto incluye los principios utilizados en el diseño de sistemas resistentes y redundantes.
El sistema debe ser capaz de detectar la salud del sistema. Si el sistema falla, tiene que saber con precisión dónde ha fallado.
El sistema debe ser capaz de redirigir el tráfico. Esto es esencial para minimizar el tiempo de inactividad, ya que garantiza que el tráfico entre servidores sea rápido, con una interrupción mínima.
Eliminar los puntos únicos de fallo. Esto significa que se utilizan varios servidores redundantes. Pasar de un único servidor a varios servidores web y a un equilibrador de carga es una de las formas de pasar a una infraestructura de alta disponibilidad. El equilibrador de carga realiza comprobaciones periódicas del estado de los servidores web y dirige el tráfico de aquellos servidores que fallan. (También permite un despliegue más fluido del código).
Aumentar la resistencia de la base de datos mediante la replicación de la misma es otra forma de añadir resistencia y redundancia. Los diferentes modelos de bases de datos tienen diferentes configuraciones de replicación. Sin embargo, la replicación en grupo es la más interesante porque permite realizar operaciones de lectura y escritura en un clúster redundante de servidores. Los servidores que fallan pueden ser detectados y enrutados para evitar el tiempo de inactividad.
Conclusión
En este artículo se han cubierto tres áreas en las que las mejoras en los procesos y la infraestructura conducirán a un menor tiempo de inactividad. Esto hará que los clientes estén más contentos y, por supuesto, que se obtengan más ingresos.
Investigar los cambios que puede hacer para reducir el tiempo de inactividad es una de las mejores inversiones que puede hacer en software; empiece por mejorar el despliegue, monitorizar sus métricas y asegurar una alta disponibilidad de la infraestructura.