En la chamba tenemos un custom RPC basado en @Netty_Project y #ProtoBuf, es de las piezas que más me gustan, es super eficiente y nos facilita crear servers de servicios robustos y sobre todo, es interoperable con otras tecnologías fuera de la JVM.
Igual se desarrollaron unas clases para crear clientes que abstraen la "complejidad" de protobuf, así como agregan una capa de resiliencia y en nuestro código solo vemos interfaces de negocio, es una gran idea y nos facilita desacoplarse de nuestra capa de comunicación custom.
Con todo esto, el equipo ha construido todo el middleware que soporta las operaciones de negocio, tanto los servers como los clientes proporcionan telemetría básica y las métricas que generan son bastante útiles para monitoreo.
Este sistema distribuido sin duda tiene sus retos, como por ejemplo es difícil hacer un rastreo de los diversos servicios que se usan en cada request que entran por web.
Para ello pues Distributed Tracing resuelve el problema, @OpenTracing & @OpenCensusIO son APIs que se pueden usar para ello, aunque en realidad, para la mayoría de las tecnologías existentes, ya se han implementado las instrumentaciones, solo es integrarlas a tu código.
Pero en nuestro caso, por tener un custom RPC tuvimos que implementar la instrumentación nosotros mismos. No fue tan difícil y sobre todo nos ayudó mucho tener el agente de DataDog en los nodos de Kubernetes para reportarlo al APM.
Nos está dando mucha visibilidad sobre cómo los diferentes servicios se comunican entre sí, latencias, dependencias y en errores graves a entender donde se origino el problema y nos ha ayudado a corregir problemas de configuración (servicios mal nombrados)
El siguiente paso es, que los diversos clientes que usan nuestra API, delimiten de su lado una traza y nos propaguen esa información, teniendo eso listo, hacer la depuración en caso de errores será mucho más sencillo.
Entonces, mi recomendación es que si tienes alguna especie de sistema distribuido, es muy útil implementar Distributed Tracing. Es una gran pieza dentro de la observabilidad que debe tener tu plataforma de servicios.