¿Las interrupciones no serían cosa del pasado si todos los servicios de back-end se construyeran en sistemas infinitamente escalables como sin servidor y NoSQL?

TL; DR : Sí.

Durante los últimos 20 años en infraestructura y sistemas de back-end, el panorama general se ha visto así:

  • Utilice un servidor básico, almacenamiento y hardware de red que se puedan replicar de manera bastante homogénea;
  • Use una combinación de redundancia física (alimentación, red, servidores) y redundancia virtual (replicación de información) para eliminar puntos únicos de falla (SPOF);
  • Utilice demultiplexores (p. Ej., Equilibradores de carga) para distribuir la carga en una matriz de servidores sin estado (o virtualmente coherentes) para manejar cualquier nivel de carga concebible (es decir, cualquier cantidad de tráfico que pueda ingresar en una interfaz determinada);
  • Asigne servidores según sea necesario a cualquier matriz de servidores cuya carga exceda un umbral, y desasigne servidores según sea necesario cuando la carga retrocede por debajo de un umbral inferior;
  • Amplíe las mismas nociones de “dentro de un solo centro de datos” a “en múltiples centros de datos”, para proporcionar enrutamiento geográficamente inteligente y disponibilidad en todos los centros de datos;
  • Empuje los artefactos estáticos y relativamente estáticos (por ejemplo, versionados) hasta el borde (CDN) para obtener ganancias de eficiencia dramáticas;
  • Automatiza todo lo anterior.

El concepto de “sin servidor” simplemente significa “crear aplicaciones de una manera que les permita implementarse fácilmente en un entorno como el descrito anteriormente”. El concepto de NoSQL es mucho más amplio (es más un anti-concepto que un concepto), pero muchos de los productos que usan la etiqueta NoSQL están destinados a entornos de productos de escala horizontal.

Al final, sin embargo, los sistemas son tan fuertes como su eslabón más débil, y eso tiende a ser los humanos que operan los sistemas. A medida que la complejidad de los sistemas crece más rápido de lo que la automatización puede alcanzar, la confiabilidad general tiende a disminuir con el tiempo. Cuando la automatización supera la innovación, la confiabilidad general tiende a aumentar con el tiempo.

La automatización es el ingrediente clave de la alta disponibilidad. También puede representar el fin de la industria tal como la conocemos. De cualquier manera, es inevitable, y lo descubriremos pronto.

(P: “¿Las interrupciones no serían cosa del pasado si todos los servicios de back-end se construyeran en sistemas infinitamente escalables como sin servidor y NoSQL?” )

Si existiera un sistema infinitamente escalable, entonces sí. En realidad, siempre habrá restricciones.

Pagerduty publicó recientemente una gran autopsia sobre la falla de la base de datos de Cassandra y los pasos que los ingenieros tomaron para resolverla:

Estado del PagerDuty – Notificaciones retrasadas

Cassaandra probablemente caería dentro de los tipos de bases de datos en las que está pensando.

También lo señalaré a la interrupción de AWS S3 este año. S3 es uno de los SLA más altos de la industria y, sin embargo, estuvo inactivo durante la mayor parte del día.

Resumen de la interrupción del servicio de Amazon S3 en la región del norte de Virginia (US-EAST-1)

Al final del día, la construcción de sistemas resilientes se trata de procesos y personas, no de ningún tipo de tecnología.

Los componentes de software en sí mismos son insuficientes para evitar interrupciones. Las interrupciones se evitan o al menos se mitigan al contar con una estructura organizativa que puede responder rápidamente a eventos inesperados. El nivel de automatización en el proceso de diagnóstico y gestión tiene un gran impacto en la fiabilidad del sistema.

Cualquier reclamo con respecto a los sistemas “infinitamente escalables” debe considerarse con un alto grado de escepticismo. Cualquier sistema, por grande que sea, siempre será finito y necesariamente debe especificarse para satisfacer la demanda máxima con un cierto (aceptable) nivel de redundancia.

No.

