EC2 ou RDS para banco de dados?

Comparação do uso de banco de dados no EC2 x RDS

Surgido na década de 70, soluções baseadas em modelos relacionais de dados destacam-se principalmente por sua capacidade de lidar com consistência transacional e facilidade na manipulação de dados por meio de SQL. Estas características fizeram com que este tipo de arquitetura fosse bastante difundido no meio corporativo tornando-se peça chave nas arquiteturas empresariais atuais.

Visando atender este tipo de arquitetura, a AWS disponibiliza opções que permitem a implementação de soluções desta natureza utilizando os benefícios de um ambiente na nuvem.

A primeira opção é a instalação e configuração do banco de dados utilizando instâncias EC2. Este modelo é classificado como serviços de infraestrutura. Esta opção é recomendada para os casos em que o cliente precisa ter um controle absoluto da instância do banco de dados. Neste caso é importante a presença de um profissional com experiência em banco de dados que possa realizar todas as atividades de gestão das instâncias.

Esta opção provê grande flexibilidade na escolha do fornecedor de banco de dados viabilizando a implementação de workloads com os mais diversos banco de dados no mercado como DB2, Sybase, Openbase assim como a total liberdade de configuração de instâncias e acesso as tabelas administrativas para a realização de tarefas como por exemplo a customização das áreas de log das transações.

Toda esta liberdade propiciada pelas instâncias EC2, faz com que o cliente tenha que preocupar-se com tarefas para replicação de dados para a manutenção de cópias dos dados em casos de indisponibilidade do nó principal, atividades de backup, e questões de segurança na camada de sistema operacional. No diagrama abaixo temos o modelo de responsabilidade compartilhada derivada da escolha desta opção.

Modelo de responsabilidade compartilhada para serviços de infraestrutura
Figure 1 – Modelo de responsabilidade compartilhada para serviços de infraestrutura

Uma segunda alternativa é o uso de um serviço gerenciado (Container Services) denominado Amazon Relational Database Services (RDS). Esta opção é recomendada para os casos em que o cliente deseja simplificar o processo de gestão do banco de dados delegando atividades de instalação, configuração, operação e escalonamento do banco de dados para a AWS.

Neste cenário o cliente preenche algumas informações como o motor de banco de dados (Engine DB), tipo de licença, versão desejada do banco de dados, classe de instância, deployment em múltiplas zonas de disponibilidade, upgrades automático do banco de dados (Minor Releases), espaço de alocação do storage, uso de configuração com IOPS provisionado, usuário e senha do administrador do banco de dados, VPC onde o banco estará localizado, permissionamento para acesso público, grupos de segurança, backup automático, tempo de retenção do backup, e janelas de backup e manutenção. Estas informações podem ser preenchidas pela console administrativa da AWS, por linha de comando (CLI) ou por meio de SDK e o ambiente da AWS cuidará de todo o processo de provisionamento do ambiente.

Na figura abaixo segue um exemplo de um provisionamento de banco de dados utilizando o RDS para PostgreSQL com replica entre zonas de disponibilidade.

Interface da console da AWS para criar uma instância com RDS
Figure 2 – Interface da console da AWS para criar uma instância com RDS

Esta abordagem simplifica significativamente o processo de administração e segurança do banco de dados. No diagrama abaixo temos o modelo de responsabilidade compartilhada derivada da escolha desta opção.

Modelo de responsabilidade compartilhada para serviços de container
Figure 3 – Modelo de responsabilidade compartilhada para serviços de container

O serviço de RDS está disponível para um conjunto específico de fornecedores de banco de dados como MySQL, Oracle, PostgreSQL e Microsoft SQL Server permitindo que você foque seus esforços na aplicação ao invés de utilizar o seu tempo com tarefas administrativas.

Serviços RDS

O gerenciamento de banco de dados pode tornar-se uma tarefa bastante dispendiosa com o passar do tempo. As instâncias podem ficar sobrecarregadas em função de problemas operacionais e o esforço com tarefas administrativas podem consumir um tempo precioso dos times de infra-estrutura. Problemas como a falta de recursos de hardware e software, estratégia de backup, escassez profissionais especializados (DBA), falta de manutenção e um acompanhamento efetivo das métricas de controle minam os processos de governança das empresas afetando sistemas críticos de negócio.

