Service Discovery

Service Discovery e Configuração Centralizada

Visão Geral

Este documento descreve o sistema de configuração centralizada e service discovery do ecossistema C-Suite. O objetivo é eliminar URLs hardcoded e padronizar variáveis de ambiente.

Módulo de Configuração Centralizada

Localização

O módulo principal está em: core_config.py (raiz do projeto)

Uso Básico

from core_config import get_service_url, get_db_config

# Obter URL de um serviço
feature_url = get_service_url("feature_service")
csuite_url = get_service_url("csuite_api")

# Obter configuração de banco
db_config = get_db_config("csuite")  # ou "core", "staging"
connection_string = db_config.connection_string

Funções de Conveniência

from core_config import (
    get_fourc_feature_service_url,
    get_fourc_scoring_service_url,
    get_fourc_decision_api_url,
    get_fourc_executor_url,
    get_csuite_api_url,
    get_fourc_suite_api_url,
)

feature_url = get_fourc_feature_service_url()
scoring_url = get_fourc_scoring_service_url()
decision_url = get_fourc_decision_api_url()
executor_url = get_fourc_executor_url()
csuite_url = get_csuite_api_url()
fourc_suite_url = get_fourc_suite_api_url()

Variáveis de Ambiente Padronizadas

URLs de Serviços 4C

Variável Descrição Padrão
FOURC_FEATURE_SERVICE_URL Feature Service http://feature-service:8081
FOURC_SCORING_SERVICE_URL Scoring Service http://scoring-service:8082
FOURC_DECISION_API_URL Decision API http://decision-api:8080
FOURC_EXECUTOR_URL Executor http://executor:8084
FOURC_UI_APP_URL UI App http://ui-app:8085

Nota: Para compatibilidade, também aceita:
- FEATURE_SERVICE_URL (alias para FOURC_FEATURE_SERVICE_URL)
- SCORING_SERVICE_URL (alias para FOURC_SCORING_SERVICE_URL)
- DECISION_API_URL (alias para FOURC_DECISION_API_URL)
- EXECUTOR_URL (alias para FOURC_EXECUTOR_URL)
- UI_APP_URL (alias para FOURC_UI_APP_URL)

URLs de Serviços C-Suite

Variável Descrição Padrão
CSUITE_API_URL C-Suite Executive API http://localhost:8002
CSUITE_CONTEXT_API_URL C-Suite Context API http://localhost:8003
CSUITE_SALES_MANAGER_API_URL Sales Manager API http://localhost:8004
FOURC_SUITE_API_URL 4C-Suite Orquestrador http://localhost:8000

Observability

Variável Descrição Padrão
PROMETHEUS_URL Prometheus http://observ_prometheus:9090
GRAFANA_URL Grafana https://grafana.internut.com.br

LLM Services

Variável Descrição Padrão
LLM_OLLAMA_URL Ollama http://ollama:11434

Banco de Dados

C-Suite (padrão)

Variável Descrição Padrão
CSUITE_DB_HOST Host do MySQL localhost
CSUITE_DB_PORT Porta do MySQL 3306
CSUITE_DB_USER Usuário core
CSUITE_DB_PASSWORD Senha (vazio)
CSUITE_DB_NAME Nome do banco csuite

Aliases: DB_HOST, DB_PORT, DB_USER, DB_PASSWORD, DB_NAME

4C (core)

Variável Descrição Padrão
MYSQL_HOST Host do MySQL localhost
MYSQL_PORT Porta do MySQL 3306
MYSQL_USER Usuário core
MYSQL_PASSWORD Senha (vazio)
MYSQL_DB Nome do banco core

Staging

Variável Descrição Padrão
CSUITE_DB_STAGING_NAME Nome do banco staging csuite_staging
CSUITE_DB_STAGING_PASSWORD Senha staging (opcional) (usa CSUITE_DB_PASSWORD)

Exemplo de .env

# ============================================
# URLs de Serviços 4C
# ============================================
FOURC_FEATURE_SERVICE_URL=http://feature-service:8081
FOURC_SCORING_SERVICE_URL=http://scoring-service:8082
FOURC_DECISION_API_URL=http://decision-api:8080
FOURC_EXECUTOR_URL=http://executor:8084
FOURC_UI_APP_URL=http://ui-app:8085

