Pular para o conteúdo principal

Testes da API de Auto-Discovery

Resultados dos testes para a API de Auto-Discovery que permite backends se registrarem dinamicamente.

Data do Teste: 2025-12-08 Porta da API: 8081

Endpoints da API

EndpointMétodoDescrição
/healthGETHealth check com versão e contagem de backends
/api/v1/registerPOSTRegistrar um novo backend
/api/v1/heartbeat/:idPOSTAtualizar heartbeat do backend
/api/v1/backendsGETListar todos os backends registrados
/api/v1/backends/:idGETObter detalhes de um backend específico
/api/v1/backends/:idDELETEDesregistrar um backend

Resultados dos Testes

1. Health Check

Requisição:

curl -s http://34.246.117.138:8081/health

Resposta:

{
"status": "ok",
"version": "0.2.0",
"registered_backends": 10
}

Status: OK


2. Registro de Backend

Requisição:

curl -s -X POST http://34.246.117.138:8081/api/v1/register \
-H "Content-Type: application/json" \
-d '{
"id": "pop-gru",
"app": "gru.pop",
"region": "sa",
"ip": "10.50.1.1",
"port": 80
}'

Resposta:

{
"id": "pop-gru",
"registered": true,
"message": "Backend registered successfully"
}

Todos os Registros:

IDAppRegiãoIPPortaResultado
pop-grugru.popsa10.50.1.180OK
pop-iadiad.popus10.50.2.180OK
pop-ordord.popus10.50.2.280OK
pop-laxlax.popus10.50.2.380OK
pop-lhrlhr.popeu10.50.3.180OK
pop-frafra.popeu10.50.3.280OK
pop-cdgcdg.popeu10.50.3.380OK
pop-nrtnrt.popap10.50.4.180OK
pop-sinsin.popap10.50.4.280OK
pop-sydsyd.popap10.50.4.380OK

Status: 10/10 registros bem-sucedidos


3. Listar Backends

Requisição:

curl -s http://34.246.117.138:8081/api/v1/backends

Resposta:

{
"backends": [
{
"id": "pop-gru",
"app": "gru.pop",
"region": "sa",
"ip": "10.50.1.1",
"port": 80,
"healthy": true,
"last_heartbeat_secs": 5,
"registered_secs": 120
},
{
"id": "pop-iad",
"app": "iad.pop",
"region": "us",
"ip": "10.50.2.1",
"port": 80,
"healthy": true,
"last_heartbeat_secs": 5,
"registered_secs": 118
}
// ... mais backends
],
"total": 10
}

Status: OK - Todos os 10 backends listados


4. Obter Backend Específico

Requisição:

curl -s http://34.246.117.138:8081/api/v1/backends/pop-gru

Resposta:

{
"id": "pop-gru",
"app": "gru.pop",
"region": "sa",
"ip": "10.50.1.1",
"port": 80,
"healthy": true,
"last_heartbeat_secs": 10,
"registered_secs": 125
}

Status: OK


5. Atualização de Heartbeat

Requisição:

curl -s -X POST http://34.246.117.138:8081/api/v1/heartbeat/pop-gru

Resposta:

{
"id": "pop-gru",
"status": "ok"
}

Status: OK - Heartbeat atualizado, last_heartbeat_secs resetado para 0


6. Desregistro de Backend

Requisição:

curl -s -X DELETE http://34.246.117.138:8081/api/v1/backends/test-backend

Resposta:

{
"deregistered": true,
"id": "test-backend"
}

Status: OK


Schema do Payload de Registro

Campos Obrigatórios

CampoTipoDescriçãoExemplo
idstringIdentificador único do backend"pop-gru"
appstringNome da aplicação (usado para DNS)"gru.pop"
regionstringCódigo da região (sa, us, eu, ap)"sa"
ipstringEndereço IP do backend"10.50.1.1"
portnumberPorta do backend80

Campos Opcionais (com valores padrão)

CampoTipoPadrãoDescrição
countrystringderivadoCódigo ISO do país
weightnumber2Peso no balanceamento de carga (1-10)
soft_limitnumber100Número confortável de conexões
hard_limitnumber150Máximo de conexões

Exemplo de Payload Completo

{
"id": "my-backend-1",
"app": "myapp",
"region": "eu",
"country": "DE",
"ip": "10.50.3.1",
"port": 8080,
"weight": 5,
"soft_limit": 200,
"hard_limit": 300
}

Gerenciamento de Saúde

TTL do Heartbeat

Backends são marcados como não saudáveis se não enviarem heartbeat dentro do período de TTL.

ConfiguraçãoPadrãoVariável de Ambiente
TTL do Heartbeat60 segundosEDGEPROXY_HEARTBEAT_TTL_SECS

Limpeza Automática

  • Backends que perdem heartbeat são marcados healthy: false
  • Tarefa em background remove backends obsoletos periodicamente
  • Backends não saudáveis são excluídos do balanceamento de carga

Mantendo Backends Saudáveis

# Loop de heartbeat simples (a cada 30 segundos)
while true; do
curl -s -X POST http://hub:8081/api/v1/heartbeat/my-backend-1
sleep 30
done

Integração com DNS

Backends registrados via API podem ser resolvidos através do DNS:

# Registrar backend com nome do app
curl -X POST http://hub:8081/api/v1/register \
-H "Content-Type: application/json" \
-d '{"id":"my-eu-1","app":"myservice","region":"eu","ip":"10.50.3.1","port":8080}'

# Resolver via DNS
dig @hub -p 5353 myservice.internal +short
# Retorna: 10.50.3.1

Nota: Backends registrados via API são armazenados em memória (DashMap). Para resolução DNS, backends também devem estar no routing.db.


Respostas de Erro

400 Bad Request

{
"error": "Missing required field: id"
}

404 Not Found

{
"error": "Backend not found",
"id": "unknown-backend"
}

409 Conflict

{
"error": "Backend already exists",
"id": "existing-backend"
}

Monitorando Backends Registrados

Via API

# Contar backends
curl -s http://hub:8081/api/v1/backends | jq '.total'

# Listar backends saudáveis
curl -s http://hub:8081/api/v1/backends | jq '.backends[] | select(.healthy==true) | .id'

# Encontrar backends por região
curl -s http://hub:8081/api/v1/backends | jq '.backends[] | select(.region=="eu")'

Via Logs

# Observar eventos de registro
sudo journalctl -u edgeproxy -f | grep -i "register\|heartbeat"

Resumo dos Testes

TesteResultado
Health CheckOK
Registro (10 backends)OK
Listar BackendsOK
Obter Backend EspecíficoOK
Atualização de HeartbeatOK
DesregistroOK

Total: Todos os testes da API passando