O que seriam Arquiteturas Orientadas a Serviços e Eventos (SOA/EDA)?
Estive analisando uma vaga que solicitava ter conhecimento em SOA e EDA, então decidi investigar sobre o assunto dando origem a esse artigo.
Arquiteturas Orientadas a Serviços (SOA - Service-Oriented Architecture) e Arquiteturas Orientadas a Eventos (EDA - Event-Driven Architecture) são dois paradigmas distintos, mas complementares, para projetar sistemas distribuídos.
1. SOA (Service-Oriented Architecture)
A SOA se baseia na criação de serviços independentes e reutilizáveis, que expõem funcionalidades específicas por meio de interfaces bem definidas. Esses serviços podem ser acessados por outros componentes do sistema, geralmente por meio de protocolos como REST ou SOAP.
Características da SOA:
- Desacoplamento: Os serviços são independentes e podem ser modificados sem impactar diretamente outros serviços.
- Reutilização: Um mesmo serviço pode ser utilizado por diferentes aplicações.
- Interoperabilidade: Serviços podem ser consumidos por diferentes tecnologias e plataformas.
- Orquestração: O fluxo de trabalho pode ser controlado por um orquestrador (ex.: um API Gateway ou um ESB - Enterprise Service Bus).
Exemplo de SOA:
Um sistema de e-commerce pode ter serviços como:
UserService
para gerenciar usuáriosOrderService
para processar pedidosPaymentService
para lidar com pagamentos
Cada serviço expõe endpoints que permitem outras partes do sistema interagir com ele.
2. EDA (Event-Driven Architecture)
A EDA se baseia na comunicação assíncrona entre componentes através de eventos. Em vez de chamar diretamente um serviço (como na SOA), um componente publica um evento, e outros componentes interessados nesse evento podem consumi-lo e reagir a ele.
Características da EDA:
- Assincronismo: Eventos são publicados e processados de forma assíncrona.
- Baixo acoplamento: Os serviços não precisam conhecer uns aos outros, apenas os eventos que processam.
- Escalabilidade: Como os eventos são processados de forma independente, o sistema pode escalar melhor.
- Reatividade: Permite construir sistemas reativos que respondem a mudanças rapidamente.
Exemplo de EDA:
No mesmo sistema de e-commerce:
- O
OrderService
cria um pedido e publica um evento"OrderCreated"
. - O
PaymentService
escuta esse evento e processa o pagamento. - O
ShippingService
escuta o evento"PaymentConfirmed"
e agenda a entrega.
Esses serviços não interagem diretamente; eles apenas ouvem e reagem a eventos.
Quando usar SOA?
- Quando os serviços precisam se comunicar de forma direta e síncrona.
- Para sistemas que exigem respostas imediatas (ex.: APIs REST para consulta de dados).
Quando usar EDA?
- Para sistemas altamente escaláveis e distribuídos.
- Quando há necessidade de processar eventos em tempo real (ex.: sistemas de monitoramento, e-commerce, IoT).