Relacionamento Digitalcom o Cidadão
Parte III — Arquitetura
Parte III — ArquiteturaCapítulo 15

Capítulo 15 — Arquitetura de Dados, Persistência e Cache

Este capítulo estabelece as diretrizes técnicas para armazenamento, isolamento, consistência, movimentação, retenção, auditoria, consulta e aceleração de dados da Plataforma de Relacionamento Digital com o Cidadão.

15.1 Objetivo do Capítulo

Este capítulo estabelece as diretrizes técnicas para armazenamento, isolamento, consistência, movimentação, retenção, auditoria, consulta e aceleração de dados da Plataforma de Relacionamento Digital com o Cidadão.

A arquitetura separa claramente as responsabilidades por tipo de dado:

Dados transacionais operacionais → bancos dos serviços de domínio
Dados documentais                → Document Service + GED
Dados de cache                   → Redis
Dados de busca textual           → índice de busca (projeção reconstruível)
Dados vetoriais                  → vector store segregado por tenant
Dados analíticos                 → Data Lake por tenant
Dados de auditoria               → Audit Store imutável

Nenhum componente único atende indistintamente a todas essas necessidades. A tecnologia de persistência é selecionada conforme a natureza do dado e a responsabilidade arquitetural.


15.2 Princípios da Arquitetura de Dados

  1. Ownership por domínio — cada domínio é o único responsável por gravar em seu armazenamento;
  2. Isolamento multi-tenant — dados de um tenant nunca são acessíveis por outro;
  3. Menor privilégio — cada serviço possui credenciais próprias com permissões mínimas;
  4. Consistência definida pelo caso de uso — transações locais para operações dentro de um domínio; consistência eventual entre domínios via eventos;
  5. Cache como otimização — nunca como fonte implícita da verdade;
  6. Separação OLTP / OLAP — dados transacionais e analíticos têm responsabilidades distintas;
  7. Minimização de dados pessoais — PII apenas onde necessário, com finalidade definida;
  8. Rastreabilidade — alterações sensíveis são auditadas com trilha imutável;
  9. Retenção governada — cada tipo de dado tem política de retenção e exclusão;
  10. Índices como projeções — índices de busca e vetores são reconstruíveis; não são fonte de verdade.

15.3 Dados Transacionais Operacionais

15.3.1 Propriedade por Serviço

Cada serviço de domínio é o único responsável por gravar em seu armazenamento operacional. Nenhum outro serviço acessa diretamente as tabelas de outro domínio. Colaboração ocorre por API síncrona ou por eventos RabbitMQ.

Request Service    → banco request-service
Workflow Service   → banco workflow-service
Citizen Service    → banco citizen-service
Document Service   → banco document-service (metadados)
Scheduling Service → banco scheduling-service

A separação física entre bancos (banco dedicado por serviço, schema por serviço ou banco compartilhado com schemas distintos) é definida por ADR-111, considerando criticidade, escala, isolamento e custo operacional.

15.3.2 Credenciais por Serviço

Cada serviço usa credenciais de banco específicas com permissões mínimas. Não existe credencial administrativa compartilhada entre serviços.

request-service-db-user       → SELECT, INSERT, UPDATE, DELETE em request.*
workflow-service-db-user      → SELECT, INSERT, UPDATE, DELETE em workflow.*

15.3.3 Isolamento Multi-Tenant

A estratégia de isolamento multi-tenant na camada de dados é uma das decisões arquiteturais mais críticas da plataforma. Três modelos são avaliados:

Banco por Tenant: isolamento máximo, backup individual, restauração individual. Custo: provisionamento, migrations e operação em escala.

Schema por Tenant: segregação lógica dentro do mesmo cluster. Custo: grande número de schemas, migrations por schema, gestão de connection pools.

Shared Schema com Tenant Discriminator: tabelas tenant-scoped incluem tenant_id. Simplicidade operacional para muitos tenants. Exige disciplina rigorosa: Tenant Context estrutural no backend, constraints e índices multi-tenant corretos.

