Estou escrevendo um plano de negócios e preciso simular o custo quando meu site chegar a 500.000 visitantes únicos.
- visitantes: 500.000
- visualizações de página: 1.500.000
- visualizações de página do spider: 500.000
- total de visualizações de página: 2.000.000
Cada página faz 50 consultas + -
- consultas por dia: 100 milhões
- por hora: 4 milhões
- por minuto: 70.000
- por segundo: 1.200
- pico: 3.000
Fazendo esse cálculo, preciso de 3.000 consultas em segundo ... que tipo de servidor pode lidar com isso?
O problema é: na verdade, meu site está fazendo 2.000 visitas por dia e tendo - + 150/200 consultas / segundo ... a partir deste ponto, esperarei 50.000 consultas / segundo.
Quantos servidores eu preciso no cluster ou replicação gerenciam este trabalho?
Respostas:
Eu trabalhava para uma empresa de comércio eletrônico com um site que tinha vários milhões de visitas por página por dia. Tivemos um único DELL PE 1750 com 2 CPUs de núcleo único e 2 GB de RAM, tamanho do banco de dados aprox. 4GB. Nos horários de pico, esse servidor processava mais de 50 mil consultas por segundo.
Dito isto: o banco de dados foi bem estruturado, todas as consultas foram ajustadas com precisão (tivemos sessões semanais analisando os logs de consultas lentos e corrigindo consultas e índices) e a configuração do servidor também foi ajustada. O armazenamento em cache é definitivamente uma boa idéia, mas o MySQL faz isso de qualquer maneira, basta analisar o desempenho e ajustar como a memória é usada (cache de consulta versus outras opções).
A partir dessa experiência, posso dizer que o maior impacto é causado por índices ausentes, índices incorretos e design incorreto do banco de dados (por exemplo, campos de cadeia longa como chaves primárias e absurdos semelhantes).
fonte
Tudo depende da complexidade da consulta, da quantidade de memória que os servidores possuem e da rapidez com que os discos são.
Se as consultas forem muito simples ou muito bem ajustadas, um único servidor de banco de dados grande poderá lidar com isso. Se, no entanto, as consultas forem muito complexas (ou simples, mas mal ajustadas), você precisará de vários servidores.
fonte
Isso realmente não pode ser estimado sem saber nada sobre as consultas específicas que você está executando, o esquema do banco de dados e seu tamanho.
Um SELECT simples em uma coluna indexada é um animal completamente diferente de um par de JOINs baseados em não indexados ... e é claro que as coisas mudam muito se as tabelas envolvidas contiverem 1K registros ou 1M.
Além disso:
fonte
Como Ignacio observou, você pode querer examinar o cache. No cms ou talvez até na frente da pilha. Mais de 50 consultas para cada página (a cada!) Realmente são muitas.
fonte
A julgar pelos seus comentários, o maior fator será o tamanho do seu conjunto de dados ou pelo menos o tamanho do conjunto de dados "quente". 3.000qps ou mesmo 8.000qps em um servidor de 16 núcleos não é um problema, desde que o servidor raramente precise ir ao disco para satisfazer a consulta. Quando o conjunto de dados ativos exceder a quantidade de memória que o InnoDB está usando para armazená-lo em cache, seu desempenho será reduzido rapidamente.
fonte
Para grandes conjuntos de dados "quentes", provavelmente vale a pena investir tempo para converter em um esquema de "big data"; é para isso que servem. Por exemplo, se você possui uma grande quantidade de dados para recuperar, mas nunca reescreve, mas apenas acrescenta novos dados, consulte o Apache Hive. Navegue ao redor, geralmente é um sabor que você pode interagir facilmente com o código existente, o que também impedirá a azia de ficar sem espaço em cache.
fonte
Existem muitas coisas que podem afetar suas consultas por segundo. Não confie nos meus dados sem testar a si mesmo. Publico aqui o resultado do teste de velocidade para ajudar alguém a estimar o qps com o banco de dados e a máquina mysql atuais (2018-09). No meu teste, o tamanho dos dados é menor que a memória do servidor (que reduz drasticamente a IO e melhora muito o desempenho).
Eu uso uma instância de um CPU cpu 3.75GB de memória, 100GB ssd, gcp cloud mysql server e obtenho:
fonte