O Fetcher na plataforma Lerian
Os produtos Lerian frequentemente precisam de dados que vivem fora da plataforma — extratos de transações no banco de dados operacional de um banco, movimentações no MySQL de um parceiro, registros de clientes em um MongoDB. Antes do Fetcher, cada produto implementava sua própria lógica de acesso, com código duplicado e práticas de segurança inconsistentes. O Fetcher centraliza esse trabalho. Produtos como o Reporter e o Matcher o utilizam para trazer dados externos para seus fluxos — geração de relatórios, reconciliação — e os seus próprios serviços podem usar a mesma API para qualquer necessidade de acesso controlado e auditado a bancos de dados externos. O Fetcher oferece quatro capacidades centrais:
- Gestão de conexões: Armazene, valide e teste conexões com bancos de dados, com credenciais criptografadas em repouso.
- Descoberta de esquemas: Detecção automática de tabelas, colunas e tipos de dados em todos os bancos suportados.
- Extração de dados: Uma interface de consulta unificada com projeção de campos, filtros e suporte a múltiplas tabelas, múltiplos esquemas e múltiplos datasources.
- Orquestração de jobs: Processamento assíncrono com detecção de duplicatas, acompanhamento de status e eventos de conclusão.
Arquitetura
O Fetcher roda como dois serviços cooperantes sobre um núcleo embarcável:
| Componente | Papel |
|---|---|
| Manager | Servidor de API HTTP para gestão de conexões e jobs. Armazena metadados no MongoDB e despacha jobs de extração via RabbitMQ. |
| Worker | Processador assíncrono de jobs. Consome jobs da fila, extrai dados dos bancos configurados, criptografa os resultados em object storage (SeaweedFS ou qualquer serviço compatível com S3) e publica eventos job.completed / job.failed. |
| Engine | O núcleo de extração (pkg/engine) sobre o qual os dois serviços rodam — ciclo de vida de conexões, descoberta de esquemas, planejamento de consultas, execução, limites e isolamento de tenant. |
Bancos de dados suportados
| Banco de dados | Versões | Destaques |
|---|---|---|
| PostgreSQL | 12+ | Suporte a múltiplos schemas, parsing automático de JSONB, pooling de conexões |
| MySQL | 8.0+ | Parsing automático de campos JSON, extração multi-tabela, pooling de conexões |
| Oracle | 19c+ | Namespaces de owner/schema, extração multi-tabela, pooling de conexões |
| SQL Server | 2019+ | Suporte a múltiplos schemas, correspondência de filtros de tabela, pooling de conexões |
| MongoDB | 7.0+ | Inferência de esquema, amostragem estatística, pipelines de agregação |
Postura de segurança
O Fetcher foi construído para tocar bancos de dados de terceiros com segurança:
- Uma chave-mestra, três chaves derivadas. Um único segredo
APP_ENC_KEYderiva — via HKDF — chaves independentes para criptografia de credenciais (AES-256-GCM), assinatura de mensagens internas entre Manager e Worker (HMAC-SHA256) e assinatura dos documentos extraídos, para que consumidores possam verificar sua autenticidade. - Proteção contra SSRF. Em implantações multi-tenant, os hosts das conexões são validados contra faixas de endereços privados e de metadados de nuvem antes de qualquer conexão.
- Transporte fail-closed. Conexões inseguras (sem TLS) com a infraestrutura são rejeitadas por padrão fora do desenvolvimento local.
- Isolamento multi-tenant. Quando habilitado, cada tenant recebe bancos de metadados, namespaces de cache e caminhos de object storage isolados, resolvidos a partir do contexto de tenant baseado em JWT — com custo zero quando desabilitado.
Próximos passos
Primeiros passos
Rode o Fetcher localmente e execute seu primeiro job de extração.
Conceitos centrais
Conexões, descoberta de esquemas, jobs de extração e resultados.

