TL; DR: Construir redundante, modular; prueba de disponibilidad; vigilar de cerca.
Después de darme cuenta de que tratar de exprimir cualquier explicación puede llevar mucho tiempo, escribiré todas las observaciones que he hecho.
Cuestionando la premisa
El sistema en la nube es la panacea
Incluso si tuviera que ir completamente a la nube, con un proveedor de nube superior, aún necesitará diseñar su aplicación para la resistencia, desde cero. AWS podría reemplazar su VM, pero su aplicación debería ser capaz de reiniciarse si se deja en el medio de la computación.
No queremos usar el sistema en la nube, debido a x / y / z
A menos que sea una organización ultra grande, es mejor que use sistemas en la nube. Los sistemas de nube Top-3 (AWS, MSFT, Google) emplean a miles de ingenieros para brindarle los SLA prometidos y el tablero fácil de administrar. En realidad, es una buena ganga usarlos en lugar de gastar un centavo en esta casa.
Problemas en el alcance y diseño
Definir, cuantificar y luego medir continuamente la disponibilidad de un servicio es un desafío mayor que escribir una solución para problemas de disponibilidad.
Definir y medir la "disponibilidad" es más difícil de lo esperado
Múltiples partes interesadas tienen una visión diferente de la disponibilidad, y lo que puede suceder es que la definición preferida por una persona con el salario más alto prevalezca sobre otra definición. Esta es a veces una definición correcta, pero a menudo el ecosistema no se basa en medir lo mismo porque esa definición ideal es mucho más difícil de medir, y mucho menos monitorear en tiempo real. Si tiene una definición de disponibilidad que no se puede monitorear en tiempo real, encontrará su proyecto similar que se hace a sí mismo una y otra vez con misteriosas similitudes. Quédese con algo que tenga sentido y algo que pueda ser monitoreado fácilmente.
La gente subestima las complejidades del sistema siempre disponible.
Para dirigirme al elefante en la habitación, permítanme decir esto: "No hay un sistema multi-computadora disponible al 100%, puede que en el futuro pero no con la tecnología actual". Aquí, por la tecnología actual, me refiero a nuestra incapacidad de enviar señales más rápido que la velocidad de la luz y esas cosas. Todos los ingenieros de comp-sci que valen la pena conocen las limitaciones informáticas distribuidas , y la mayoría de ellos no lo mencionarán en las reuniones, por temor a que parezcan novatos. Para compensar a todos aquellos que no mencionan las limitaciones de la computación distribuida , diré que es complicado pero no siempre confía en las computadoras .
Las personas sobreestiman las capacidades de sus ingenieros
Desafortunadamente, la disponibilidad cae en la categoría, donde no sabes lo que quieres pero sabes lo que no quieres. Es un poco más complicado que la categoría 'conocer los deseos', como la interfaz de usuario. Se requiere un poco de experiencia y mucha lectura para aprender de la experiencia de otros y algo más.
Construir un sistema disponible desde cero
Asegúrese de evangelizar a cada equipo de arquitectura y diseño sobre la prioridad correcta de la disponibilidad como un requisito del sistema.
Atributos del sistema que ayudan a la disponibilidad
Las siguientes características del sistema han demostrado haber contribuido a la disponibilidad del sistema:
Redundancia
Algunos ejemplos de esto son nunca tener una sola VM detrás de un VIP o nunca almacenar solo una copia de sus datos. Estas son las preguntas que un buen IAAS le facilitará resolver, pero aún tendrá que tomar estas decisiones.
Modularidad
Un REST modular es mejor que el SOA monolítico. Incluso hay un microservicio modular más disponible que el HATEOS REST habitual . El razonamiento se puede encontrar en la discusión relacionada con el rendimiento en la siguiente sección. Si está realizando un procesamiento por lotes, es mejor procesarlo en un lote razonable de 10 segundos en comparación con un lote de 1,000,000.
Resistencia
"I am always angry"
- Hulk
Un sistema resistente siempre está listo para recuperarse. Esta resistencia se aplica a instancias como el reconocimiento de ACK para una escritura solo después de escribir en el disco RAID, y posiblemente en al menos dos centros de datos. Otra tendencia reciente es utilizar estructuras de datos libres de conflictos , donde la estructura de datos asume la responsabilidad de resolver conflictos cuando se presentan dos versiones diferentes. Un sistema no puede ser resistente como una ocurrencia tardía, tiene que ser predicho e incorporado. Una falla está garantizada a largo plazo, por lo que siempre debemos estar preparados con un plan de recuperación.
Camino de registro
Este es técnicamente un subtipo de Resiliencia, pero muy especial debido a que atrapa todas las capacidades. A pesar del mejor esfuerzo, es posible que no podamos predecir el patrón de indisponibilidad. Si es posible, mantenga suficiente registro de las actividades del sistema para poder reproducir eventos del sistema. Esto, a un gran costo manual, le permitirá recuperarse de situaciones imprevistas.
Atributos de disponibilidad
La lista no exhaustiva de atributos de prioridad de la mente de 'disponibilidad': por el bien de la discusión, supongamos que la pregunta que hace el usuario es: "¿Cuántos artículos tengo en mi carrito de compras?"
Exactitud
¿ Debe producir la respuesta más precisa posible o está bien cometer errores? Solo como referencia, cuando retira dinero del cajero automático, no se garantiza que sea correcto. Si el banco descubre que cometió un error, podría revertir las transacciones. Si su sistema está produciendo números primos, entonces supongo que es posible que desee respuestas correctas todo el tiempo.
rendimiento
Omita este punto, si respondió siempre correcto para la pregunta del tema anterior. A veces la respuesta a las preguntas no tiene que ser precisa, por ejemplo, ¿cuántos amigos tengo en Facebook en este momento? Pero se espera que la respuesta esté en el estadio de béisbol +/- 1 todo el tiempo. Cuando está produciendo el resultado esperado, su rendimiento es de 100.
Consistencia
Su respuesta puede ser correcta en algún momento, pero para cuando la luz salga de la pantalla y entre en la retina del observador, las cosas podrían haber cambiado. ¿Hace que tu respuesta sea incorrecta? No, solo lo hace inconsistente. La mayoría de las aplicaciones son eventualmente consistentes, pero el truco es definir qué tipo de modelo de consistencia proporcionará su aplicación. Por casualidad, su aplicación puede ejecutarse en una sola computadora, puede omitir esta hermosa lectura sobre el teorema CAP .
Costo
Mucho depende del impacto total de los efectos a corto plazo (pérdida de ingresos) y los efectos a largo plazo (mala reputación, retención de clientes). Dependiendo del tipo de cliente (pago / gratuito, repetición / único, cautivo) y disponibilidad de recursos, se deben incorporar diferentes niveles de garantías de disponibilidad.
Hacia la mejora de la disponibilidad de un sistema existente
La gestión operativa de máquinas individuales y una red es tan compleja que supongo que se la ha dejado al proveedor de la nube o que ya es lo suficientemente experto como para saber lo que está haciendo. Tocaré otros temas bajo disponibilidad. Para la estrategia a largo plazo, Definir-Medir-Analizar-Control es una combinación celestial, algo que yo mismo he visto.
- Defina qué es 'disponibilidad' para sus partes interesadas
- ¿Cómo medirás lo que has definido?
- Análisis de causa raíz para identificar cuellos de botella
- Tareas para mejoras
- Monitoreo ( control ) continuo del sistema.
Causas de falta de disponibilidad
Dado que acordamos que la gestión operativa que cubriría cualquier gestión de infraestructura física, debe ser realizada por profesionales, abordaré otras causas de indisponibilidad por razones de integridad. La disponibilidad de IMO también debe incluir la falta de comportamiento esperado, lo que significa que si al usuario no se le muestra la experiencia esperada, entonces algo no está disponible. Con esa definición amplia en mente, lo siguiente podría causar indisponibilidad: - Errores de código - Incidencias de seguridad - Problemas de rendimiento