Eu vou morder.
Essa primeira resposta do servidor da web deve chegar a menos de 200 ms no Reino Unido.
No momento, não há interface para o site, ele é livre de estilos e imagens.
Você não alcançará esses números sem a ajuda do verniz ou do FPC (ou de ambos). Eu certamente espero que esse número também não precise incluir conteúdo estático (sempre que você decidir adicioná-lo) - como é quase impossível de alcançar (exceto por ter pouca ou nenhuma imagem / js / css).
Estamos chegando a 800ms.
Também está sendo executado no Nginx com Verniz
Você tem o Varnish configurado errado.
Uma instalação do Varnish configurada corretamente fornecerá <100ms de tempo de carregamento da página (vemos mais perto de <10ms).
De fato, para o Magento, você deve esperar algo assim,
Quando um cliente não está logado ...
Ou seja. Não ter criado uma sessão única (adicionar ao carrinho / lista de desejos, fazer login etc.)
--1.2s--------0.8s-----------------0.6s----------------0.1s--------------0.08s----
Uncached Mage default cache Partial FPC cache Total FPC cache Varnish
Quando um cliente está logado ...
Ou seja. Tendo criado uma sessão única (logado, itens no carrinho etc.). Neste ponto, o verniz provavelmente estará desativado. E se você optou por usar ESIs - dependendo das chamadas reversas, ele pode manter um tempo de carregamento de página semelhante ao cache do FPC (devido às despesas gerais da inicialização) - ou aumentar o tempo de carregamento da página além de ser desanexado.
--1.4s--------0.8s-----------------0.6s--------------
Uncached Mage default cache Total FPC cache
Não é um caso de ajuste de verniz - é um caso de - "você não está realmente armazenando nada" .
Os arquivos de configuração ideais do servidor Magento
Não há um, bem, não exatamente.
Operamos mais de 400 servidores, todas lojas Magento - de tamanhos e capacidades variados. E é raro que os arquivos de configuração que temos em um - correspondam aos de outro. Isso ocorre porque nem todas as empresas são iguais.
Os gargalos podem se formar devido a vários motivos diferentes:
- Elevado número de simultaneidade de visitantes, com sessões ativas
- Vítimas de bots de rastreamento "ruins", gerando carga necessária e inestimável
- Alta proporção de ocorrências de navegação em camadas
- Elevado número de consultas de pesquisa
- Alto volume de transações por hora
- Modelo mal construído
- Muitas / lentas / grandes extensões de terceiros
- Links de entrada desatualizados, levando a alta proporção de 404 ocorrências
- Capacidade da interface de rede no limite
- Catálogo grande / complexo (muitos produtos / categorias / atributos)
Portanto, com lojas em todo esse espectro, cada uma tem uma abordagem diferente para obter um desempenho ideal.
Resolver os problemas descritos acima; deliberadamente evitaremos apenas declarar "mais / melhor hardware"
- Use um FPC além do verniz
- Filtre / bloqueie bots defeituosos na borda da rede - ou redirecione todas as solicitações para o Varnish, independentemente do estado / URL do cookie
- Altere a navegação em camadas do estoque para SOLR, torne os filtros de navegação em camadas dependentes
- Alterar a pesquisa de estoque para SOLR
- Distribua a carga do MySQL na configuração Master / Slave - faça isso somente quando a carga de navegação garantida for absorvida pelo Varnish / FPC
- Recrie o modelo
- Retire-os
- Monitore os logs de acesso continuamente e reescreva os URLs no Nginx / Varnish antes da entrega. Se estiver fazendo isso no nível do Nginx - verifique se o Varnish está armazenando em cache os redirecionamentos 301/302.
- Divida o conteúdo estático em uma CDN ou melhore a conectividade
- Adicione mais hardware (bem, tivemos que dizer isso em algum momento)
Portanto, com isso em mente - você verá que provavelmente não haverá um arquivo de configuração do Nginx, arquivo de configuração do PHP fcgi pool, arquivo de configuração do MySQL ou arquivo de configuração do Varnish que serão os mesmos. Junte isso ao hardware que muda automaticamente; memória disponível, desempenho de E / S (HDD e rede) e CPU - e você descobrirá que existem variações sutis que levam ao ganho de desempenho de 400% que você deseja - mas nenhuma resposta rápida você encontrará facilmente on-line.
Você pode copiar e colar o white paper Magento patrocinado pelo Peer 1 sobre desempenho (não recomendamos); espero que as configurações não excedam a memória disponível, os limites de encadeamento, os estados TCP / IP, a capacidade de E / S e levem a um desempenho menor do que uma configuração básica do Apache / mod_php.
Então vamos continuar.
A pilha de servidores Magento ideal
É mais provável que você se aproxime da realidade. Um bom exemplo para demonstrar isso é mostrar como um Magento OS dedicado está configurado, o MageStack
Pegue os subcomponentes separados e você terá uma lista do software mais ótimo / crítico, quando configurado corretamente , para executar uma loja Magento. Notavelmente:
Firewall, filtro DOS, Balanceador de Carga, Verniz, Nginx, PHP, Redis, Memcached, MySQL
Então, quando você pergunta:
Qual é a melhor configuração do servidor Magento?
Qual é o seu objetivo exatamente?
- Alta disponibilidade
- Confiabilidade
- Simplicidade de administração
- atuação
- Escalabilidade
Chega de palestras, como faríamos isso
Para espelhar parcialmente a resposta dada na falha do servidor em uma linha semelhante. Você tem 3 servidores à sua disposição - então, primeiro oriente-os da melhor maneira possível. Evitaremos uma solução altamente disponível, pois está muito além do escopo desta resposta.
Os subcomponentes necessários para uma configuração de vários servidores são:
- Firewall
- Balanceador de carga
- Servidor web
- Servidor MySQL
- Armazenamento comum
Então, vamos propósitos múltiplos de alguns dos sistemas. A conformidade com o PCI-DSS determina uma função para cada servidor. Assim, com 5 funções e 3 servidores - você será violado imediatamente. O MageStack contorna isso usando a virtualização - você pode fazer o mesmo.
Servidor 1: Balanceador de carga + servidor Web
Servidor 2: servidor Web
Servidor 3: servidor de banco de dados
Sem largura de banda de rede de baixa latência e significativa (> 1 Gbps, <125 µs), em vez de ter armazenamento comum - é melhor você simplesmente armazenar o diretório raiz da loja em cada máquina e replicar os dados, em tempo real usando ionotify
ou diminuindo usando um cron
trabalho. Mais uma vez, evitaremos sistemas de arquivos de rede como NFS ou dispositivos de bloco replicados como Gluster ou DRBD - pois é necessário um grande ajuste e largura de banda de rede decente.
O verniz precisa ficar o mais próximo possível da frente. Mas o Varnish não pode descriptografar o SSL. Então combine-o com um terminador SSL; Nginx, Pound, Stunnel, Stud etc. O balanceador de carga embutido no Varnish não é ótimo - mas seria adequado para uma configuração de 2 servidores.
Nginx + PHP-FPM é bom, mas não beba muito do kool-aid Nginx. Ele terá um desempenho quase idêntico a uma configuração tradicional do Apache / mod_php, aqui estão algumas boas leituras sobre por que não usar o Nginx . O Nginx é bom, muito bom, mas certamente não é um gargalo de uma loja Magento - e dada a sua complexidade e falta de suporte nativo ao Magento. A maioria dos administradores de sistema iniciantes se beneficiaria do uso do Apache / mod_php sobre qualquer outra coisa. Pode parecer uma recomendação arcaica sobre o uso do PHP-FPM - mas nossos testes de desempenho mostraram que o desempenho é apenas 7% mais rápido com a solução Nginx - quando configurado corretamente. O ajuste e a experiência necessários para uma configuração Nginx / PHP-FPM confiável e de alto desempenho são bastante vastos para que ele supere o Apache / mod_php. Qualquer que seja a sua escolha, é a sua chamada.
O servidor de banco de dados é simples, MySQL. Porém, como mencionado anteriormente, se você possui um site com alta conversão, é aconselhável uma configuração Master / Slave. Se você deve seguir essa abordagem, pode ser determinado lendo este artigo .
Em seguida, seu back-end periférico armazena em cache Memcached e Redis. Em lojas menores, armazenar sessões em uma instância do Memcache e o cache de back-end rápido em outra trará bons benefícios de desempenho. Não defendemos o armazenamento das tags de cache em um back-end lento - pois isso causa mais problemas do que gera. Portanto, com uma configuração do Memcached, você terá que perder a marcação de cache . Em vez disso, usamos uma configuração como esta .
O Redis não é nativo do Magento, mas com a extensão de Colin Mollenhour - é uma solução melhor que o Memcache, suporta tags de cache, armazenamento de sessões e até armazenamento persistente de cache - não é tão volátil quanto o Memcache . Mas tem suas desvantagens. Descobrimos em lojas de produção em larga escala (> 500 pedidos / hora,> 30k exclusivos / hora) que o cache (e as tags) podem ser preenchidos muito rapidamente e, uma vez atingido o ponto de saturação, o mecanismo LRU falha um pouco ( apesar das configurações diferentes) e causa um grande gargalo imediato. Portanto, é prudente remover regularmente registros antigos manualmente.
Então, qual hardware deve ser usado para quê?
Servidores Web: CPU mais rápida, a maioria dos núcleos de CPU, proporção de 2 GB de RAM / núcleo de
servidor DB: CPU rápida, I / O de disco mais rápida, a maioria de RAM
Portanto, ao realizar várias finalidades em suas três máquinas, o melhor layout seria:
Servidor 1: Terminador SSL -> Verniz -> Nginx / Apache>
Servidor PHP 2: Nginx / Apache> PHP, Redis, (MySQL Slave)
Servidor 3: MySQL
Quanto à configuração específica de cada aplicativo. Bem, isso depende das suas especificações de hardware, da complexidade da sua loja, do seu tipo e natureza do visitante e do grande volume de visitantes.