Estratégia Híbrida: a maioria dos tenants em shared schema; tenants com requisitos específicos (volume, contratual, regulatório) em banco ou schema dedicado. O Tenant Context determina o roteamento.

A decisão definitiva é registrada como ADR-112.

15.3.4 Padrões de Dados Multi-Tenant

Quando o modelo compartilhado é adotado, as regras seguintes são obrigatórias:

Tenant Discriminator em tabelas scoped:

CREATE TABLE requests (
  id         UUID PRIMARY KEY,
  tenant_id  VARCHAR NOT NULL,
  ...
);

Constraints com tenant:

-- Incorreto: dois tenants podem usar o mesmo código
UNIQUE (protocol_code)

-- Correto: unicidade é por tenant
UNIQUE (tenant_id, protocol_code)

Índices orientados a queries reais:

-- Query comum: filtro por tenant + status + ordenação
CREATE INDEX idx_requests_tenant_status_created
ON requests (tenant_id, status, created_at DESC);

O tenant_id efetivo vem sempre do Tenant Context validado — nunca de parâmetro enviado pelo cliente como única fonte.

Row-Level Security (RLS): quando o banco suporta, RLS é avaliado como camada adicional de proteção para prevenir vazamento por query sem filtro de tenant. Registrado como ADR-114.

15.3.5 Transações

Transações permanecem locais ao serviço. A plataforma não usa transações distribuídas (2PC). Consistência entre domínios é obtida por eventos com Transactional Outbox e idempotência nos consumidores.

BEGIN TRANSACTION (banco do Request Service)
  UPDATE request SET status = 'SUBMITTED'
  INSERT INTO outbox_event (...)
COMMIT

O Workflow Service recebe o evento e atualiza seu próprio banco em transação local.

15.3.6 Controle de Concorrência

Optimistic Locking para a maioria das operações concorrentes:

UPDATE requests SET status = 'APPROVED', version = 19
WHERE id = ? AND tenant_id = ? AND version = 18
-- zero rows = conflito detectado → 409 Conflict para o cliente

Pessimistic Locking para seções críticas curtas com recurso escasso (ex.: última vaga em agendamento). Evitado em operações longas.

Distributed Locks via Redis para coordenação entre instâncias quando o banco do serviço não é suficiente (ex.: reconciliação periódica única por tenant). O lock deve ter: owner token, TTL, aquisição atômica e liberação segura pelo owner.

15.3.7 Migrações de Schema

Migrations são automatizadas (Flyway ou Liquibase — decisão padronizada na plataforma), versionadas no repositório do serviço proprietário e executadas no deploy.

Estratégia Expand-Migrate-Contract para zero-downtime:

1. EXPAND  → adicionar nova coluna nullable
2. DEPLOY  → versão nova e antiga do serviço rodam simultaneamente
3. MIGRATE → backfill dos dados existentes (em batches para grande volume)
4. SWITCH  → código migrado para usar nova estrutura
5. CONTRACT → remover coluna antiga em release posterior

Backfills de grande volume nunca são executados como migration bloqueante no startup. São jobs com checkpoint, rate control e observabilidade.

15.3.8 Temporalidade

A plataforma distingue semanticamente:

CampoSignificado
created_atQuando o registro foi persistido
updated_atQuando o registro foi modificado por último
occurred_atQuando o fato de negócio efetivamente ocorreu
effective_fromInício de vigência de uma regra ou configuração
effective_toFim de vigência

Timestamps em UTC obrigatoriamente. A interface apresenta no fuso do usuário; o backend armazena e processa em UTC.

15.3.9 Auditoria

Alterações sensíveis são registradas em trilha imutável com: data/hora UTC, tenant_id, subject_id, tipo de ação, recurso afetado e resultado. O Audit Store é segregado do banco operacional. Consultas à trilha são restritas por perfil e registradas como auditoria de segunda ordem.

Dados pessoais na trilha são minimizados — referências ao dado, não cópias completas.

15.3.10 Retenção e Exclusão

