Estimativa do hardware de commodities para um aplicativo
-
20-09-2019 - |
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
- cache
- replicação
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:
- 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.
- Usar RAID 10 (Striping + Mirroring) para desempenho + redundância (proteção de falha de disco).
- Use discos rápidos (Desempenho: SSD> FC> SATA).
- Segregar cargas de trabalho em diferentes horários do dia. Por exemplo, backup durante a noite, E/S de aplicativo normal durante o dia.
- Desligar Atualizações do ATIME no seu sistema de arquivos.
- Cache NFS File Handles também conhecido Palheiro (Facebook), se armazenar dados no NFS Server.
- Combine pequenos arquivos em pedaços maiores, também conhecidos como Mesa grande, Hbase.
- 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).
- Use um agrupado sistema de armazenamento (Sim, não exatamente o hardware de commodities).
- Otimize/projete seu aplicativo para acessos de disco seqüencial sempre que possível.
- Usar Memcached. :)
Você pode querer olhar para a seção "Lições aprendidas" de Stackoverflow Architecture.
Outras dicas
Confira esta ferramenta útil:
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.