fbpx

Amazon ElastiCache

Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no whatsapp
Compartilhar no telegram

Armazenamento em cache na memória

 

Uma das características comuns de um aplicativo bem-sucedido é uma experiência do usuário rápida e responsiva. A pesquisa mostrou que os usuários ficam frustrados e deixam um site ou aplicativo quando a resposta é lenta.

Em 2007, os testes do site de varejo da Amazon.com mostraram que, a cada 100ms de aumento no tempo de carregamento, as vendas diminuíam 1%. Viagens de ida e volta para um banco de dados e seu armazenamento subjacente podem adicionar atrasos significativos e geralmente são os principais contribuintes para a latência do aplicativo.

O armazenamento em cache de dados usados ​​com frequência é uma das otimizações de desempenho mais importantes que você pode fazer em seus aplicativos.

Comparado à recuperação de dados de um cache na memória, consultar um banco de dados é uma operação cara. Armazenando ou movendo dados frequentemente acessados ​​na memória, os desenvolvedores de aplicativos podem melhorar significativamente o desempenho e a capacidade de resposta de aplicativos com muita leitura.

Por exemplo, o estado da sessão do aplicativo para um site grande pode ser armazenado em um mecanismo de armazenamento em cache na memória, em vez de armazenar a sessão de dados no banco de dados.

Por muitos anos, os desenvolvedores criam aplicativos que usam mecanismos de cache como o Memcached ou o Redis para armazenar dados na memória e obter um desempenho incrivelmente rápido dos aplicativos.

Memcached é um armazenamento de chave / valor na memória simples de usar que pode ser usado para armazenar tipos arbitrários de dados.

 

É um dos mecanismos de cache mais populares. O Redis é um armazenamento flexível da estrutura de dados na memória que pode ser usado como cache, banco de dados ou mesmo como intermediário de mensagens. O Amazon ElastiCache permite que os desenvolvedores implantem e gerenciem facilmente ambientes de cache executando o Memcached ou o Redis.

 

Amazon ElastiCache

O Amazon ElastiCache é um serviço da Web que simplifica a configuração e o gerenciamento de ambientes de cache distribuído na memória. Esse serviço facilita e economicamente o fornecimento de uma solução de armazenamento em cache escalável e de alto desempenho para seus aplicativos em nuvem.

Você pode usar o Amazon ElastiCache em seus aplicativos para acelerar a implantação de clusters de cache e reduzir a administração necessária para um ambiente de cache distribuído.

Com o Amazon ElastiCache, você pode escolher entre um mecanismo de cache compatível com o protocolo Memcached ou Redis e iniciar rapidamente um cluster em questão de minutos.

Como o Amazon ElastiCache é um serviço gerenciado, você pode começar a usar o serviço hoje com muito poucas ou nenhuma modificação para aplicativos existentes que usam Memcached ou Redis. Como o Amazon ElastiCache é compatível com o protocolo com esses dois mecanismos, você só precisa alterar o terminal nos arquivos de configuração.

Usando o Amazon ElastiCache, você pode implementar qualquer número de padrões de cache.

Embora certamente seja possível criar e gerenciar um cluster de cache no Amazon Elastic Compute Cloud (Amazon EC2), o Amazon ElastiCache permite descarregar o trabalho pesado de instalação, gerenciamento de patches e monitoramento na AWS, para que você possa se concentrar no seu aplicativo.

O Amazon ElastiCache também fornece vários recursos para aprimorar a confiabilidade de implantações críticas. Embora seja raro, as instâncias subjacentes do Amazon EC2 podem ficar prejudicadas.

O Amazon ElastiCache pode detectar e recuperar automaticamente da falha de um nó de cache. Com o mecanismo Redis, o Amazon ElastiCache facilita a configuração de réplicas de leitura e o failover do primário para uma réplica no caso de um problema.

 

Padrões de acesso a dados

A recuperação de uma chave simples de um cache na memória sempre será mais rápida que a consulta ao banco de dados mais otimizada.

Você deve avaliar o padrão de acesso dos dados antes de decidir armazená-los no cache.

Um bom exemplo de algo para armazenar em cache é a lista de produtos em um catálogo. Para um site ocupado, a lista de itens pode ser recuperada milhares de vezes por segundo. Embora faça sentido armazenar em cache os itens mais solicitados, você também pode se beneficiar do armazenamento em itens de cache que não são solicitados com freqüência.