Cada tipo de dado tem política de retenção definida. Exclusão lógica (deleted_at) é avaliada por domínio — não é regra global. Dados pessoais seguem a LGPD: são anonimizados ou excluídos quando a finalidade cessa ou o titular solicita. A política é registrada por domínio e formalizada por ADR-124.


15.4 Cache — Redis

Redis é o candidato prioritário para cache distribuído e controles técnicos da plataforma.

15.4.1 Usos Candidatos do Cache

UsoJustificativa
Catálogo de serviços publicadosAlta leitura, baixa escrita; invalidação por evento
Configurações de tenantFrequentemente consultadas; raramente alteradas
Permissões calculadasEvitar recálculo em cada requisição
Resultados de consultas custosasDados de referência estáveis
Rate limiting distribuídoEstado compartilhado entre instâncias
Distributed locksCoordenação entre instâncias
Sessões (conforme IAM)Se o IAM usar sessão server-side

O cache não é usado como fonte de verdade. Cada dado em cache tem fonte autoritativa no banco do domínio responsável.

15.4.2 Convenção de Cache Keys

Chaves são estruturadas de forma hierárquica e sempre incluem o tenant:

platform:v1:tenant:{tenantId}:catalog:service:{serviceId}
platform:v1:tenant:{tenantId}:config:{key}
platform:v1:tenant:{tenantId}:permissions:{subjectId}
platform:v1:rate-limit:tenant:{tenantId}:subject:{subjectId}:{endpoint}

A versão da estrutura na chave (v1) permite invalidar todo o cache de uma versão sem afetar outras. O tenant no namespace garante que uma consulta de um tenant nunca retorne dados de outro, mesmo por erro de aplicação.

15.4.3 TTL e Invalidação

Cada cache tem TTL explícito definido conforme a volatilidade do dado:

CacheTTL de ReferênciaInvalidação Ativa
Catálogo publicado5–15 minutosPor evento catalog.service.published.v1
Configuração de tenant10–30 minutosPor evento configuration.changed.v1
Permissões calculadas1–5 minutosPor evento de alteração de perfil
Rate limitingConforme janelaAlgoritmo específico
Distributed lockCurto (segundos)Liberação explícita

TTL nunca é zero (cache eterno) nem extremamente longo sem justificativa. Jitter é aplicado ao TTL de chaves populares para evitar cache stampede.

15.4.4 Cache Stampede

Quando uma chave muito acessada expira simultaneamente em múltiplas instâncias:

10.000 requests → mesmo cache miss → 10.000 queries no banco

Mitigações aplicadas: jitter no TTL; single-flight (apenas uma requisição consulta a origem enquanto outras aguardam); lock curto na recomputação; stale-while-revalidate para dados tolerantes a eventual staleness.

15.4.5 Política de Falha do Cache

A política de falha é explícita por tipo de uso:

UsoFalha do CacheComportamento
Catálogo, configuraçãoCache indisponível → fallback à origemProteger contra sobrecarga
Rate limitingCache indisponível → fail-closed (bloquear)Segurança prevalece
Authorization cacheCache indisponível → recomputarNunca conceder acesso sem verificação
Distributed lockCache indisponível → falhar a operaçãoNão executar sem coordenação

15.4.6 Redis e Dados Pessoais

Dados pessoais em cache são minimizados. Identificadores são cacheados no lugar de dados completos quando possível. Campos sensíveis (CPF, nome, e-mail) não são indexados como chave de cache sem necessidade funcional explícita. Dados pessoais em cache seguem TTL curto.

15.4.7 Alta Disponibilidade do Redis

A topologia de Redis (Sentinel, Cluster, Replication) é definida por ambiente. Em produção, a configuração garante que a indisponibilidade de um nó não derrube o serviço. A persistência do Redis (RDB, AOF) é configurada por tipo de uso: cache puro tolera reconstrução; rate limiting e sessões podem exigir persistência.


15.5 Busca

15.5.1 Busca Textual

A plataforma avalia mecanismo especializado de busca para casos onde consultas relacionais simples não são suficientes:

  • catálogo de serviços (busca por nome, categoria, órgão);
  • conteúdo documental indexado;
  • pesquisa administrativa em grandes volumes.

