Bancos de Dados e Postgres Conteinerizados em Produção

8 Coisas que você deve saber ao instalar o seu ambiente de banco de dados em produção usando containers e Kubernetes


Introdução

 

Cada vez mais a utilização de sistemas de gerenciamento de banco de dados (DBMS) em containers têm aumentado, se tornando cada vez mais popular

Ao abstrair completamente os aplicativos das camadas do sistema operacional e da infraestrutura, os containers oferecem portabilidade e agilidade e flexibilidade sem precedentes para suportar uma abordagem DevOps de integração contínua e entrega contínua. 

Além disso, as imagens de container são iniciadas muito mais rapidamente que as máquinas virtuais (VM), tornando-as mais adequadas para os ambientes dinâmicos, nos quais os aplicativos devem escalar sob demanda.

Juntamente com outros aplicativos em container, os bancos de dados em container surgiram como parte da mudança de paradigma de aplicativos grandes e monolíticos para aplicativos baseados em microsserviços e arquiteturas sem servidor. Devido à facilidade com que os bancos de dados em container podem ser implantados, eles se tornaram um utilitário sob demanda para aplicativos individuais, em vez de terem um grande banco de dados centralizado que atende a vários aplicativos.

Um banco de dados em container é um encapsulamento de seu software de servidor DBMS, com acesso a um arquivo de banco de dados físico que reside em algum lugar da rede. Cada DBMS é encerrado em sua própria imagem de container.

Conteinerizar um banco de dados no entanto é mais complexo que a conteinerização de aplicativos em micro serviços principalmente devido a grande dependência de I/O eficiente requerida pelo SGBD

 

Pontos a Considerar

Irei listar abaixo os maiores desafios e pontos de atenção a serem verificados ao se criar um projeto de deployment de banco de dados em containers

  • Os bancos de dados normalmente exigem redes de alta produtividade e baixa latência. No entanto, os containers não fornecem nativamente o nível de armazenamento e isolamento de recursos de rede que é necessário para atingir esses requisitos. O surgimento da orquestração de containers como o Kubernetes, por exemplo, resolve isso gerenciando o armazenamento em rede e dados, que pode ser local(no host) ou na nuvem.
  • É necessário um load balancer para dimensionar e fornecer alto desempenho para workloads de produção, onde há muitos usuários executando muitas consultas simultaneamente. No caso do PostgreSQL, existe o pgPool disponível, que ajuda a escalar as aplicações e balancear carga de transações de leitura para as réplicas enquanto direciona solicitações de gravação para o master. Ou, o EDB Postgres Containers vem com esta função, como outra opção, para que o balanceamento de carga seja incorporado.
  • Os bancos de dados são inerentemente stateful e persistentes, enquanto os containers são tipicamente sem stateless. As soluções alternativas implementadas para lidar com o armazenamento persistente de dados e a vida útil do container mais longa do que o habitual costuma prejudicar os principais benefícios do container do uso reduzido de recursos de tempo de execução. Para lidar com isso, é necessário planejar o armazenamento persistente, separando o mecanismo do banco de dados do armazenamento de arquivos do banco de dados. Dessa forma, se um container cair ou falhar por algum motivo, não haverá perda de dados. Essa é a mesma estrutura de design usada para um DBMS implantado no data center.
  • O considerável espaço em disco necessário para armazenar grandes quantidades de dados em um banco de dados em container torna-o menos ágil e menos realocável. A solução é a mesma mencionada acima, que é separar o mecanismo do banco de dados do armazenamento de arquivos do banco de dados mapeando os volumes de dados externos no container em tempo de execução. Ao usar o Kubernetes, volumes persistentes podem ser criados usando diferentes back-ends de armazenamento que incluem Gluster, NFS e Object Storage.
  • Os bancos de dados normalmente têm várias configurações. A criação de uma nova imagem de container imutável para todas as configurações possíveis do banco de dados pode resultar rapidamente na expansão da imagem. Para evitar isso, as configurações personalizadas do banco de dados são passadas para o container em tempo de execução que substituirá as configurações padrão. No Kubernetes, isso pode ser alcançado com o uso do Config Maps, que é um objeto do Kubernetes que encapsula as configurações personalizadas e é fornecido ao container no momento da implantação.
  • Os bancos de dados são críticos para as aplicações, portanto, alta disponibilidade e failover são necessários para as aplicações de produção. Para bancos de dados que suportam dados de produção, é importante eliminar o ponto único de falha. Usando o exemplo do PostgreSQL, você precisará desenvolver scripts para criar o recurso de failover, para que uma réplica assuma o controle automaticamente no caso de falha do banco de dados master. Quando a implantação automatizada de script de bancos de dados em container é usada em conjunto com uma estrutura de orquestração como o Kubernetes, o resultado é alta disponibilidade interna para cenários de failover. Isso elimina a necessidade de manter uma réplica de cluster de failover, que economiza recursos que ficarão ociosos a maior parte do tempo.
  • Backup e recuperação são funções críticas para qualquer banco de dados, em container ou não. O container da Ferramenta de Backup e Recuperação EDB (BART) fornece recursos de backup e recuperação para containers do banco de dados Postgres e pode suportar bancos de dados em vários containers diferentes. Ele implementa o agendamento para backups automatizados, políticas de retenção, opções de compactação para backups, bem como requisitos de recuperação pontual para implantações Postgres em larga escala.
  • Depois que os bancos de dados são implantados, eles precisam ser monitorados quanto ao uso de recursos e também analisados ​​para identificar gargalos de desempenho, isso pode ser um pouco mais desafiador em uma plataforma conteinerizada dado ao número de aplicações que rodam simultaneamente. 

 

Conclusão

Containers e micro serviços se tornaram uma importante parte da infra estrutura de software dos sistemas modernos e são tecnologias bastante maduras com os avanços das tecnologias de orquestração de containers está cada vez mais eficaz a utilização banco de dados instalados em containers e cada vez mais este tipo de configuração deve se consolidar como padrão para sistemas de produção

Se Inscreva Na Nossa Newsletter Tenha Acesso Aos Melhores Artigos