GBR: ADR-0010 Extração do Motor Universal de Roteamento Dinâmico (gbr_dispatcher) | Wiki
Documentação de engenharia e especificações técnicas da Gleam-BR.
GBR: ADR-0010 Extração do Motor Universal de Roteamento Dinâmico (gbr_dispatcher)
*Status:* Aceito *Data:* 2026-05-01
*Contexto:*
Originalmente, a lógica de criação de Atores sob demanda (Cold-Start) e o roteamento baseado em ETS residiam dentro do projeto gbr_monitor. No entanto, o nosso ecossistema é estritamente *Stateful por Alvo (Target)*. A telemetria de uma máquina específica e o estado da sua rede BPMN/Yamux precisam estar acoplados ao mesmo Ator em memória. Como outras ferramentas do ecossistema precisarão deste mesmo comportamento, o acoplamento no gbr_monitor tornou-se um anti-padrão. Além disso, a ocorrência de picos de ingestão (Thundering Herd) gerava Condições de Corrida (Race Conditions), onde múltiplos processos da API Web tentavam instanciar o mesmo Ator simultaneamente.
*Decisão:*
-
*Desacoplamento Universal:* Extração de toda a lógica de roteamento em memória, cache ETS e instanciação de Atores para a biblioteca agnóstica
shared/gbr_dispatcher. -
*Resolução de Concorrência via Trava Atômica (Atomic Lock):* Para resolver a condição de corrida de instanciação sem utilizar Mutexes bloqueantes, adotou-se o uso estrito de
gbr_ets.insert_new/3. Sendo uma operação atômica em C na máquina virtual, apenas a thread que conseguir inserir o registro ganha o "direito" de fazer o spawn do Ator. As threads perdedoras da corrida entram em um loop de repetição passiva (Micro-Retry) aguardando o Ator ser criado pelo vencedor e disponibilizado no ETS. -
*Conversão de Tipos Segura (FFI Identity):* Consolidada a decisão (ADR-003) de utilizar uma função FFI privada (
to_dynamic) para fazer o cast opaco doSubjectGleam paraDynamicna gravação do ETS, uma vez que ogbr_dispatcheré o único gerente desta tabela e pode garantir a sanidade da memória matematicamente.
*Consequências:*
-
*Positivas:* O
gbr_monitoragora é uma biblioteca puramente focada no domínio da Telemetria; ogbr_dispatcherpode ser publicado como um pacote independente (Hex Publish) para toda a comunidade Erlang/Gleam como um gerenciador de Atores Stateful imune a Race Conditions. - *Negativas/Riscos:* A delegação da criação de Atores requer injeção de dependência de funções construtoras complexas (Factories) de domínio superior para dentro do dispatcher genérico.