A tecnologia é selecionada após definição de requisitos de volume, relevância, idioma, filtros e modelo operacional. Decisão registrada como ADR-136.

O índice de busca é uma projeção reconstruível — não é fonte de verdade. Em caso de inconsistência, o banco operacional prevalece e o índice é reindexado.

15.5.2 Busca Vetorial (Semântica)

A busca vetorial suporta o RAG e a busca semântica dos serviços de IA. Os vetores (embeddings) são gerados a partir de conteúdo autorizado e armazenados em vector store segregado por tenant.

Isolamento obrigatório por tenant:

  • cada tenant tem sua própria coleção ou namespace vetorial;
  • uma query de busca semântica do tenant A nunca retorna conteúdo do tenant B;
  • a segregação é estrutural, não apenas por filtro de aplicação.

Pipeline de indexação:

Documento/Conteúdo autorizado
    │
Validação de acesso e classificação
    │
Sanitização e chunking
    │
Geração de embeddings (modelo aprovado)
    │
Armazenamento no vector store do tenant
    │
Publicação de ai.knowledge-indexed.v1

O vector store não substitui o banco operacional como fonte de verdade do documento. A base vetorial é reconstruível a partir dos documentos autorizados armazenados no Document Service / GED.


15.6 Data Lake por Tenant

15.6.1 Finalidade

O Data Lake consolida dados analíticos, histórico operacional e datasets para IA. Não é banco operacional — não serve consultas transacionais em tempo real dos serviços de domínio.

Dados transacionais → banco do domínio (OLTP)
Dados analíticos    → Data Lake (OLAP)

Serviços de domínio nunca consultam o Data Lake para decisões de negócio em tempo real.

15.6.2 Ingestão por Eventos

O principal mecanismo de ingestão é o consumo de eventos RabbitMQ:

Domínio publica evento com tenantId
    │
RabbitMQ platform.events
    │
Data Lake Ingestion Consumer
    │
  Valida contrato e idempotência
    │
  Aplica regras de qualidade
    │
  Persiste na partição do tenant
    │
  Registra linhagem

A ingestão é idempotente. O campo id do evento garante deduplicação.

15.6.3 Ingestão em Lote

Para datasets históricos, migrações ou integrações que não emitem eventos, a ingestão em lote é usada com controle de checkpoint, idempotência por chave de negócio e monitoramento de progresso.

15.6.4 Zonas do Data Lake

O Data Lake é organizado em zonas de maturidade dos dados:

Raw Zone     → dados brutos como ingeridos, imutáveis
Refined Zone → dados limpos, validados e conformados
Curated Zone → datasets prontos para consumo (analytics, BI, IA)

Cada zona tem acesso controlado por perfil e finalidade.

15.6.5 Segregação por Tenant

Cada tenant tem partição própria no Data Lake. A segregação é estrutural — uma query analítica do tenant A nunca acessa partição do tenant B. O acesso ao Data Lake de um tenant é restrito a: analistas do próprio tenant com perfil autorizado, componentes de IA do tenant, jobs de qualidade com escopo de tenant.

15.6.6 Data Contracts

Cada dataset tem contrato formal descrevendo: schema, campos, tipos, semântica, produtor, frequência de atualização, nível de qualidade esperado e política de evolução. Mudanças incompatíveis nos contratos seguem o mesmo processo de versionamento dos eventos.

15.6.7 Linhagem e Qualidade

A linhagem registra a cadeia de transformações de cada dado desde a origem. A qualidade é monitorada por dimensão (completude, validade, atualidade, consistência, unicidade). O Data Quality Service emite alertas quando thresholds são violados.

15.6.8 Integração com Data Lake MG

Quando formalmente estabelecida, a integração com o Data Lake MG compartilha datasets autorizados conforme política definida com a PRODEMGE. Cada dataset compartilhado tem finalidade, classificação e controles de acesso documentados. Dados pessoais são minimizados antes do compartilhamento.


