O Enterprise Distributed Application Service (EDAS) oferece suporte ao Apache Dubbo para a criação de aplicações de microsserviços. Este guia aborda o sistema de extensão da Service Provider Interface (SPI) do Dubbo, os mecanismos internos do framework e seus princípios de design.
Funcionamento do sistema de extensão SPI
O Dubbo utiliza um mecanismo leve de SPI para manter seu núcleo modular. Cada componente principal — protocolos, balanceadores de carga, roteadores e registros — é definido como um ponto de extensão plugável. Isso permite:
Substituir implementações nativas alterando uma única propriedade de configuração, sem modificar o código do framework.
Adicionar implementações personalizadas implementando uma interface Java e registrando-a por meio do arquivo SPI.
Estender o comportamento de forma transparente, pois o Dubbo trata extensões de terceiros e implementações nativas igualmente.
Para compreender a arquitetura subjacente, consulte os tópicos sobre design do framework e carregamento de SPI abaixo.
Implementações de extensão SPI
O Dubbo define mais de 20 pontos de extensão, organizados aqui por função. Cada ponto de extensão corresponde a uma interface Java que aceita implementações personalizadas.
RPC e gerenciamento de tráfego
|
Ponto de extensão |
O que controla |
|
Protocol |
Protocolo de rede para chamadas remotas |
|
Filter |
Cadeia de filtros de requisição e resposta para preocupações transversais, como logs ou autenticação |
|
Cluster |
Estratégia de tolerância a falhas quando uma chamada falha (por exemplo, failover, failfast, forking) |
|
Router |
Regras de roteamento que determinam quais provedores recebem tráfego |
|
LoadBalance |
Estratégia de distribuição de requisições entre vários provedores |
|
Merger |
Lógica de mesclagem de resultados para invocações bifurcadas |
Descoberta de serviços e configuração
|
Ponto de extensão |
O que controla |
|
Registry |
Integração com registro de serviços |
|
Monitor |
Coleta de métricas e relatório de dados de monitoramento |
Transporte e serialização
|
Ponto de extensão |
O que controla |
|
Transporter |
Camada de transporte de rede |
|
Exchanger |
Padrão de troca de requisição-resposta sobre a camada de transporte |
|
Networker |
Gerenciamento de topologia de rede para cenários com múltiplos registros |
|
Serialization |
Formato de serialização de dados |
Ciclo de vida e proxy
|
Ponto de extensão |
O que controla |
|
InvokerListener |
Callback acionado em eventos de invocação de serviço |
|
ExporterListener |
Callback acionado em eventos de exportação de serviço |
|
ExtensionFactory |
Fábrica para criação e gerenciamento de instâncias de extensão |
|
ProxyFactory |
Fábrica para criação de proxies de serviço |
|
Compiler |
Compilação dinâmica de código-fonte Java |
|
Dispatcher |
Estratégia de despacho de threads para mensagens recebidas |
|
ThreadPool |
Estratégia de pool de threads para execução de serviços |
Diagnóstico e utilitários
|
Ponto de extensão |
O que controla |
|
TelnetHandler |
Handler para comandos de gerenciamento em tempo de execução baseados em telnet |
|
StatusChecker |
Lógica de verificação de integridade para relatórios de status de serviço |
|
PageHandler |
Renderização de páginas de status para o servidor HTTP nativo |
|
Container |
Gerenciamento do ciclo de vida do contêiner de serviços |
|
Cache |
Estratégia de cache de resultados para invocações repetidas |
|
Validation |
Validação de parâmetros antes da invocação |
|
LoggerAdapter |
Adaptador para integração de diferentes frameworks de log |
Mecanismos internos do framework
Os tópicos a seguir explicam como o Dubbo foi construído e como o mecanismo SPI funciona internamente.
|
Tópico |
O que aborda |
|
source code build |
Como compilar o código-fonte do Dubbo a partir do repositório |
|
Framework design |
Arquitetura geral, design em camadas e dependências entre módulos |
|
SPI loading |
Como o Dubbo descobre, carrega e instancia extensões SPI |
|
Implementation details |
Implementação interna dos componentes principais |
|
Configuration center |
Gerenciamento centralizado de configurações para serviços distribuídos |
|
Public agreement |
Convenções de protocolo público e contratos compartilhados entre os componentes do Dubbo |
Princípios de design
O framework Dubbo segue um conjunto de princípios de design documentados nestes tópicos. Use-os como referência ao contribuir com o framework ou desenvolver extensões personalizadas.
|
Tópico |
O que aborda |
|
Attention to detail |
A importância de casos extremos e decisões sutis de design no código do framework |
|
Foundational design patterns |
Padrões de design fundamentais e convenções usadas em toda a base de código |
|
Extensibility and incremental extension |
Como projetar extensões compatíveis com versões anteriores e combináveis |
|
Configuration design |
Diretrizes para projetar parâmetros de configuração e valores padrão |
|
Robustness |
Tratamento de erros, padrões de resiliência e codificação defensiva no framework |
|
Fool-proof design |
Prevenção de uso indevido por meio de APIs claras, padrões adequados e validação de entrada |
|
Extension point refactoring |
Quando e como refatorar interfaces de pontos de extensão |
Padrões de qualidade de código
|
Tópico |
O que aborda |
|
Versioning |
Convenções de numeração de versão e garantias de compatibilidade |
|
Checklist |
Lista de verificação pré-lançamento para alterações no framework |
|
Code smells |
Antipadrões comuns a evitar no código do framework Dubbo |
|
Coding conventions |
Estilo de código, nomenclatura e padrões de formatação |
|
Compatibility testing |
Estratégia de testes para compatibilidade retroativa e futura |