Neste sentido o RDS vem surgindo como uma opção interessante. Muitos clientes estão utilizando o RDS em ambientes de produção para tirar vantagem de funcionalidades como backups automático sem a necessidade de preocupação com a restauração point-in-time, facilidade de upgrade e habilidade de escalar processamento e armazenamento de dados. Clientes que fazem uso do RDS podem melhorar a disponibilidade e durabilidade dos dados por meio da criação de ambientes Multi-AZ.

Quando ativado, o RDS permite criar banco de dados primário e secundários permitindo a sincronização das replicações de dados e a monitoração das instâncias para garantir a saúde de cada um dos nós. Em caso de falha, o RDS promoverá o nó secundário para primário e criará uma novo secundário. Em seguida será restabelecido a replicação com a completa transparência e sem o envolvimento do time do cliente.

No contexto de aplicação, não há mudanças significativas no desenvolvimento de código. Entretanto é importante considerar na arquitetura da aplicação questões como latência e criptografia de dados para garantir o pleno atendimento dos requisitos não funcionais de um projeto.

Uma vez entendida a aplicabilidade dos serviços de RDS, vamos entender algumas das principais vantagens deste serviço. São eles:

  • Simplificação dos processos de configuração e operação de escalonamento de dados: As atividades de criação de uma instância são gerenciadas pelo Amazon RDS, que por sua vez cuida de todo o processo de provisionamento da máquina, instalação e configuração do banco de dados;
  • Automação de atividades operacionais: Durante o tempo de vida útil dos seus dados, o Amazon RDS automatiza tarefas administrativas comuns como a geração de backups e a aplicação de patches do software;
  • Configuração de mecanismos para melhorar a disponibilidade dos dados: O RDS habilita mecanismos de replicação de dados através de múltiplas zonas de disponibilidade e failover automático que permite restaurar o serviço em um espaço muito curto de tempo de forma a adequar os seus serviços a métricas operacionais como por exemplo RTO (Recovery Time Objetive);
  • Compatibilidade de código, ferramentas de modelagem e ferramentas de administração de dados: Uma vez que o banco foi criado e as permissões concedidas, não se faz necessário a mudança das ferramentas que já são utilizadas pela sua equipe. Neste caso as mesmas ferramentas nativas do ambiente podem ser utilizadas.

Há alguns cuidados que devem ser tomados ao utilizar um banco na nuvem. São eles:

  • Utilizar a opção IOPS para storage. A escolha deste tipo de armazenamento é importante por oferecer um desempenho rápido, previsível e consistente para leitura e escrita de dados onde é requerido processamento de transações on-line de produção (OLTP) e com uso intensivo de I/O.
  • Estar atento aos limites do RDS para cada distribuição: Para uso de RDS para MySQL e PostgreSQL este limites não são aplicáveis, mas para o Oracle deve-se estar atento ao fato de que é possível criar somente um banco de dados por instância.  No caso do RDS for Microsoft SQL Server o limite é de 30 banco de dados por instância.
  • Atenção ao definir a classe inicial da instância e a suas respectivas capacidade de armazenamento: A definição destas informações deve levar em consideração as necessidades computacionais do seu ambiente. Para um suporte na escolha adequada das configurações disponibilizamos um guia de dimensionamento de instância RDS.

Para maiores informações, eu recomendo a leitura da documentação do RDS no developer resources. Para uma materialização dos conceitos aqui apresentados o tutorial mão na massa de RDS que será bastante útil para elucidação deste serviço.

Adicionalmente, a AWS lançou um novo service de banco de dados no evento em Las Vegas chamado Aurora. Ele é um banco de dados relacional, compatível com o MySQL, que combina a velocidade e disponibilidade de bancos de dados comerciais avançados com a simplicidade e a economia de bancos de dados de código aberto. O Amazon Aurora proporciona desempenho até cinco vezes melhor do que o MySQL em um nível de preço bem inferior. O Amazon Aurora junta-se ao MySQL, Oracle, Microsoft SQL Server e o PostgreSQL como quinto mecanismo de banco de dados disponível para os clientes através do Amazon RDS. Maiores informações em http://aws.amazon.com/pt/rds/aurora/details/.

Post Origial: AWSHUB