DB em container degrada o desempenho?
Saudações galera.
indo direto ao assunto:
Rodar a engine do DB dentro de um container docker causaria alguma degradação de desempenho (por menor que seja) em comparação a executar o DB direto no sistema host?
me veio essa dúvida após pesquisar sobre formas de tuning de DB (especificamente pro PostgreSQL)
estou fazendo uma migração de banco e o PostgreSQL foi selecionado pra isso.
Eu sou fã do docker e toda a aplicação que estou trabalhando esta rodando em containers e services docker, então, nada mais lógico do que rodar o DB também em docker (obviamente fazendo os binds dos dados pra um diretório no sistema host)
o caso de uso em questão não é pra uma aplicação pequena.
o foco aqui é ter um banco que vai suportar milhões de inserções por dia (e armazenar algumas dezenas de bilhões de registros) já que a aplicação em questão tem milhares de usuários e gera milhões de dados diariamente.
então qualquer degradação minima de desempenho pode ser problemática.
pesquisei a respeito disso e as respostas foram bem mistas quanto ao grau de perda de desempenho por se rodar a engine do DB em um container.
a ideia principal de quem critica containers pra DB é que o orquestrador de containers é uma camada de software extra entre o host e o DB, então teoricamente poderia ser um gargalo em altas cargas.
fico pensando se é muita neura minha ou se tem algum fundo de verdade.
algum expert em docker e DBs poderia sanar essa minha dúvida? 😅
ps: fiz toda a implementação do PostgreSQL com replicação Master-slave usando docker swarm, mas acabei nem colocando em produção por conta dessa dívida. Refiz no método tradicional kkkk
Meus 2 cents:
Sobre o artivo comparando PostgreSQL em docker e nativo (bypass paywall):
https://freedium.cfd/https://itnext.io/benchmark-postgresql-docker-versus-native-2dde6b5a8552
So comentando, o que mais afeta entre nativo vs docker eh a parte de escrita - e depende muito da driver (metodo/vfs) de storage do docker.
Um docker nada mais eh que uma VM (no formato container) - e grosso modo roda na mesma velocidade da maquina host (ok, a limitacao aqui eh a quantidade de containers rodando simultaneamente).
Em Windows (WSL) e Mac esta diferenca eh maior - mas nativamente em Linux, de um modo geral pode rodar sem medo - se notar algum problema verifique especificamente a questao do vfs do docker (se overlay ou outro).
"nada mais lógico do que rodar o DB também em docker" Discordo desse ponto. Banco não é aplicação e as considerações de engenharia para os critérios de um banco são diferentes de uma aplicação comum, como um serviço de api. você está adicionando camadas de abstração de um componente crítico, latência de I/O e tornando o processo de backup mais complexo e menos alinhado com as práticas de mercado. em ambientes de dev/homolog ou um banco de baixa criticidade/volume, tudo certo, mas eu não confiaria na filosofia stateless do docker para rodar um componente stateful crítico para a minha operação.
Tem um fundo de verdade. Sim existe um overhead, mas na maioria dos casos a diferença é insignificante. É fácil medir...
Dá uma olhada nesse artigo:
https://itnext.io/benchmark-postgresql-docker-versus-native-2dde6b5a8552
Cara, aconselho ver a saga da rinha de backend do fabio akita, https://www.youtube.com/watch?v=-yGHG3pnHLg, tem uma parte que ele fala que o driver escolhido no docker pode afetar muito a perfomance
Deixe-me fazer um comentário com base no sre que levou todo exército brasileiro à cloud, NUNCA (ainda que em pods stateful em k8s) use db em container para produção, NUNCA!!! Para estudos, dev e etc, nice!