# ============================================
# URLs de Serviços C-Suite
# ============================================
CSUITE_API_URL=http://localhost:8002
CSUITE_CONTEXT_API_URL=http://localhost:8003
CSUITE_SALES_MANAGER_API_URL=http://localhost:8004
FOURC_SUITE_API_URL=http://localhost:8000

# ============================================
# Observability
# ============================================
PROMETHEUS_URL=http://observ_prometheus:9090
GRAFANA_URL=https://grafana.internut.com.br

# ============================================
# LLM
# ============================================
LLM_OLLAMA_URL=http://ollama:11434

# ============================================
# Banco de Dados C-Suite
# ============================================
CSUITE_DB_HOST=vallery.catmgckfixum.sa-east-1.rds.amazonaws.com
CSUITE_DB_PORT=3306
CSUITE_DB_USER=core
CSUITE_DB_PASSWORD=sua_senha_aqui
CSUITE_DB_NAME=csuite
CSUITE_DB_STAGING_NAME=csuite_staging

# ============================================
# Banco de Dados 4C
# ============================================
MYSQL_HOST=vallery.catmgckfixum.sa-east-1.rds.amazonaws.com
MYSQL_PORT=3306
MYSQL_USER=core
MYSQL_PASSWORD=sua_senha_aqui
MYSQL_DB=core

Migração de Código Existente

Antes (hardcoded)

FEATURE_URL = "http://feature-service:8081"
SCORING_URL = "http://scoring-service:8082"

Depois (configuração centralizada)

from core_config import get_service_url

FEATURE_URL = get_service_url("feature_service")
SCORING_URL = get_service_url("scoring_service")

Ou usando funções de conveniência

from core_config import (
    get_fourc_feature_service_url,
    get_fourc_scoring_service_url,
)

FEATURE_URL = get_fourc_feature_service_url()
SCORING_URL = get_fourc_scoring_service_url()

Ambientes

Desenvolvimento Local

# .env.local
FOURC_DECISION_API_URL=http://localhost:8083
CSUITE_API_URL=http://localhost:8002

Docker Compose

# .env.docker
FOURC_DECISION_API_URL=http://decision-api:8080
CSUITE_API_URL=http://csuite-api:8000

Produção

# .env.prod
FOURC_DECISION_API_URL=https://decision-api.example.com
CSUITE_API_URL=https://csuite-api.example.com

Service Discovery

Modo Atual (Configuração via .env)

O sistema atual usa configuração via variáveis de ambiente. Isso é suficiente para a maioria dos casos.

Futuro: Service Discovery Real

Para ambientes mais complexos (Kubernetes, ECS), pode-se implementar:

  1. DNS-based Discovery: Usar nomes DNS internos
  2. Consul/etcd: Service registry centralizado
  3. Kubernetes Services: Usar service names do K8s
  4. AWS Service Discovery: Para ambientes AWS

Troubleshooting

Serviço não encontrado

from core_config import get_service_url

try:
    url = get_service_url("servico_inexistente")
except ValueError as e:
    print(f"Erro: {e}")

Verificar configuração carregada

from core_config import get_service_urls

urls = get_service_urls()
print(f"Feature Service: {urls.fourc_feature_service}")
print(f"C-Suite API: {urls.csuite_api}")

Debug de variáveis de ambiente

import os
from core_config import get_service_urls

# Verificar se variável está definida
print(f"FOURC_DECISION_API_URL: {os.getenv('FOURC_DECISION_API_URL', 'NÃO DEFINIDA')}")

# Ver configuração carregada
urls = get_service_urls()
print(f"Decision API URL: {urls.fourc_decision_api}")

Próximos Passos

  1. ✅ Módulo de configuração centralizada criado
  2. ⏳ Migrar todos os apps para usar core_config
  3. ⏳ Atualizar documentação de cada app
  4. ⏳ Criar testes para configuração
  5. ⏳ Implementar service discovery real (se necessário)

🔊 Text-to-Speech

1.0x
1.0
Pronto para reproduzir