O que determina um limite prático no número de blocos de servidores na configuração do Nginx?

4

Eu estou tentando descobrir se uma configuração Nginx consistindo apenas de blocos de servidores simples é viável. Cada bloco serve um subdomínio e direciona o subdomínio para outro URL. É claro que o máximo em um contexto específico depende dos parâmetros, por isso estou mais interessado nos fatores que trabalham para determinar um limite prático.

Por exemplo, o custo extra de um bloco de servidor adicional (em termos de sobrecarga de memória) é sempre constante? O custo de despachar para um bloco de servidor específico para manipular a solicitação é uma constante, ou é uma função do número de blocos de servidores na configuração?

Um exemplo de bloco de servidor seria:

server {
    server_name subdomain.example.com;
    return 301 http://some.other.example.org/subdomain;
}

Quantos desses eu posso ter, digamos, por gigabyte de memória por núcleo ou outros parâmetros relevantes?

Obrigado.

    
por Sinan Ünür 13.08.2014 / 19:04

1 resposta

6

O maior fator que afeta quantos server_name s você pode razoavelmente ter é o tamanho do cache da sua CPU (e velocidade, é claro).

Primeiro, o nginx armazena todos os server_name s que você define em três tabelas hash (dependendo da se você usou curingas no nome) por par de IP / porta em que nginx listen s está ativado. O tamanho dessas estruturas é otimizado para ser um múltiplo do tamanho da linha de cache da CPU, e o nginx pretende ser capaz de combinar o server_name para uma solicitação de entrada inteiramente do cache da CPU sem ter que ir para a RAM (relativamente) muito mais lenta.

Fora da caixa, o nginx configura tabelas de hash para nomes de servidor com 512 entradas de 32 bytes cada. Isso chega a 16 KiB e cabe facilmente no cache L1 da CPU, ou pelo menos no cache L2. E mesmo se você precisar expandi-lo, ele ainda deve ser pequeno o suficiente para caber no cache na maior parte do tempo.

Esta estratégia sugere que você deve se esforçar para manter a lista de nomes no mínimo.

Por exemplo, mesmo que seja "mais lento" para corresponder a uma entrada curinga, como .example.com , pode ser mais rápido, em média, do que tentar corresponder a várias centenas de subdomínios de example.com definidos explicitamente.

Veja também a documentação do nginx em otimização de server_name s .

    
por 15.08.2014 / 02:30

Tags