Temos o prazer de publicar mais um artigo de Eduardo Horai, gerente de arquitetos de soluções na AWS América Latina. Hoje o tema é relacionado a bases de dados NoSQL e MongoDB na Nuvem da AWS.
A utilização de banco de dados não relacionais (os famosos NoSQL) tem crescido imensamente, o que introduziu um novo modelo de consistência e disponibilidade a favor de uma escalabilidade muito maior.
Para quem ainda não utiliza nenhum banco de dados NoSQL, começar com DynamoDB é uma excelente ideia, pois é um banco de dados rápido e simples, pois é totalmente gerenciado pela AWS e você apenas escolhe quanto quer de leitura e escrita por segundo. Todos os dados são salvos em SSDs e replicados para melhorar a disponibilidade e durabilidade.
Porém, se você já está utilizando algum outro NoSQL, quer migrar para a AWS, e não tem tempo para adaptar seu código para rodar com DynamoDB, a opção é rodar o seu NoSQL no Amazon Cloud Compute (Amazon EC2).
Tipicamente as principais categorias de NoSQL são:
- Bancos chave-valor como Cassandra e Riak
- Banco de grafo como Neo4j, DEX e InfiniteGraph
- Banco orientado a documentos como MongoDB
Rodando NoSQL na AWS
A performance de um sistema NoSQL no Amazon EC2 depende de vários fatores, incluindo o tipo de instancia EC2, o número e a configuração dos volumes Amazon Elastic Block Stores (Amazon EBS), a configuração do software NoSQL, e a carga de trabalho da aplicação. Nós encorajamos que você faça um comparativo da sua atual aplicação com vários tipos de instancias EC2 e configurações de armazenamento para que você consiga selecionar a mais apropriada configuração.
Para aumentar a performance do seus sistema, você precisa saber quais recursos do servidor restringem a sua performance. Se a CPU ou a memória limita a performance do seu sistema, você pode escalar os recursos de memória, processamento e rede apenas selecionando um tipo maior de instancia EC2. Lembrando, que esta mudança de uma instancia existente para uma de tamanho diferente, requer um ciclo de stop/start.
Se a sua performance esta limitada pelo I/O de disco, você pode considerar a mudança nas configurações de seus recursos de disco. Os volumes Amazon EBS, o bloco de armazenamento persistente disponível no Amazon EC2, são conectados através da rede. Um aumento na performance da rede pode ter um impacto significante para agregar performance, então, tenha certeza para escolher o tamanho apropriado da instancia. Se sua instancia suporta a opção EBS-Optimized, habilitando-a você irá adicionar 500 Mbps ou 1000 Mbps (dependendo do seu tipo de instancia) de largura de banda para o EBS. Para escalar performance de I/O além cerca de 100 IOPS (input output operations per second) que um simples volume padrão EBS pode entregar, você pode alavancar os volumes Provisioned IOPS, que permitem configurações acima de 4000 IOPS por volume.
MongoDB no EC2
O MongoDB é um sistema de armazenamento de dados estruturados escalável, de alta performance e open source. O MongoDB contém um armazenamento em estilo JSON, orientado a documentos com suporte a full index, distribuição, replicação sofisticada e compatibilidade com o paradigma Map/Reduce. O MongoDB é focado na flexibilidade, poder, velocidade e facilidade de uso.
Para rodar o MongoDB na AWS, temos algumas dicas básicas:
- MongoDB é atualizado frequentemente; www.mongodb.org é uma fonte importante para as últimas melhorias no código, documentação e novidades neste projeto open source (OSS);
- 10gen desenvolve o MongoDB e oferece assinaturas, o que inclui recursos entreprise que não estão no código open source, suporte em produção, treinamento e consultoria para MongoDB;
- Use apenas instancias 64 bits. MongoDB armazena apenas 2,5 GB de dados em sistemas de 32 bits. Para mais informações, vá em http://blog.mongodb.org/post/137788967/32-bit-limitations;
- Use XFS ou Ext4. Estes sistemas de arquivos suportam a suspensão de I/O e limpeza na escrita de cache, o que é critico para a criação de snapshots consistentes em multi discos, e também é uma opção importante de melhora na performance do MongoDB;
- Use volumes EBS Provisioned IOPS com o RAID 10. O MongoDB é especificamente otimizado para os benefícios do RAID 10, e para todos mas a mais pesada carga de trabalho de escrita é a mais eficiente configuração;
- Use o MongoDB 2.2 ou maior. Recursos significantes foram implementados na versão 2.0, incluindo segurança em ambientes compartilhados e outros elementos críticos;
- Desligue o atime e o diratime quando montar volumes de dados. Fazer isso reduz muito o I/O e desabilita recursos que não serão úteis para o MongoDB.
Arquitetura
O MongoDB possui duas construções separadas para topologias multi nodes. Essas construções, replica sets e replica sets distribuídos, são oferecidos em conjunto em sistema de alta performance. As replicas sets são clusters de replicação assíncrona e com tecnologia automática de failover e o sharding é um sistema de distribuição de dados automático. Aumentar o número de instancias em uma replica set, aumenta a tolerância a falhas. Enquanto aumentar o número de shards (cada um é uma replica set completa) você pode distribuir os dados para processos mongod separados, o que provê uma escalabilidade horizontal para performance de leitura e escrita.
O processo mongos distribui cada request para o shard apropriado, o que provê acesso contínuo ao seu conjunto de dados distribuído.
Conforme mencionado, há diversas opções para criar uma arquitetura para o seu MongoDB de acordo com seus requisitos. Confira agora nosso artigo em portugues que descreve desde a instalação do MongoDB no EC2, noções básicas de MongoDB, modelos de arquitetura, armazenamento e opções de escalabilidade, além de passo a passa para criação das replicas set e backup/restore. O artigo está disponível no awshub através deste link.