Existem também alguns itens de dados que não devem ser armazenados em cache. Por exemplo, se você gerar uma página única a cada solicitação, provavelmente não deve armazenar em cache os resultados da página. No entanto, mesmo que a página mude sempre, faz sentido armazenar em cache os componentes da página que não são alterados.

 

Mecanismos de cache

 

O Amazon ElastiCache permite implantar rapidamente clusters de dois tipos diferentes de mecanismos de cache populares: Memcached e Redis. Em um nível alto, Memcached e Redis podem parecer semelhantes, mas oferecem suporte a vários casos de uso diferentes e fornecem funcionalidade diferente.

Memcached Memcached fornece uma interface muito simples que permite gravar e ler objetos nos armazenamentos de dados de valores / chaves na memória.

Com o Amazon ElastiCache, você pode aumentar e diminuir elasticamente um cluster de nós do Memcached para atender às suas demandas. Você pode particionar seu cluster em shards e oferecer suporte a operações paralelas para obter uma taxa de transferência de desempenho muito alto.

O Memcached lida com objetos como blobs que podem ser recuperados usando uma chave exclusiva. O que você coloca no objeto é com você, e geralmente são os resultados serializados de uma consulta ao banco de dados. Isso pode ser simples valores de cadeia ou dados binários.

O Amazon ElastiCache oferece suporte a várias versões recentes do Memcached. Desde o início de 2016, o serviço suporta a versão 1.4.24 do Memcached e também versões anteriores à 1.4.5.

Quando uma nova versão do Memcached é lançada, o Amazon ElastiCache simplifica o processo de atualização, permitindo que você gire um novo cluster com a versão mais recente.

Redis No final de 2013, o Amazon ElastiCache adicionou suporte para implantar clusters Redis. No momento da redação deste artigo, o serviço suporta a implantação do Redis versão 2.8.24 e também várias versões mais antigas.

Além do suporte a objetos fornecido no Memcached, o Redis suporta um rico conjunto de tipos de dados gosta de strings, listas e conjuntos.

Ao contrário do Memcached, o Redis suporta a capacidade de persistir os dados na memória no disco. Isso permite criar snapshots que fazem backup de seus dados e depois recuperar ou replicar a partir dos backups.

Os clusters Redis também podem suportar até cinco réplicas de leitura para descarregar solicitações de leitura. No caso de falha do nó primário, uma réplica de leitura pode ser promovida e se tornar o novo mestre usando grupos de replicação Multi-AZ.

O Redis também possui recursos avançados que facilitam a classificação e classificação de dados. Alguns casos de uso comuns incluem a construção de um cabeçalho para um aplicativo móvel ou o serviço de intermediário de mensagens de alta velocidade em um sistema distribuído.

Com um cluster Redis, você pode aproveitar uma abstração de mensagens de publicação e assinatura que permite dissociar os componentes de seus aplicativos. Uma arquitetura de mensagens de publicação e assinatura oferece a flexibilidade de alterar como você consome as mensagens no futuro sem afetar o componente que está produzindo as mensagens.

 

Nodes e Clusters

Cada implantação do Amazon ElastiCache consiste em um ou mais nós em um cluster. Existem muitos tipos diferentes de nós disponíveis para você escolher, com base no seu caso de uso e nos recursos necessários.

Um único cluster do Memcached pode conter até 20 nós. Os clusters Redis são sempre compostos de um único nó; no entanto, vários clusters podem ser agrupados em um grupo de replicação Redis.

Os tipos de nós individuais são derivados de um subconjunto das famílias de tipos de instância do Amazon EC2, como t2, m3 e r3. Os tipos de nós específicos podem mudar com o tempo, mas hoje eles variam de um tipo de nó t2.micro com 555MB de memória até uma extensão r3.8x com 237GB de memória, com muitas opções entre elas.

A família de nós do cache t2 é ideal para aplicativos de desenvolvimento e de baixo volume com rajadas ocasionais, mas alguns recursos podem não estar disponíveis.

A família m3 é uma boa combinação de computação e memória, enquanto a família r3 é otimizada para cargas de trabalho com muita memória.

 

