edubarbieri / proxy

Http proxy server

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Proxy server

Servidor http proxy construído com go lang com as seguintes funcionalidades:

  • Access logs dos requests processados;
  • Estatisticas do servidor:
    • Total de request atendidos;
    • Tempo de resposta médio;
    • Total de requests por http status;
    • Total de requests por url path;
  • Rate limite
    • Possibilita configurar o limite por: path de destino, ip de origem e valor de header http;
    • Utiliza redis para possibilitar que varias instancias do proxy compartilhem as informações.
  • Rotas configuráveis:
    • Configurável por path
    • Múltiplos backends
    • Possibilita configuração de middlewares por rota
  • Api Rest para administração das configurações e estatísticas

Desenho

Diagram

Iniciar todos os serviços

docker-compose.exe up --build --remove-orphans

API Rest

A documentação para api resto pode ser encontrada aqui.

Update proxy config

curl --request PUT \
  --url http://localhost:8080/proxy-admin/config \
  --header 'Content-Type: application/json' \
  --data '{
  "routes": [
    {
      "pattern": "/backend1",
      "backends": [
        "http://backend1:3000"
      ]
    },
    {
      "pattern": "/backend2",
      "backends": [
        "http://backend2a:3001",
        "http://backend2b:3002",
				"http://backend2c:3003",
        "http://backend2d:3004"
      ]
    }
  ],
  "limits": [
    {
      "id": "1",
      "requestMin": 100000,
      "targetPath": "/backend2",
      "sourceIp": true,
      "headerValue": ""
    }    
  ]
}'

Get current proxy config

curl --request GET \
  --url http://localhost:8080/proxy-admin/config

Get proxy statistics

curl --request GET \
  --url http://localhost:8080/proxy-admin/stats

Reset proxy statistics

curl --request DELETE \
  --url http://localhost:8080/proxy-admin/stats

Get backend1

curl --request GET \
  --url http://localhost:8080/backend1

Get backend2

curl --request GET \
  --url http://localhost:8080/backend2

Test

Para testes básicos de desempenho utilizei a ferramenta bombardier, disparando para uma rota configurada com 4 replicas do sample-backend, os resultados obtidos podem ser vistos a seguir.

Comando executado

bombardier -c 10 -d 10m -l http://localhost:8080/backend2

Diagram

About

Http proxy server


Languages

Language:Go 95.8%Language:JavaScript 2.1%Language:Dockerfile 1.8%Language:Shell 0.4%