15.7 Gestão Documental (GED)

15.7.1 Document Service

O Document Service é o único componente que acessa o armazenamento de documentos binários. Outros serviços obtêm referências — nunca manipulam o binário diretamente.

Serviço de Domínio      → usa referência (documentId)
Document Service        → armazena e recupera binários + metadados
Storage (object/GED)    → persiste bytes com identificação de tenant

15.7.2 Metadados e Integridade

Cada documento armazena: hash de integridade (checksum no recebimento), tenant_id, owner, tipo, classificação, versão, associações (solicitação, processo, cidadão), histórico de acesso e situação.

15.7.3 Versionamento

Versões de documento são imutáveis. A publicação de uma nova versão não sobrescreve a anterior. O histórico de versões é preservado conforme política de retenção do tenant.

15.7.4 Integração Assíncrona

Processamentos pesados de documentos (OCR, extração de metadados, indexação para IA) são desacoplados por RabbitMQ:

document.uploaded.v1
    │
OCR Worker           → extrai texto
Metadata Worker      → extrai metadados estruturados
AI Builder           → gera embeddings para RAG (se autorizado)

15.7.5 Documentos e IA

Nem todo documento do GED é indexado automaticamente na base de conhecimento de IA. A indexação requer autorização explícita por política do tenant. O conteúdo enviado à IA é classificado e sanitizado antes do processamento.


15.8 Backup e Recuperação

15.8.1 Princípio

Um backup sem teste de restauração não é backup — é esperança. A plataforma define: objetivo de ponto de recuperação (RPO), objetivo de tempo de recuperação (RTO), frequência de backup por componente e procedimento de restore test executado periodicamente.

15.8.2 Componentes e Estratégias

ComponenteEstratégia de Referência
Bancos operacionaisBackup incremental + snapshot; PITR avaliado
RedisConforme uso: cache puro tolera reconstrução; sessões/locks requerem persistência configurada
Vector StoreReconstruível a partir dos documentos autorizados
Índices de buscaReconstruíveis a partir dos bancos operacionais
Data LakeBackup de partições por tenant
GED / StorageBackup de objetos binários com retenção por tenant
Audit StoreImutável; backup com retenção longa conforme política

15.8.3 Backup Multi-Tenant

A estratégia permite restauração seletiva por tenant quando necessário, sem impactar dados de outros tenants. A recuperação de um tenant em ponto específico no tempo (PITR) é avaliada por ADR-145.

15.8.4 Disaster Recovery

O plano de Disaster Recovery define: RTO e RPO por componente, sequência de restauração, dependências entre componentes, procedimento de validação pós-restauração e responsáveis. É testado periodicamente com resultados documentados.


15.9 Proteção de Dados Pessoais (LGPD)

15.9.1 Minimização

PII é coletado e armazenado apenas onde necessário à finalidade declarada. Datasets derivados (cache, índices, vetores, Data Lake, Audit Store) contêm apenas o mínimo necessário — identificadores no lugar de dados pessoais quando possível.

15.9.2 Classificação

Dados são classificados por sensibilidade: público, interno, confidencial, restrito. Dados pessoais sensíveis (saúde, biometria, origem racial, orientação sexual) têm controles adicionais. A classificação orienta: criptografia em campo, mascaramento, acesso restrito e retenção.

15.9.3 Exclusão e Anonimização

Quando a finalidade do tratamento cessa ou o titular solicita exclusão:

  • dados pessoais são anonimizados (tornados não identificáveis) ou excluídos;
  • dados em cache são invalidados;
  • embeddings de conteúdo identificável são avaliados para reembedding ou exclusão;
  • a exclusão no Data Lake segue política de retenção e formato do dataset.

15.9.4 Dados de Produção em Desenvolvimento

Dados reais de produção não são copiados para ambientes de desenvolvimento ou homologação. Dados sintéticos ou mascarados são usados para testes que exijam massa representativa.


15.10 Observabilidade de Dados

15.10.1 Métricas de Banco

