Giter Site home page Giter Site logo

proxy's Introduction

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.