DEV Community

Roberto de Vargas Neto
Roberto de Vargas Neto

Posted on • Originally published at dev.to

Infraestrutura como Código: Subindo o ecossistema financeiro com Docker Compose

Olá, pessoal!

No post anterior, apresentei a visão geral do My Broker B3. Hoje, vamos "abrir o capô" e falar sobre a fundação que sustenta todo esse ecossistema: a infraestrutura.

Para um sistema de microserviços, configurar manualmente cada banco de dados, broker de mensagens e ferramenta de monitoramento seria um pesadelo de produtividade. Por isso, utilizei o Docker Compose para criar um ambiente local que replica fielmente as necessidades de um sistema distribuído de alta complexidade.


🏗️ A Estratégia de Isolamento de Domínios

Uma decisão central no design deste projeto foi o isolamento de dados por domínio. Em vez de um único banco de dados monolítico, cada microserviço possui sua própria instância ou base lógica:

  • Persistência Relacional (SQL): Utilizo MySQL 8.0 para os domínios da Corretora (Identity, Wallet, Order e Asset) e PostgreSQL 15 para o núcleo da B3. Isso garante que uma falha no banco de ordens não afete o serviço de identidade, por exemplo.
  • Camada de Cache (Redis): Implementei instâncias leves de Redis (Alpine) isoladas para dados de mercado e carteira, garantindo latência sub-milissegundo onde a velocidade é crítica.
  • NoSQL (MongoDB): Uma instância centralizada para armazenar dados não estruturados, como históricos de preços (Ticks) e relatórios.

📡 Mensageria: O Backbone do Sistema

O arquivo docker-compose.yml orquestra dois gigantes da mensageria para diferentes propósitos:

  1. Apache Kafka (KRaft): Configurado no modo moderno KRaft (sem Zookeeper), o que torna o container mais leve e estável para o desenvolvimento local. Ele lida com o alto volume de eventos internos.
  2. RabbitMQ: Atua como a nossa ponte (Bridge) de comunicação entre o Broker e a B3, garantindo o desacoplamento total entre os sistemas.

📊 Observabilidade desde o "Dia 1"

Não se gerencia o que não se mede. Por isso, incluí Prometheus e Grafana diretamente na infraestrutura base. Assim que um microserviço sobe, ele já pode exportar métricas que são visualizadas em dashboards em tempo real.


🔐 Segurança e Configuração com .env

Um detalhe crucial para qualquer projeto profissional é a gestão de segredos e configurações. No docker-compose.yml, utilizei variáveis de ambiente para evitar o hardcoding de senhas e portas.

Toda a configuração sensível fica isolada em um arquivo .env (ignorado pelo Git), enquanto um arquivo .env.example é fornecido como template. Isso demonstra uma boa prática de segurança:

# Trecho do docker-compose utilizando variáveis de ambiente
broker-identity-db:
  image: mysql:8.0
  environment:
    MYSQL_DATABASE: ${BROKER_IDENTITY_DB_NAME}
    MYSQL_USER: ${BROKER_DB_USER}
    MYSQL_PASSWORD: ${BROKER_DB_PASS}
Enter fullscreen mode Exit fullscreen mode

🚀 Como Executar

Com a infraestrutura automatizada, basta um comando para subir os 12 containers:

docker-compose up -d
Enter fullscreen mode Exit fullscreen mode

Essa padronização garante que o ambiente de desenvolvimento seja idêntico para qualquer pessoa que colaboresse no projeto se fosse o caso, eliminando o clássico problema do "na minha máquina funciona".

No próximo post, vamos falar sobre o primeiro microserviço que criei que faz a integração com API externa da Brappi, armazena em um banco mongo e publica em um tópico Kafka os preços atualizados!


​🔎​ Sobre a série

⬅️ Post Anterior: Construindo um ecossistema de Microserviços.

📘​ Índice da Série: Guia da Série.


Links:

Top comments (0)