MétricaAlerta
Active connectionsPróximo ao limite do pool
Pool usageSaturação de pool
Query duration P95Acima do SLO definido
Slow queriesAcima do threshold de ms definido
DeadlocksQualquer ocorrência
Replication lagAcima de threshold
Storage growthTendência não esperada

15.10.2 Métricas de Redis

MétricaAlerta
Memory used / max memoryPróximo ao limite
EvictionsAcima de zero em cache crítico
Hit ratioQueda significativa
Latência P99Acima do SLO
Connected clientsAcima do threshold

Alta taxa de hit não é analisada isoladamente — o cache pode ter alto hit ratio e ainda armazenar dados inconsistentes após falha de invalidação.

15.10.3 Métricas do Data Lake

Volume ingerido por tenant e por evento; latência de ingestão; falhas de qualidade detectadas; datasets com freshness vencida; jobs de ingestão com duração acima do esperado.

15.10.4 Métricas do Vector Store

Taxa de indexação por tenant; latência de busca semântica; volume de chunks por base de conhecimento; falhas de geração de embedding.


15.11 Decisões Confirmadas

  1. a plataforma é multi-tenant; isolamento de dados é obrigatório em todos os componentes;
  2. cada serviço de domínio é o único responsável por gravar em seu armazenamento;
  3. nenhum serviço acessa diretamente os dados de outro domínio;
  4. transações permanecem locais; consistência entre domínios é por eventos + idempotência;
  5. o Data Lake não é banco operacional; serviços de domínio não o consultam em tempo real;
  6. Redis é candidato prioritário para cache distribuído;
  7. caches tenant-scoped incluem o tenant no namespace da chave;
  8. o cache não é fonte implícita da verdade;
  9. índices de busca são projeções reconstruíveis;
  10. bases vetoriais são segregadas por tenant de forma estrutural;
  11. documentos binários não trafegam pelo RabbitMQ — apenas referências;
  12. dados pessoais são minimizados em bancos derivados, caches, índices, vetores e Data Lake;
  13. migrations seguem Expand-Migrate-Contract para zero-downtime;
  14. backup é considerado efetivo apenas quando restauração é testada;
  15. observabilidade de dados inclui métricas de banco, Redis, busca, vetores e Data Lake.

15.12 Benefícios da Arquitetura

  • ownership claro com fonte de verdade definida por domínio;
  • isolamento multi-tenant em todas as camadas de dados;
  • consistência controlada: forte dentro do domínio, eventual entre domínios;
  • cache governado com TTL, invalidação e política de falha por tipo;
  • dados analíticos separados dos operacionais sem acoplamento;
  • bases vetoriais segregadas por tenant para RAG seguro;
  • gestão documental centralizada no Document Service com versionamento;
  • recuperação testável com RPO e RTO definidos;
  • minimização de dados pessoais em todas as camadas derivadas;
  • observabilidade integrada para banco, cache, busca, Data Lake e vetores.

15.13 Riscos e Mitigações

RiscoConsequênciaMitigação
Banco único sem ownershipJoins entre domínios, acoplamento, deploy coordenadoDatabase per service ou schema por serviço com credenciais separadas
Query sem filtro de tenantVazamento de dados entre órgãosTenant Context estrutural + testes de isolamento automatizados + RLS
Constraint única sem tenantConflito entre tenantsUNIQUE (tenant_id, campo) em toda constraint scoped
Cache sem tenant no namespaceDados de um tenant visíveis por outroChave inclui tenant obrigatoriamente
Cache como fonte de verdadeDados inconsistentes servidos silenciosamenteInvalidação ativa por evento; política de falha explícita
Cache stampedeSobrecarga da origem em expiração simultâneaJitter no TTL; single-flight; lock curto
Migration destrutiva sem Expand-ContractDowntime ou incompatibilidade durante deployExpand-Migrate-Contract obrigatório para mudanças de schema
Backfill bloqueante no startupInstância trava por minutos ou horasJob assíncrono com batches, checkpoint e observabilidade
Data Lake como banco operacionalLatência e acoplamentoProibição de consulta do Data Lake por serviços em tempo real
PII copiada indiscriminadamenteExposição desnecessária e risco de LGPDMinimização por política; datasets com finalidade declarada
Vetores sem isolamento por tenantContaminação semântica entre órgãosSegregação estrutural no vector store; nunca apenas por filtro de aplicação
Backup não testadoFalsa segurança; falha na recuperaçãoRestore test periódico com resultado documentado
Distributed lock sem TTL ou owner tokenLock eterno após crash do detentorAlgoritmo validado com TTL, owner token e liberação segura