Sin servidor significa simplemente que, como ingeniero / desarrollador, no interactúa con su servicio de producción en la capa del servidor, sin embargo, depende de que esa capa de servicio esté realmente disponible.

Probablemente el servicio sin servidor más grande en el mercado hoy es el S3 de AWS.

Entonces, cuando S3 deja de funcionar, lo que hace que muchos sitios se vean afectados y dependiendo de cómo se integre el servicio, puede causar una interrupción parcial o total.

El hecho de que sea “sin servidor” no significa que no haya infraestructura física y código que deba mantenerse, lo que se vuelve más complejo a medida que el sistema continúa escalando.

Los sistemas sin servidor y NoSQL no hacen mágicamente ningún sistema infinitamente escalable: requieren un diseño cuidadoso que aproveche sus capacidades, y muchos sistemas no están tan cuidadosamente diseñados.

Además, todavía es susceptible a fallas sistémicas, como cortes de red, unidades que se llenan, cortes de energía del centro de datos, etc. También, por supuesto, siempre es susceptible a los errores de implementación, a la saturación de la red, a los efectos de latencia causados ​​por las reglas de coherencia, etc.

Dicho todo esto, un sistema bien diseñado con una capa lógica sin servidor y una capa de almacenamiento correctamente diseñada, con replicación / conmutación por error de múltiples centros de datos, será capaz de soportar bastantes fallas sistémicas.

Por ejemplo, utilizamos una combinación de Kafka, Drill, Cassandra, ElasticSearch, Spark, S3 / Parquet y algunas tecnologías personalizadas para cubrir las necesidades de nuestra plataforma de análisis. Cada sistema cubre un conjunto diferente de cargas de trabajo y se combinan cuidadosamente para permitirnos escalar tan rápido como adquirimos nuevos clientes / tan rápido como crecen los propios negocios de nuestros clientes.

No. Los sistemas escalables ayudan, pero siguen siendo vulnerables.

Por ejemplo, el servicio S3 de Amazon es muy escalable y altamente redundante, pero fue derribado hace unos meses cuando un ingeniero accidentalmente se metió con el sistema de indexación interno.

Y todavía hay otros aspectos vulnerables para cada aplicación. Cada vez que se introduce un cambio o se descubre un problema desconocido, existe la posibilidad de una interrupción.

Je, no Cuantos más componentes tenga algo, más hay que salir mal.

More Interesting

¿Qué es un desarrollador de back-end?

¿Cuáles son los pros y los contras en la implementación de código frontend y backend en dos aplicaciones Heroku separadas?

¿Debo aprender a desarrollar backend si quiero ser ingeniero de aprendizaje automático?

¿Cuáles son los sitios web que los desarrolladores profesionales usan como referencia para su trabajo? (Para cualquier trabajo, considerando para ambos, Front y Back-end)

¿Qué es el front end y el back end?

¿Cuál es la arquitectura de Grabhouse? ¿Qué tecnología usan en el frente y el back-end?

¿Puedo desarrollar una aplicación como Twitter usando Firebase como mi backend?

¿Vale la pena elegir un entorno .NET en lugar de Python para desarrollar un back-end para un proyecto piloto?

¿El desarrollo de iOS es front-end o back-end?

¿Cómo se ejecuta el backend en Drupal 6? ¿Alguien asigna alguna tarea primero tenemos que pensar backend cómo pensar alguna sugerencia amigos?

¿Cuánto front-end y back-end debe saber un desarrollador antes de que pueda considerarse un desarrollador full-stack?

¿Cuál es el proceso de conectar el código front-end (HTML / CSS) con el código back-end (Java) en el desarrollo web (con un ejemplo)?

¿Cómo puede un desarrollador de back-end convertirse en un desarrollador móvil competente?

Estoy pensando en mudarme a otro país, soy un desarrollador con experiencia en backend y frontend. Me encantan las startups. ¿Cuál es el mejor lugar para ir?

¿Cuál es la especialización oficial que ofrecen la mayoría de las universidades si quieres trabajar en desarrollo móvil, desarrollo de backend y seguridad cibernética?