it-swarm-pt.tech

Quão bem o WordPress escala?

Com o novo WordPress e seus novos recursos, parece que o WordPress é capaz de muito mais do que um simples mecanismo de blog. Mas como o WordPress escala sendo usado por 10k -> 100k usuários por dia?

Com isso, muitos usuários terão uma boa estratégia de cache, mas como o WordPress é desenvolvido para ajudar, facilitando isso e dando a você o controle que você precisa. Fx sendo capaz de armazenar em cache parte de uma página e apenas renderizar peças customizadas pelo usuário, suportar configuração do banco de dados mestre/escravo e coisas assim?

34
googletorp

Claramente nada escala, bem como arquivos estáticos servidos por um servidor web rápido e qualquer CMS que tenha que descobrir o que carregar e depois carregá-lo também não funcionará, WordPress ou outros. Um dos problemas é o número de consultas de banco de dados necessárias por solicitação de URL e minha experiência de 2 anos anteriores trabalhando exclusivamente com o Drupal e agora com mais de 2 anos com o WordPress é que o WordPress é muito melhor nesse departamento.

Dito isso quase nada com qualquer poder vai escalar "out-of-the-box" é tudo sobre o que você pode fazer à medida que sua escalabilidade precisa crescer?

No low end de "lotes de tráfego"existem ótimos plugins de cache e integrações com CDNs baratas você pode fazer um ótimo trabalho em um orçamento sem TI e com baixo orçamento de hospedagem. Aqui estão algumas outras perguntas e respostas para analisar:

Existem opções para criação de perfil para identificar gargalos de desempenho:

Uma vez identificados os gargalos, você pode fazer otimização localizada coisas como API de Transientes. Esta sessão de perguntas e respostas fornece um exemplo que pode ser otimizado usando a API de transientes e mostra como:

Se você realmente quiser tire as grandes armas você pode configurar Memcached, HyperDB, Nginx e/ou mais para acelerar as coisas (parece que o último é realmente evoluindo para obter uma incrível escalabilidade do WordPress):

E finalmente há emergindo webhosts focados no WordPress especializados em performance como WP Engine , ZippyKid e outros:

Então as boas novas são todas as escalas muito bem; da extremidade mais baixa, fácil e gratuita, com complexidade técnica e os custos crescem apenas à medida que o tráfego cresce significativamente. Comece pequeno com o WordPress e vai ser ótimo. Se o seu tráfego crescer e você estiver monetizando, mesmo que razoavelmente bem, você perceberá que o custo é muito grande, conforme você precisar.

Pelo menos IMO. :)

37
MikeSchinkel
  1. Não espere muito de hospedagem compartilhada - não culpe o WordPress por lentidão se você estiver em um Host compartilhado. Hosts compartilhados podem empinar milhares de contas em um servidor. Assim, você pode passar o dia todo otimizando uma conta de US $ 10/mês e isso não importa. Tenha cuidado com os chavões de marketing - só porque diz "nuvem" não significa que você não está compartilhando um servidor com 100 ou 1000 pessoas.

  2. Eu não acho que os plugins de cache são necessários neste momento. Se você olhar para o código-fonte WP, já existe um cache avançado embutido no núcleo. Um cache do cache do cache do cache - cuidado, isso pode ser contraproducente.

  3. A principal coisa que está atrasando você é as consultas lentas do MySQL e o WordPress pronto para uso não deve causar problemas aqui. No entanto, eu tive que "LIMIT" minhas consultas de comentários porque eu tinha mais de 50.000 comentários. (Isso já foi corrigido?) Além disso, se você estiver fazendo algo atípico (como milhares de categorias?), Isso também pode ser um problema.

  4. Eu uso um Linode 512 com NginX e "top" mostra PHP e NginX fazendo seu trabalho em menos de 1/100 de segundo por requisição. Quase todo o tempo da CPU está ligado ao MySQL. Você poderia servir 1 milhão de páginas por mês com um Linode de US $ 20, mas assim que você começar a adicionar plugins e fotos, eu acho que você vai precisar de um Linode "1GB". Do meu ponto de vista, é praticamente linear: se as exibições de página duplicarem, apenas o dobro do tamanho do seu Linode.

Disclaimer: Eu não trabalho para o Linode.


Atualização (~ 2 anos depois) desde que você quer armazenar em cache partes de uma página com PHP, aqui está uma solução simples que eu uso que é surpreendentemente rápida. Estou fazendo cache de várias partes/partes separadas por página em 1/100 de segundo. Parece que um ramdisk pode tornar isso ainda mais rápido, mas é muito rápido para as minhas necessidades:

$cache_file = "./cache/portion-1". $since; // maybe round() this $since timestamp
$cache_life = 1000; // seconds to keep this cached
$filemtime = filemtime($cache_file);  // returns FALSE if file does not exist
if (!$filemtime or (time() - $filemtime >= $cache_life)) {

    // heavy lifting starts
    $output = 'Heavy!';
    // heavy lifting ends

    if (!file_put_contents($cache_file,$output,LOCK_EX)) { echo 'error'; } // save the cache    
    echo $output;

} else { 

    // load from cache
    $output = file_get_contents($cache_file); 
    echo $output;        
} 
4
PJ Brunet

Em última análise, há três coisas que reduzem a velocidade do WordPress em escala, e elas se resumem a isso:

  • Hosting stack - você precisa de um bom Host com o software mais recente - PHP 7, Nginx, Varnish, Redis, fail2ban e PerconaDB são todas boas escolhas
  • Nenhuma varredura de tabela - muitos plugins são escritos por codificadores amadores que nem sequer sabem o que é uma varredura de tabela. Duas coisas são necessárias para evitar varreduras de tabela - um índice utilizável e uma consulta escrita de tal forma que possa usar o índice
  • Não ou poucas consultas SQL dentro de PHP loops - alguns códigos de plugins só foram testados em sites minúsculos, e por uma razão ou outra irão fazer um loop em cada produto em seu banco de dados e fazer uma nova chamada SQL para cada produto /postar. Você deseja, idealmente, menos de 100 consultas SQL por página - parece muito, mas não é verdade e com <100 você obterá um TTFB de cerca de 200 ms sem cache.

Depois de definir o acima, você poderá adicionar o armazenamento em cache. Verniz, CDNs, caching de páginas, etc.

Se você precisar dimensionar, você pode criar um cluster usando o PerconaDB XtraDB para o banco de dados e o Unison para os arquivos. Dessa forma, você pode ter 1 nó como seu wp-admin e cron runner, e os outros nós servindo o tráfego da web por trás de um balanceador de carga.

0
Dave Hilditch