15.14 Decisões Arquiteturais

ADRTema
ADR-109Estratégia geral de dados da plataforma
ADR-110Ownership de dados por domínio de serviço
ADR-111Database per service — banco dedicado vs. schema compartilhado
ADR-112Estratégia multi-tenant de persistência (shared / schema / banco / híbrido)
ADR-113Padrão de Tenant Discriminator e constraints multi-tenant
ADR-114Adoção de Row-Level Security
ADR-115DBMS relacional — tecnologia e configuração
ADR-116Guideline JPA/Hibernate para serviços Java
ADR-117Fronteiras transacionais e rejeição de transações distribuídas
ADR-118Optimistic Locking — implementação padrão
ADR-119Distributed Locks — tecnologia e algoritmo
ADR-120Ferramenta de migrations (Flyway vs. Liquibase)
ADR-121Estratégia de identificadores técnicos (UUID v4, v7, ULID)
ADR-122Temporalidade e UTC como padrão
ADR-123Arquitetura de Auditoria e Audit Store
ADR-124Política de retenção, exclusão e anonimização
ADR-125Arquitetura do Data Lake — tecnologia e modelo de zonas
ADR-126Ingestão por eventos como mecanismo primário do Data Lake
ADR-127Change Data Capture — avaliação e escopo
ADR-128Data Contracts — formato e governança
ADR-129Linhagem e qualidade de dados
ADR-130Redis — topologia, persistência e alta disponibilidade
ADR-131Convenção de cache keys
ADR-132Cache multi-tenant — namespace obrigatório
ADR-133Estratégia de invalidação de cache
ADR-134Rate limiting com Redis — algoritmo
ADR-135Sessões distribuídas — Redis vs. tokens stateless
ADR-136Tecnologia de busca textual
ADR-137Vector Store — tecnologia
ADR-138Isolamento vetorial por tenant — implementação estrutural
ADR-139Modelo de embedding — seleção e governança
ADR-140Política de chunking para RAG
ADR-141GED — capacidade e produto
ADR-142Document Service — escopo e interface
ADR-143Versionamento documental e política de imutabilidade
ADR-144Backup e restore — estratégia por componente
ADR-145RPO, RTO e PITR por componente crítico
ADR-146Disaster Recovery de dados

15.15 Rastreabilidade com o Anexo III

  • Bloco 1 — Relacionamento e Atendimento: persistência transacional de solicitações, protocolos, interações e comunicações; cache de catálogo e configurações; Data Lake para métricas de atendimento.
  • Bloco 2 — BPM: bancos de Workflow e Task com ownership separado; Transactional Outbox para consistência entre Request e Workflow; optimistic locking em tarefas concorrentes.
  • Bloco 3 — Gestão Documental: Document Service com GED; metadados e versionamento; hash de integridade; pipeline assíncrono de processamento documental.
  • Bloco 4 — Dados e Inteligência: Data Lake por tenant com ingestão por eventos; vector store segregado; bases de conhecimento RAG por tenant; Data Contracts e qualidade.
  • Bloco 5 — Integração: Data Lake MG como destino de datasets autorizados; linhagem de dados compartilhados; contratos de dataset.
  • Bloco 6 — Infraestrutura, Segurança e Governança: credenciais por serviço, menor privilégio, RLS, minimização de PII, auditoria imutável, backup com restore testado.

15.16 Considerações Finais

A Arquitetura de Dados não é uma decisão única — é um conjunto de decisões coordenadas sobre como cada tipo de dado é armazenado, acessado, protegido e descartado ao longo do ciclo de vida da plataforma.

