Pergunta

Suponha que eu queria desenvolver o site do Stack Overflow. Como faço para estimar a quantidade de hardware de commodities necessário para apoiar este site, assumindo 1 milhão de solicitações por dia. Existem algum estudo de caso que explique as melhorias de desempenho possíveis nessa situação?

Eu sei que o gargalo de E/O é o principal gargalo na maioria dos sistemas. Quais são as opções possíveis para melhorar o desempenho de E/S? Poucos deles que eu conheço são

  1. cache
  2. replicação
Foi útil?

Solução

Você pode melhorar o desempenho de E/S de várias maneiras, dependendo do que você usa para sua configuração de armazenamento:

  1. Aumente o tamanho do bloco do sistema de arquivos se o seu aplicativo exibir uma boa localidade espacial em sua E/ST ou usar arquivos grandes.
  2. Usar RAID 10 (Striping + Mirroring) para desempenho + redundância (proteção de falha de disco).
  3. Use discos rápidos (Desempenho: SSD> FC> SATA).
  4. Segregar cargas de trabalho em diferentes horários do dia. Por exemplo, backup durante a noite, E/S de aplicativo normal durante o dia.
  5. Desligar Atualizações do ATIME no seu sistema de arquivos.
  6. Cache NFS File Handles também conhecido Palheiro (Facebook), se armazenar dados no NFS Server.
  7. Combine pequenos arquivos em pedaços maiores, também conhecidos como Mesa grande, Hbase.
  8. Evite diretórios muito grandes, ou seja, muitos arquivos no mesmo diretório (em vez disso, divida os arquivos entre diretórios diferentes em uma hierarquia).
  9. Use um agrupado sistema de armazenamento (Sim, não exatamente o hardware de commodities).
  10. Otimize/projete seu aplicativo para acessos de disco seqüencial sempre que possível.
  11. Usar Memcached. :)

Você pode querer olhar para a seção "Lições aprendidas" de Stackoverflow Architecture.

Outras dicas

Confira esta ferramenta útil:

http://www.sizinglounge.com/

E outro guia da Dell:

http://www.dell.com/content/topics/global.aspx/power/en/ps3q01_graham?c=us&l=en&cs=555

Se você quiser sua própria comunidade de Stackoverflow, você pode se inscrever com Stackexchange.

Você pode ler alguns estudos de caso aqui:

Alta escalabilidade - como o Rackspace agora usa o MapReduce e o Hadoop para consultar terabytes de dadoshttp://highscalability.com/how-rackspace-now-uses-mapreduce-and-hadoop-quadery-terabytes-data

http://www.gear6.com/Gear6-Downloads?fid=56&dlt=case-study&ls=veoh-case-study

1 milhão de solicitações por dia é 12/segundo. O excesso de pilha é pequeno o suficiente para que você possa (com truques interessantes de normalização e compressão) se encaixar inteiramente no RAM de um 64 Gbyte Dell PowerEdge 2970. Não tenho certeza de onde o cache e a replicação devem desempenhar um papel.

Se você tiver um problema em pensar o suficiente sobre a normalização, um PowerEdge R900 com 256 GB está disponível.

Se você não gosta de um único ponto de falha, pode conectar algumas delas e apenas pressionar as atualizações sobre um soquete (de preferência em uma placa de rede separada). Mesmo um pico de carga de 12k/segundo não deve ser um problema para um sistema de memória principal.

A melhor maneira de evitar o gargalo de E/S é não fazer E/S (o máximo possível). Isso significa que uma arquitetura do tipo Prevayler com gravações em lotes (não há problema a perder alguns segundos de dados), basicamente um arquivo de log e para replicação também os escreva em um soquete.

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