Skip to content

jonathanmdr/DynamicDataSourceRouting

Repository files navigation

Dynamic Data Source Routing

CI CodeFactor

Exemplo de uma API REST desenvolvida em Java com Spring, o intuito é apresentar uma solução arquitetural para dimensionar operações de leitura com banco de dados, neste exemplo trabalharemos com duas bases de dados, uma base de dados principal e uma réplica.

A ideia é fazer com que a aplicação direcione as transações definidas como READ_ONLY para a base de dados réplica e que as transações READ_WRITE sejam direcionadas para a base de dados principal.

As imagens e configurações contidas no arquivo docker-compose.yaml são específicas para lidar com a replicação de dados.

Esta arquitetura consiste em diminuir a concorrência entre transações da API com o banco de dados, isso nos permite alguns ganhos em ambientes de alta escala dado que podemos tranquilamente escalar horizontalmente mais nós de réplica quando necessário.

node node node

Arquitetura

node

Documentação

ℹ️ Após inicializar a aplicação, acesse a documentação clicando neste link.

Inicializando as bases de dados

⚠️ É necessário ter instalado docker e docker-compose.

Execute os comandos abaixo:

Inicializar:

make up

Parar:

make down

OpenTelemetry

O OpenTelemetry foi incluso no projeto utilizando a estratégia de coletores como agent.

Variáveis de ambiente:

OTEL_METRICS_EXPORTER=otlp
OTEL_EXPORTER_OTLP_METRICS_COMPRESSION=gzip
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://localhost:4317
OTEL_TRACES_EXPORTER=otlp
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION=gzip
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4317
OTEL_LOGS_EXPORTER=none
OTEL_SERVICE_NAME=billionaire-api

Argumentos de VM:

-javaagent:./agents/opentelemetry-javaagent.jar