Vale a pena usar um servidor MySQL separado?

8

Uma pergunta semelhante se transformou em uma sopa de opiniões por aqui : então talvez não haja uma resposta 'certa' para isso, mas quero verificar com a comunidade.

Meu cliente está prestes a lançar um anúncio de TV. Eles esperam tráfego no departamento de 7 dígitos no próximo mês. Meu trabalho é garantir que o servidor não caia.

Minha pergunta: vale a pena dividir o banco de dados MySQL em um servidor separado, que serve apenas o banco de dados. Desejo, então, ter vários servidores que contenham a base de código e sirvam ao apache, fazendo interface com a caixa do banco de dados. Todos serão contêineres virtuais.

NÃO (acho) que quero usar vários servidores de banco de dados - parece que isso apresentará complexidade desnecessária e possíveis erros / gargalos.

Estou errado? Gostaria de receber algumas opiniões de experiência sobre isso. Obrigado.

Jongosi
fonte

Respostas:

16

Usamos um servidor MySQL separado em várias instâncias em que as lojas enfrentavam alto tráfego. Existem algumas vantagens nele

  1. Servidores de banco de dados dedicados podem ser ajustados às necessidades específicas do MySQL, que são diferentes de um servidor da web
  2. É fácil adicionar um segundo servidor de banco de dados (com balanceamento de carga) ao cluster quando necessário
  3. Quando seu banco de dados fica inativo, ele não trava o frontend, para que você possa exibir uma página de aviso ou erro decente.

Quando o Magento é armazenado em cache corretamente com o Varnish ou qualquer outra extensão do FPC, o principal gargalo será o banco de dados do que experimentei. A potência real será necessária para o seu banco de dados. Dessa forma, você pode começar com um servidor Web relativamente pequeno e investir mais no servidor de banco de dados.

Sander Mangel
fonte
13

Segurança:

Além da resposta de Sander, eu acrescentaria que em certos níveis de conformidade com o PCI, este é um requisito :

Servidores separados da Web e de banco de dados O CHD é armazenado em massa no banco de dados, tornando-o um alvo de alto valor para um invasor. Servidor de banco de dados separado significa que o acesso pode ser estritamente controlado (exposição limitada). Exigido pela Seção 1 do PCI DSS.

Fonte: http://www.focusonpci.com/site/index.php/PCI-101/technical-requirements.html

Ao separar as tarefas da Web e do banco de dados, você limita sua exposição. Normalmente, seu banco de dados está em um segmento privado da sua rede e inacessível publicamente.

Também é sugerida uma conexão VPN estática, no PCI, entre o seu web / db e a detecção de intrusões no equipamento de rede. No caso de um comprometimento, o banco de dados será isolado e a conexão VPN será encerrada, de modo que, mesmo que seu aplicativo e sua chave de criptografia estejam comprometidos, o acesso ao armazenamento de dados foi bloqueado e fica inacessível.

Alta disponibilidade / recuperação de desastres:

Sander está no ponto aqui. Vá votar nele. Eu acrescentaria que, mesmo que uma pequena tarefa de manutenção, como fazer um backup do sistema de arquivos ou um despejo de banco de dados, seu banco de dados, na melhor das hipóteses, esteja limitado a somente leitura por algum tempo. Em casos extremos, vi tempos limite de espera de bloqueio e filas de processos serem preenchidas, pois todas as conexões disponíveis estão na fila ou descartadas. O site "desce", efetivamente.

Você pode atenuar isso separando seu banco de dados e agendando seu servidor da Web para colocar o site no modo de manutenção durante essas janelas de backup, sem qualquer conseqüência para o sistema de arquivos do servidor da Web.

philwinkle
fonte
11
A segurança torna isso um acéfalo, PCI-DSS ou não. Como em qualquer dado confidencial, deve haver um firewall entre o sistema frontal e o banco de dados.
Nic
0

Eu gostaria de adicionar meu centavo, quando um ambiente de produção for projetado, considere ter aplicativo e banco de dados em diferentes servidores como regra geral. Fornecerá os seguintes benefícios diretamente ou diretamente:

  • Melhor desempenho geral (seu aplicativo tem mais recursos)
  • Sistema mais confiável (Falha ou choque de um pode não afetar outro. É claro que o aplicativo pode não funcionar conforme a necessidade, mas um componente)
  • Recursos dedicados conforme a necessidade (você pode alocar CPU / RAM / armazenamento para cada servidor conforme a necessidade)
  • Melhor segurança (apenas com a exceção de que você está permitindo a conexão com o banco de dados fora da sua máquina, mas isso pode ser mitigado com restrições de firewall baseadas em endereço IP ou abordagens semelhantes)
  • Requisito obrigatório para atingir Altamente Disponível (HA)
  • Sistemas Fácil de atender às necessidades de recuperação de desastres (DR)
  • Na minha opinião, apenas as desvantagens são mais custos e mais servidores para gerenciar.

Obrigado e Reagrd, Imran Javed Zia

Imran Javed
fonte