Dependendo de suas necessidades, você pode optar por ter alguns nós grandes ou muitos nós menores em seu cluster ou grupo de replicação. À medida que a demanda por seu aplicativo for alterada, você também poderá adicionar ou remover nós de tempos em tempos.

Cada tipo de nó vem com uma quantidade pré-configurada de memória, com uma pequena quantidade de memória alocada para o mecanismo de armazenamento em cache e com o próprio sistema operacional.

 

Design para falha

Embora seja improvável, você deve planejar a possível falha de um nó de cache individual.

Para clusters Memcached, você pode diminuir o impacto da falha de um nó de cache usando um número maior de nós com uma capacidade menor, em vez de alguns nós grandes.

Caso o Amazon ElastiCache detecte a falha de um nó, ele provisionará uma substituição e a adicionará novamente ao cluster. Durante esse período, seu banco de dados sofrerá um aumento de carga, porque agora quaisquer solicitações que seriam armazenadas em cache precisarão ser lidas do banco de dados.

Para clusters Redis, o Amazon ElastiCache detectará falhas e substituirá o nó principal. Se um grupo de replicação Multi-AZ estiver ativado, uma réplica de leitura poderá ser promovida automaticamente para primária.

 

Descoberta Automática do Memcached

Para clusters Memcached particionados em vários nós, o Amazon ElastiCache oferece suporte à detecção automática com a biblioteca-cliente fornecida. A descoberta automática simplifica o código do aplicativo, não precisando mais do conhecimento da topologia de infraestrutura do cluster de cache na sua camada de aplicação.

 

Usando a descoberta automática

O cliente de detecção automática oferece aos seus aplicativos a capacidade de identificar automaticamente todos os nós em um cluster de cache e de iniciar e manter conexões com todos esses nós.

O cliente de detecção automática está disponível para plataformas .NET, Java e PHP. Escalonamento O Amazon ElastiCache permite ajustar o tamanho do seu ambiente para atender às necessidades de cargas de trabalho à medida que evoluem com o tempo.

A adição de nós de cache adicionais permite expandir facilmente horizontalmente e atingir níveis mais altos de desempenho de leitura ou gravação. Você também pode selecionar diferentes classes de nós de cache para dimensionar verticalmente.

Escala horizontal O Amazon ElastiCache também adiciona funcionalidade adicional que permite escalar horizontalmente o tamanho do seu ambiente de cache.

Essa funcionalidade difere dependendo do mecanismo de cache que você selecionou. Com o Memcached, você pode particionar seus dados e escalar horizontalmente para 20 nós ou mais.

Com a Descoberta Automática, seu aplicativo pode descobrir nós do Memcached adicionados ou removidos de um cluster.

Um cluster Redis consiste em um único nó de cache que está manipulando transações de leitura e gravação. Clusters adicionais podem ser criados e agrupados em um grupo de replicação Redis. Embora você possa ter apenas um nó manipulando comandos de gravação, pode ter até cinco réplicas de leitura manipulando solicitações somente leitura.

Escalonamento vertical O suporte para escalonamento vertical é mais limitado com o Amazon ElastiCache. Se você deseja alterar o tipo de nó de cache e dimensionar os recursos de computação verticalmente, o serviço não permite diretamente redimensionar seu cluster dessa maneira.

 

No entanto, você pode ativar rapidamente um novo cluster com os tipos de nó de cache desejados e começar a redirecionar o tráfego para o novo cluster. É importante entender que um novo cluster do Memcached sempre começa vazio, enquanto um cluster do Redis pode ser inicializado a partir de um backup.

 

Replicação e Multi-AZ

A replicação é uma técnica útil para fornecer recuperação rápida em caso de falha do nó e também para fornecer volumes muito altos de consultas de leitura além dos recursos de um único nó.

Os clusters do Amazon ElastiCache executando o Redis suportam esses dois requisitos de design. Ao contrário do Redis, os clusters de cache executando o Memcached são serviços autônomos na memória, sem quaisquer serviços de proteção de dados redundantes.

Clusters de cache executando o Redis suportam o conceito de grupos de replicação. Um grupo de replicação consiste em até seis clusters, com cinco deles designados como réplicas de leitura. Isso permite que você dimensione horizontalmente escrevendo código no seu aplicativo para descarregar leituras para um dos cinco clones

 

