Protegendo o Magento contra situações de alto tráfego

Protegendo o Magento contra situações de alto tráfego

Olá, tenho um servidor Apache 2.2 com scripts php (magento).

em tempos normais, uma página php é renderizada em 1-2 segundos, o que é bom.

Às vezes, com tráfego intenso ou bots de aranha rudimentares, todos os Apache-Slots são bloqueados.

As solicitações únicas são muito lentas e usam cada vez mais memória até que o mysql chama o oom-killer, que mata meu necessitado Tomcat.

Primeiro tentei o mod_evasive. Mas se eu configurá-lo muito rígido, não consigo navegar rapidamente, se eu configurá-lo muito solto, as solicitações podem chegar mais rápido e então podem ser processadas.

O problema são os arquivos php. Outros recursos, como imagens, etc., não obstruirão os slots.

Em segundo lugar, tentei limitá-lo diminuindo MaxClients. Mas agora um cliente pode obstruir todos os slots.

Alguma idéia de como limitar o máximo de conexões por cliente ou melhor o máximo de scripts php simultâneos por ip...

Como outros clientes Apache são configurados para evitar mais solicitações do que podem processar sem favorecer nenhum cliente?

Responder1

Coloque seu site atrás de um CDN origin-pull (nuvemflarevem à mente como uma opção, existem outras.)

em tempos normais, uma página php é renderizada em 1-2 segundos, o que é bom.

Não, não é.

Otimize seu código para que não demore atédoissegundos para gerar a página.

Então armazene em cachetodosas coisas.

  • Solicitações de página em cache comVerniz
  • Pesquisas de banco de dados em cache com Memcached.
  • Armazene imagens em cache em um CDN.
  • Cache de nível PHP com APC ou eAccelerator (ou cache de opcode semelhante)
  • Armazene páginas inteiras em cache em um CDN também.

Se ainda não o fez, transforme seu servidor de banco de dados em um servidor separado, forneça a ele uma carga métrica de memória e discos super-rápidos e, em seguida, armazene em cache suas tabelas. Magento é uma vadia quando se trata de junções e assim por diante, então você precisará que seu servidor de banco de dados seja extremamente rápido.

Para que, quando um usuário visualizar seu site, o conteúdo seja retirado de um cacheem algum lugare não precisa ser geradotodotempo.


Tomei a liberdade de usar o Yslow no seu site. Aqui está um resumo das descobertas (embora você deva fazer isso sozinho.)

  1. Faça menos solicitações HTTP. Basicamente, você deve combinar seus arquivos javascript e CSS em um, para reduzir a sobrecarga de ter que fazer várias solicitações.
  2. Use uma rede de distribuição de conteúdo (CDN). Eu já disse isso ^^acima^^, mas Yslow me disse que existem60componentes estáticos que não estão em um CDN. 1,4 MB deles vêm de www.brainyoo.de. O que me leva a ..
  3. Mova ativos para vários domínios sem cookies.60 ativos estão sendo carregados do mesmo domínio que o restante do site. O que significa que o navegador tem que esperar que cada um carregue antes de carregar o próximo. Uma maneira comum de contornar isso é colocar ativos estáticos em domínios separados e sem cookies (para que a solicitação seja menor, mais rápida e não contenha as informações do cookie).
  4. Mova o Javascript para o final do documento. Considerada a melhor prática para sites rápidos e escaláveis.
  5. Minimize Javascript e CSS. Seriamente. Você está enviando quase um megabyte de JS e CSS, que pode ser reduzido e...
  6. Compacte componentes com Gzip.Existem 39 componentes de texto simples que podem ser compactados.
  7. Adicione cabeçalhos Expires. Existem 63 arquivos estáticos sem datas de expiração futuras, portanto, eles não estão sendo efetivamente armazenados em cache pelo navegador.

Total YSlow Nota D. Estou começando a me perguntar se seus problemas não são inteiramente do lado do servidor, mas poderiam ser uma boa brincadeira e aumentar sua classificação YSlow. Porque assim, a) menos tráfego servido pelo seu servidor Apache. b) É mais rápido de carregar, para que seus visitantes não bloqueiem um processo Apache por tanto tempo.

Responder2

geralmente, se o magento for executado lentamente ou matar seu servidor de vez em quando, seu servidor funcionará melhor com mais memória RAM/potência de CPU. você pode ajustar seu servidor para executar o magento sem problemas, mas leva a) algum tempo eb) os recursos necessários (do lado do servidor).

quanto ajuste de db você fez? magento é PITA, mas pode ser configurado para ser rápido, com RAM suficiente.

use uma ferramenta comomysql_tuneroucartilha de ajuste do mysqlpara ajustar seu banco de dados.

e use o máximo de cache possível. não me lembro, se o APC é compatível; memcache é melhor.

você também deve ficar de olho no IOWAIT, que é uma dica para um desempenho muito ruim do HD, que pode ter diferentes motivos.


EDITAR:

Como outros clientes Apache são configurados para evitar mais solicitações do que podem processar sem favorecer nenhum cliente? / Quero saber como outros apaches lidam com a situação quando recebem mais solicitações do que podem processar

normalmente você dimensionará sua configuração, dependendo do tráfego esperado. se o seu servidor cair quando spiders e crawlers o atingirem, ou você tem alguns scripts com desempenho muito ruim ou seu servidor é muito pequeno.

quando espero 1.000 usuários em meu servidor, uso um servidor que pode lidar com 5.000 clientes (e monitoro error.log para max_clients alcançados)

a limitação de taxa é possível, mas você terá a mesma experiência que com mod_evasive. isso realmente ajuda em termos como DDOS, mas NÃO se você precisar ajustar sua configuração.

informação relacionada