Pergunta

Estamos trabalhando em um site para um cliente que (pela primeira vez) é esperado para obter uma boa quantidade de tráfego em um dia. Há comunicados de imprensa, as pessoas estão blogando sobre ele, etc. Estou um pouco preocupado que nós vamos cair de nossa face no dia um. Quais são as principais coisas que você iria olhar para assegurar (com antecedência, sem dados de tráfego real) que você possa ficar em pé depois de um grande lançamento.

Detalhes: Esta é uma pilha L/A/M/PHP, usando um framework MVC desenvolvido internamente. Este está sendo lançado em um servidor, com o Apache e MySQL tanto nele, mas podemos quebrar que até se for necessário. Nós já estão instalando memcached e fazer o máximo de cache de nível PHP como podemos pensar. Algumas das páginas são bastante consulta intensiva, e nós estamos usando Smarty como nosso modelo de motor. Tenha em mente que não há tempo para mudar qualquer desses aspectos principais - esta é a apenas a configuração. Que tipo de coisas que devemos prestar atenção?

Foi útil?

Solução

Para preparar ou lidar com um pico (ou pico) desempenho, gostaria de primeiro determinar se você está pronto através de alguns testes de desempenho simples com algo como jmeter .

É fácil de configurar e começar e lhe dará início métricas se você vai lidar com uma carga de pico esperado.

No entanto dadas as limitações de tempo, outros passos a tomar seria a de preparar versões estáticas de conteúdo que irá atrair a maior atenção (tais como comunicados de imprensa, se o seu dia de lançamento). Também garantir que você está fazendo o melhor uso do cache do lado do cliente (1 solicitação menos para o servidor pode fazer toda a diferença). A web já projetado para altíssima escalabilidade e eficaz cache de conteúdo uso é seu melhor amigo nessas situações.

Há um excelente podcast sobre alta escalabilidade em rádio engenharia de software no projeto do novo Guardião website quando as coisas se acalmarem.

boa sorte no lançamento

Outras dicas

Meça primeiro, otimizar então. Você já fez alguma loadtesting? Onde estão os gargalos?

Uma vez que você sabe que seus gargalos, então você pode inteligentemente decidir se você precisa caixas DB adicional ou caixas web, agora você tinha acabado de ser adivinhando.

Além disso, como é que os resultados loadtesting comparar com o seu tráfego esperado? Você pode lidar com 2x o tráfego esperado? 5x? Quão fácil / rápido você pode adquirir e liberar hardware extra? Tenho certeza que o requisito de negócio é para não falhar durante o lançamento, por isso certifique-se que muitos da capacidade disponível, você sempre pode liberá-lo depois, quando a carga se estabilizou, e você sabe o que você precisa.

eu iria pelo menos fator para fora todo o conteúdo estático. Setup outro vhost em outro lugar e carregar todos os gráficos / css / js para ele. Você pode comprar alguns ciclos extra offloading a porção de que tipo de conteúdo. Se o seu realmente interessado pode inscrever e utilizar um serviço de distribuição de conteúdo. Há lotes agora semelhantes a Akamai e muito barato.

Outra idéia poderia ser a de utilizar apache mod_proxy para manter a saída página gerada por um período específico de tempo. APC também seria bastante útil .. Você poderia empregar captura buffer de saída + a última vez modificada dos dados na página, e usar a versão APC em cache. Se a página não é mais válido, você regenerar e armazenar em APC novamente.

Boa sorte, vai ser uma experiência de aprendizagem!

Tenha um período beta onde você permitir que em tantos usuários quanto você pode manipular, medir o desempenho do seu site, trabalho fora erros antes de ir ao vivo.

Você pode controlar o número de usuários explicitamente em uma versão beta privada, ou uma versão beta do Google em estilo semi-público, onde cada usuário tem um número de referências que eles podem oferecer aos seus amigos.

eu, pessoalmente, fazer algumas coisas

1) Coloque em algum tipo de balanceador de carga / sistema de replicação de banco de dados

Isto significa que você pode ter sua propagação serviço em vários servidores. não pode dar ao luxo de ter mais de um servidor permanentemente? Use Amazon E3 - É bom para colocar no lugar para coisas como esta (ligar alguns mais servidores para lidar com a carga)

2) Código de algumas restrições "High Load"

Por exemplo, se sua busca é ineficiente - desligá-lo quando a carga chega a um certo nível. "Desculpe, não podemos ocupado, tente novamente mais tarde para pesquisar"

3) Teste de carga ... Use algo como ApacheBench para teste de estresse seus servidores.

4) Pessoalmente, acho que a mudança Conexões "keep-alive" off é melhor. Pode reduzir ligeiramente o desempenho global, mas - isso significa que em vez de ter algo em que o site funciona bem para algumas pessoas, e os outros obtêm intervalos, todos recebem o serviço incoerente, se chega a esse nível

Linux Format fez um bom artigo sobre "Como sobreviver a um slashdotting" ... o que eu encontrei útil no passado. É disponível on-line como um PDF

Básico de Primeiros Passos para endurecer o seu site para o tráfego elevado.

1) Use uma ferramenta de baixo custo como https://browsermob.com/ para carga-teste seu local. No mínimo você deve estar olhando para 100K de visitantes únicos por hora. Se você receber um anúncio fora da home page do MSN, olhar para ser capaz de lidar com 500 mil visitantes únicos por hora.

2) Mova todo conteúdo gráfico estático / vídeo para um CDN. Edgecast e Amazon são duas excelentes opções.

3) Use Jet Profiler para o perfil de seu MySQL Server para analisar todas as consultas que executam lentas. Pequenas mudanças podem ter grandes benefícios.

olhar em usar Varnish - é um cache de servidor proxy reverso (como lulas, mas muito mais único propósito). Já corri algumas bastante grandes sites por trás dele, ele parecia funcionar muito bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top