Grupos de Replicação Multi-AZ

Você também pode criar um grupo de replicação Multi-AZ que permita aumentar a disponibilidade e minimizar a perda de dados. O Multi-AZ simplifica o processo de lidar com uma falha automatizando a substituição e o failover a partir do nó primário.

Caso o nó primário falhe ou não possa ser alcançado, o Multi-AZ selecionará e promoverá uma réplica de leitura para se tornar o novo primário e um novo nó será provisionado para substituir o que falhou.

O Amazon ElastiCache atualizará a entrada DNS do novo nó primário para permitir que seu aplicativo continue processando sem nenhuma alteração na configuração e com apenas uma pequena interrupção.

 

Entenda que a Replicação é Assíncrona

É importante ter em mente que a replicação entre os clusters é realizada de forma assíncrona e haverá um pequeno atraso antes que os dados estejam disponíveis em todos os nós do cluster.

 

Restaurar e Recuperar

Os clusters do Amazon ElastiCache executando o Redis permitem que você persista seus dados da memória no disco e crie uma captura instantânea. Cada snapshot é um clone completo dos dados que podem ser usados ​​para recuperar um ponto específico no tempo ou criar uma cópia para outros fins.

Snapshots não podem ser criados para clusters usando o mecanismo Memcached porque é um armazenamento de chave / valor puramente na memória e sempre começa vazio. O Amazon ElastiCache usa os recursos de backup nativos do Redis e gera um arquivo de backup de banco de dados Redis padrão que é armazenado no Amazon Simple Storage Service (Amazon S3).

Os snapshots exigem recursos de computação e memória para serem executados e podem potencialmente ter um impacto no desempenho de clusters usados ​​com muita força. O Amazon ElastiCache tentará diferentes técnicas de backup, dependendo da quantidade de memória disponível atualmente.

Uma prática recomendada é configurar um grupo de replicação e executar uma captura instantânea em uma das réplicas de leitura em vez do nó principal.

Além dos snapshots iniciados manualmente, os snapshots podem ser criados automaticamente com base em uma programação.

Você também pode configurar uma janela para que a operação de captura instantânea seja concluída e especificar quantos dias de backups você deseja armazenar. Os snapshots manuais são armazenados indefinidamente até que você os exclua.

 

Clusters de Redis de Backup

Use uma combinação de snapshots automáticas e manuais para atender aos seus objetivos de recuperação para o cluster Redis. Memcached é puramente na memória e não possui recursos de backup nativos.

Se o snapshot foi criado automaticamente ou manualmente, o snapshot pode ser usado para criar um novo cluster a qualquer momento. Por padrão, o novo cluster terá a mesma configuração que o cluster de origem, mas você pode substituir essas configurações.

Você também pode restaurar a partir de um arquivo RDB gerado a partir de qualquer outro cluster Redis compatível.

 

Controle de Acesso

O acesso ao cluster do Amazon ElastiCache é controlado principalmente pela restrição do acesso da rede de entrada ao cluster. O tráfego da rede de entrada é restrito pelo uso de grupos de segurança.

Cada grupo de segurança define uma ou mais regras de entrada que restringem o tráfego de origem. Quando implantado dentro de uma Virtual Private Cloud (VPC), cada nó receberá um endereço IP privado dentro de uma ou mais sub-redes que você selecionar.

Nós individuais nunca podem ser acessados ​​da Internet ou de instâncias do Amazon EC2 fora da VPC.

Você pode restringir ainda mais a entrada de rede no nível da sub-rede modificando as ACLs (listas de controle de acesso à rede).

O acesso para gerenciar a configuração e a infraestrutura do cluster é controlado separadamente do acesso ao terminal real do serviço Memcached ou Redis.

 

Usando o serviço AWS Identity and Access Management (IAM), é possível definir políticas que controlam quais usuários da AWS podem gerenciar a infraestrutura do Amazon ElastiCache.

Algumas das principais ações que um administrador pode executar incluem CreateCacheCluster, ModifyCacheCluster ou DeleteCacheCluster. Os clusters Redis também oferecem suporte às ações CreateReplicationGroup e CreateSnapshot, entre outras.