¿Cuáles son las habilidades básicas que debe poseer un ingeniero de sistemas distribuidos?

Comprender qué diablos está sucediendo dentro de su sistema. Ya sea que desee llamarlo monitoreo u observabilidad, es esencial saber qué están haciendo sus clientes en su sistema y si están contentos o no. Esto generalmente implica ser bueno para comprender los registros, las métricas, etc.

Comprender las distribuciones de latencia y la diferencia entre el percentil promedio y el 90. Investigue y comprenda por qué diferentes grupos de clientes se comportan de manera diferente y qué problemas enfrentan Las sutilezas son a menudo bastante interesantes e importantes, si te tomas el tiempo para descubrirlas.

La comunicación con su equipo, sus clientes y sus partes interesadas es clave. Durante un incidente cuando la tensión es alta, debemos ser capaces de mantener la cabeza fría y trabajar en colaboración. Culpar a la gente no es productivo, por lo que el objetivo es mantenerse humilde y trabajar arduamente para encontrar la solución correcta.

Esta es una pregunta bastante abierta. La mayoría de las personas que “trabajan en sistemas distribuidos” solo están construyendo sistemas complicados que se implementan en más de un servidor, ya sea de manera escalable o de manera espagueti (dependencia de servicios complejos). En estos días (y por favor imagine esta frase en la voz de un anciano enojado), parece que cualquiera que use HTTP para invocar un servicio parece calificar como ingeniero de sistemas distribuidos.

Probablemente mi respuesta no sea un libro de texto, pero lo que busco en un ingeniero de sistemas distribuidos es alguien que entienda cómo la complejidad (particularmente en la distribución) es su enemigo mortal natural y jurado, alguien que entiende que la distribución es un mal necesario que debe ser manejado con mucho cuidado, y alguien que desea comprender todas las razones posibles por las cuales un sistema distribuido podría fallar. Dominar esas habilidades básicas le brinda un boleto para comenzar a considerar cómo se podría organizar, construir, probar y administrar un sistema distribuido que funcione / funcione.

Creo que es capaz de imaginar que las cosas sucedan al mismo tiempo. Además, saber cuán granulares deben ser los mensajes entre los componentes del sistema. El último es importante porque afecta directamente tanto el rendimiento como la consistencia.