Norbert es un buen ejemplo de un sistema de producción escalable. En general, integra Netty, Protocol Buffers y Zookeeper en un marco ligero para ejecutar servicios en clúster. Los Buffers de protocolo se usan para especificar la API de su servicio, Netty implementa abstracciones de la capa de transporte y Zookeeper es esencialmente un servicio de descubrimiento tolerante a fallas.
Cada vez que se inicia una instancia de servicio, Norbert la registra como instancia disponible de un tipo de servicio en particular. Desde la perspectiva de la implementación, crea dos árboles de Zookeeper:
- "/ ServiceName / members" que enumera todas las instancias conocidas del servicio
- "/ ServiceName / available" que enumera las instancias actualmente disponibles del servicio
La propiedad más importante para cada nodo es la url que se usará para conectarse a la instancia de servicio correspondiente. Permite el equilibrio de carga del lado del cliente: un cliente de Norbert encuentra la lista de direcciones URL para un nombre de servicio dado e intenta conectarse a una de ellas en algún orden (por ejemplo, round robin o aleatorio).