O princípio central é simples: cada dado tem um dono, e somente esse dono grava nele. O restante acessa por contrato. O isolamento multi-tenant não é uma camada que se adiciona depois — é uma propriedade estrutural desde a modelagem.

O Capítulo 16 detalha a Arquitetura de Inteligência Artificial, RAG e Automação Inteligente, descrevendo como as bases vetoriais, os modelos e os guardrails definidos neste capítulo se articulam com as capacidades de IA da plataforma.


15.17 Controle de Versão

CampoValor
DocumentoDocumento Mestre — Plataforma de Relacionamento Digital com o Cidadão
Capítulo15 — Arquitetura de Dados, Persistência e Cache
Versão1.0
SituaçãoConcluído
Última atualização15/07/2026

15.18 Rastreabilidade PRODEMGE

  • [ANX-III] — Blocos 1 a 6 cobertos conforme seção 15.15.
  • [ANX-IV] — Capacidades técnicas de isolamento multi-tenant, Data Lake, cache distribuído, busca semântica, GED, backup e observabilidade de dados.
  • [ANX-V] — Sustentabilidade: ownership de dados por domínio, migrations automatizadas com Expand-Migrate-Contract, retenção governada, índices como projeções reconstruíveis, observabilidade integrada.
  • [PNR] — Plano de Negócio Referencial: plataforma com capacidade analítica, Data Lake, gestão documental, IA com RAG e isolamento multi-tenant em todas as camadas.
  • [EDITAL] — Edital CP001/2026: plataforma com arquitetura de dados escalável, segura, com governança e evolução contínua ao longo da vigência da parceria.

Nesta página

15.1 Objetivo do Capítulo15.2 Princípios da Arquitetura de Dados15.3 Dados Transacionais Operacionais15.3.1 Propriedade por Serviço15.3.2 Credenciais por Serviço15.3.3 Isolamento Multi-Tenant15.3.4 Padrões de Dados Multi-Tenant15.3.5 Transações15.3.6 Controle de Concorrência15.3.7 Migrações de Schema15.3.8 Temporalidade15.3.9 Auditoria15.3.10 Retenção e Exclusão15.4 Cache — Redis15.4.1 Usos Candidatos do Cache15.4.2 Convenção de Cache Keys15.4.3 TTL e Invalidação15.4.4 Cache Stampede15.4.5 Política de Falha do Cache15.4.6 Redis e Dados Pessoais15.4.7 Alta Disponibilidade do Redis15.5 Busca15.5.1 Busca Textual15.5.2 Busca Vetorial (Semântica)15.6 Data Lake por Tenant15.6.1 Finalidade15.6.2 Ingestão por Eventos15.6.3 Ingestão em Lote15.6.4 Zonas do Data Lake15.6.5 Segregação por Tenant15.6.6 Data Contracts15.6.7 Linhagem e Qualidade15.6.8 Integração com Data Lake MG15.7 Gestão Documental (GED)15.7.1 Document Service15.7.2 Metadados e Integridade15.7.3 Versionamento15.7.4 Integração Assíncrona15.7.5 Documentos e IA15.8 Backup e Recuperação15.8.1 Princípio15.8.2 Componentes e Estratégias15.8.3 Backup Multi-Tenant15.8.4 Disaster Recovery15.9 Proteção de Dados Pessoais (LGPD)15.9.1 Minimização15.9.2 Classificação15.9.3 Exclusão e Anonimização15.9.4 Dados de Produção em Desenvolvimento15.10 Observabilidade de Dados15.10.1 Métricas de Banco15.10.2 Métricas de Redis15.10.3 Métricas do Data Lake15.10.4 Métricas do Vector Store15.11 Decisões Confirmadas15.12 Benefícios da Arquitetura15.13 Riscos e Mitigações15.14 Decisões Arquiteturais15.15 Rastreabilidade com o Anexo III15.16 Considerações Finais15.17 Controle de Versão15.18 Rastreabilidade PRODEMGE