Norbert é um bom exemplo de um sistema de produção escalável. Em geral, ele integra Netty, Protocol Buffers e Zookeeper em uma estrutura leve para a execução de serviços em cluster. Os buffers de protocolo são usados para especificar a API de serviço, o Netty implementa abstrações da camada de transporte e o Zookeeper é essencialmente um serviço de descoberta tolerante a falhas.
Sempre que uma instância de serviço é iniciada, Norbert a registra como instância disponível de um tipo de serviço específico. Da perspectiva da implementação, ele cria duas árvores do Zookeeper:
- "/ ServiceName / members", que lista todas as instâncias conhecidas do serviço
- "/ ServiceName / available", que lista as instâncias atualmente disponíveis do serviço
A propriedade mais importante para cada nó é o URL a ser usado para se conectar à instância de serviço correspondente. Permite o balanceamento de carga no lado do cliente - um cliente Norbert encontra a lista de URLs para um determinado nome de serviço e a tentativa de conectar-se a um deles é de alguma ordem (por exemplo, round-robin ou aleatório).