O roteamento de uma solicitação HTTP de um cliente para o serviço correto em um servidor envolve várias etapas e depende muito da arquitetura do servidor. Aqui está um colapso das abordagens comuns:
1. Balanceador de carga (geralmente a primeira parada): * Muitos sistemas usam um balanceador de carga como ponto de entrada. Este é um servidor dedicado que distribui solicitações recebidas em vários servidores de back -end (os serviços reais). O balanceador de carga decide qual servidor encaminhar a solicitação com base em fatores como carga do servidor, verificações de saúde e potencialmente solicitar características (por exemplo, usando uma técnica chamada roteamento com reconhecimento de conteúdo).
* O balanceador de carga normalmente funciona na camada de rede (camada 4) ou na camada de aplicação (camada 7). Os balanceadores de carga da camada 4 analisam coisas como endereços IP e portas, enquanto os balanceadores de carga da camada 7 inspecionam a própria solicitação HTTP (cabeçalhos, URL etc.) antes de tomar uma decisão de roteamento.
2. Proxy reverso (geralmente após o balanceador de carga): * Um proxy reverso fica na frente de um ou mais servidores de back -end. Ele recebe solicitações do balanceador de carga (ou diretamente dos clientes se não houver balanceador de carga) e os encaminha para o serviço apropriado.
* Os proxies reversos geralmente lidam com tarefas como armazenamento em cache, terminação SSL (descriptografando o tráfego HTTPS) e a modificação de solicitação antes de passar a solicitação para o back -end.
* Nginx e Apache são exemplos populares de proxies reversos.
3. Roteamento do lado do servidor (dentro do aplicativo): * Quando a solicitação atingir o servidor (depois de passar por um balanceador de carga e proxy reverso), o próprio servidor precisa determinar qual serviço ou aplicativo específico deve lidar com ele. Isso geralmente é feito usando um dos seguintes métodos:
* Caminho de URL: O método mais comum. O servidor examina o componente do caminho da URL (a peça após o nome do domínio). Por exemplo, `/usuários/123` pode ser roteado para um serviço de usuário, enquanto`/produtos/pesquisa` pode ir a um serviço de catálogo de produtos. Estruturas como Express.js (Node.js), Spring Boot (Java) e Django (Python) fornecem mecanismos para definir rotas com base em caminhos de URL.
*
nome do host/domain: Diferentes serviços podem ser implantados em diferentes subdomínios ou nomes de host (por exemplo, `users.example.com` vs.` products.example.com`). O servidor pode usar o nome do host para determinar o serviço apropriado.
* roteamento baseado em cabeçalho: A solicitação pode incluir cabeçalhos contendo informações sobre o serviço pretendido. O servidor pode verificar esses cabeçalhos para rotear a solicitação de acordo.
*
Solicitar conteúdo: Em alguns casos, o conteúdo do próprio corpo da solicitação pode determinar qual serviço deve lidar com ele. Isso é menos comum porque requer mais processamento e pode ser menos eficiente.
4. Descoberta de serviço (para arquiteturas de microsserviços): * Nas arquiteturas de microsserviços, os serviços são frequentemente implantados e dimensionados dinamicamente. Mecanismos de descoberta de serviços, como cônsul, etcd ou kubernetes, ajudam a localizar as instâncias atuais de cada serviço. Quando uma solicitação entra, o mecanismo de roteamento (por exemplo, um proxy reverso ou gateway da API) consulta o sistema de descoberta de serviço para encontrar o endereço da instância de serviço apropriada e encaminhar a solicitação.
em resumo: O processo é uma cadeia de componentes potencialmente múltiplos. Uma solicitação normalmente flui como este:
Cliente -> (Balancero de carga) -> (proxy reverso) -> servidor -> (Descoberta de serviço, se aplicável) -> Serviço específico
A implementação exata depende muito da complexidade do sistema e das tecnologias específicas usadas. Aplicativos simples podem envolver apenas o roteamento do caminho da URL em um único servidor, enquanto os sistemas em larga escala usam uma combinação de balanceadores de carga, proxies reversos, descoberta de serviços e regras de roteamento sofisticadas.