Skip to the content.

🚀 Projeto: Nginx com Balanceamento de Carga e Visualização em Tempo Real

🎯 Objetivo

Criar um ambiente que simula um sistema web real, demonstrando visualmente como o Nginx atua como um Reverse Proxy (Proxy Reverso) e distribui a carga (Load Balancing) entre duas APIs de backend idênticas.

🛠️ Tecnologias Utilizadas


📁 Parte 1: Estrutura do Projeto

Garanta que seu projeto tenha a seguinte estrutura de pastas e arquivos:

projeto-nginx-visual/
├── api-01/
│   ├── index.js
│   ├── package.json
│   └── Dockerfile
├── api-02/
│   ├── index.js
│   ├── package.json
│   └── Dockerfile
├── nginx/
│   ├── nginx.conf
│   └── Dockerfile
├── visualizer/
│   ├── index.html
│   └── chart.js
├── docker-compose.yml
└── load-test.js

⚙️ Parte 2: Criando as APIs de Backend (Node.js)

1. Arquivos da api-01/

2. Arquivos da api-02/

Copie os arquivos da api-01/ para api-02/ e mude APENAS UMA LINHA no api-02/index.js e o Dockerfile para refletir a api-02.


proxy Parte 3: Configurando o Nginx


📊 Parte 4: Criando o Dashboard de Visualização

  1. Obtenha o Chart.js (Versão Correta): Crie o arquivo visualizer/chart.js. Abra o link abaixo, copie todo o conteúdo e cole no seu arquivo chart.js.

    • Link: https://cdnjs.cloudflare.com/ajax/libs/Chart.js/4.4.1/chart.umd.min.js
  2. visualizer/index.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Visualizador de Carga Nginx</title>
        <script src="chart.js"></script>
        <style>
            body { font-family: sans-serif; display: grid; place-items: center; background: #f4f4f4; }
            #chart-container { width: 500px; }
            h1 { color: #333; }
            h2 { margin: 5px 0; }
            #api-01 { color: #36A2EB; }
            #api-02 { color: #FF6384; }
        </style>
    </head>
    <body>
        <h1>Dashboard de Balanceamento de Carga</h1>
        <div id="chart-container">
            <canvas id="loadChart"></canvas>
        </div>
        <h2 id="api-01">API-01: 0</h2>
        <h2 id="api-02">API-02: 0</h2>
        <h3>Total: <span id="total">0</span></h3>
    
        <script>
            const ctx = document.getElementById('loadChart').getContext('2d');
            const counters = { 'API-01': 0, 'API-02': 0 };
            let total = 0;
    
            const h2_api1 = document.getElementById('api-01');
            const h2_api2 = document.getElementById('api-02');
            const span_total = document.getElementById('total');
    
            const loadChart = new Chart(ctx, {
                type: 'pie',
                data: {
                    labels: ['API-01', 'API-02'],
                    datasets: [{
                        data: [0, 0],
                        backgroundColor: ['#36A2EB', '#FF6384']
                    }]
                },
                options: { responsive: true, animation: { duration: 500 } }
            });
    
            async function fetchData() {
                try {
                    const response = await fetch('/api');
                    if (!response.ok) throw new Error('Falha na rede');
                    const data = await response.json();
                        
                    counters[data.servidor]++;
                    total++;
    
                    h2_api1.innerText = `API-01: ${counters['API-01']}`;
                    h2_api2.innerText = `API-02: ${counters['API-02']}`;
                    span_total.innerText = total;
    
                    loadChart.data.datasets[0].data = [counters['API-01'], counters['API-02']];
                    loadChart.update();
                } catch (error) {
                    console.error('Erro ao buscar API:', error);
                }
            }
            setInterval(fetchData, 200);
        </script>
    </body>
    </html>
    

🐳 Parte 5: Orquestrando com Docker Compose


⚡ Parte 6: Script de Teste de Carga (k6)


🏁 Parte 7: Executando o Projeto!

1. Instale o k6: Siga as instruções em k6.io para o seu sistema operacional.

2. Suba os Serviços: No terminal, na raiz do projeto, execute:

docker-compose up --build

Isso irá construir as imagens e iniciar os 3 contêineres (api-01, api-02, nginx).

3. Acesse o Visualizador: Abra seu navegador e vá para: http://localhost

Você verá o dashboard. Ele já começará a fazer requisições lentamente, e o gráfico de pizza deve mostrar uma divisão de ~50% para cada API.

4. Execute o Teste de Carga:

K6 Load Testing for API on Windows 11 🚀

K6 é uma poderosa ferramenta open-source para testes de carga de APIs. Abaixo estão os passos para configurar e executar o K6 no Windows 11.

1. Instalar o K6 no Windows 11 🖥️

  1. Abra um terminal (Prompt de Comando, PowerShell ou Bash).

  2. Use o Gerenciador de Pacotes do Windows (Winget) para instalar o K6:

    winget install k6 --source winget
    

Em outro terminal, execute o k6:

k6 run load-test.js

5. Observe o Dashboard: Volte para o navegador. Você verá os números no dashboard subindo drasticamente rápido. O gráfico de pizza se ajustará em tempo real, mas deve sempre se manter próximo de 50/50, provando que o Nginx está distribuindo a carga.

6. Para Desligar: Pressione Ctrl + C no terminal onde o docker-compose está rodando e depois execute:

docker-compose down