

# DAX: como ele funciona
<a name="DAX.concepts"></a>

O Amazon DynamoDB Accelerator (DAX) foi projetado para ser executado dentro de um ambiente da Amazon Virtual Private Cloud (Amazon VPC). O serviço Amazon VPC define uma rede virtual que lembra muito um datacenter tradicional. Com uma VPC, você tem controle sobre o intervalo de endereços IP, as sub-redes, as tabelas de roteamento, os gateways de rede e as configurações de segurança. Você pode iniciar um cluster do DAX em sua rede virtual e controlar o acesso ao cluster usando grupos de segurança da Amazon VPC.

**nota**  
Se sua conta da AWS foi criada após 4 de dezembro de 2013, você já tem uma VPC padrão em cada região da AWS. A VPC está pronta para ser usada imediatamente, sem precisar executar quaisquer etapas de configuração adicionais.  
Para obter mais informações, consulte [VPC padrão e sub-redes padrão](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html) no *Guia do usuário da Amazon VPC*.

O diagrama a seguir mostra uma visão geral de alto nível do DAX:

![\[Diagrama de fluxo de trabalho que mostra a interação do aplicativo, do cliente do DAX e do cluster do DAX em uma VPC.\]](http://docs.aws.amazon.com/pt_br/amazondynamodb/latest/developerguide/images/dax_high_level.png)


Para criar um cluster do DAX, você deve usar o Console de gerenciamento da AWS. A não ser que você especifique o contrário, o cluster do DAX será executado em sua VPC padrão. Para executar sua aplicação, você deve executar uma instância do Amazon EC2 na Amazon VPC. Em seguida, você implanta a aplicação (com o cliente do DAX) na instância do EC2.

Em tempo de execução, o cliente do DAX direciona todas as solicitações da API do DynamoDB da sua aplicação para o cluster do DAX. Se o DAX puder, ele processará uma dessas solicitações da API diretamente. Caso contrário, ele passará a solicitação para o DynamoDB. 

Por fim, o cluster do DAX retorna os resultados para sua aplicação.

**Topics**
+ [Como o DAX processa solicitações](#DAX.concepts.request-processing)
+ [Cache de itens](#DAX.concepts.item-cache)
+ [Cache de consultas](#DAX.concepts.query-cache)

## Como o DAX processa solicitações
<a name="DAX.concepts.request-processing"></a>

Um cluster do DAX consiste em um ou mais nós. Cada nó executa sua própria instância do software de armazenamento em cache do DAX. Um dos nós serve como o nó primário do cluster. Os nós adicionais (se houver) servem como réplicas de leitura. Para obter mais informações, consulte [Nós](DAX.concepts.cluster.md#DAX.concepts.nodes).

Sua aplicação pode acessar o DAX especificando o endpoint do cluster do DAX. O software cliente do DAX funciona com o endpoint do cluster para executar balanceamento de carga e roteamento inteligentes.

### Operações de leitura
<a name="DAX.concepts.request-processing-read"></a>

O DAX pode responder às seguintes chamadas de API:
+ `GetItem`
+ `BatchGetItem`
+ `Query`
+ `Scan`

Se a solicitação especificar *leituras finais consistentes* (o comportamento padrão), ela tentará ler o item do DAX:
+ Se o DAX tiver o item disponível (um *acerto de cache*), o DAX retornará o item para a aplicação sem acessar o DynamoDB.
+ Se o DAX não tiver o item disponível (um *erro de cache*), o DAX passará a solicitação para o DynamoDB. Ao receber a resposta do DynamoDB, o DAX retorna os resultados para a aplicação. Mas também grava os resultados no cache do nó primário.

**nota**  
Se houver réplicas de leitura no cluster, o DAX manterá automaticamente as réplicas sincronizadas com o nó principal. Para obter mais informações, consulte [Clusters](DAX.concepts.cluster.md#DAX.concepts.clusters).

Se a solicitação especificar *leituras fortemente consistentes*, o DAX passa a solicitação para o DynamoDB. Os resultados do DynamoDB não são armazenados em cache no DAX. Em vez disso, eles são simplesmente retornados ao aplicativo.

### Operações de gravação
<a name="DAX.concepts.request-processing-write"></a>

As seguintes operações da API do DAX são consideradas "write-through":
+ `BatchWriteItem`
+ `UpdateItem`
+ `DeleteItem`
+ `PutItem`

Com essas operações, os dados são gravados primeiro na tabela do DynamoDB e no cluster do DAX. A operação é bem-sucedida somente se os dados são gravados com êxito na tabela *e* no DAX.

### Outras operações
<a name="DAX.concepts.request-processing-other"></a>

O DAX não reconhece as operações do DynamoDB para gerenciar tabelas (tais como `CreateTable`, `UpdateTable` e assim por diante). Se a sua aplicação precisar executar essas operações, ela precisará acessar o DynamoDB diretamente em vez de usar o DAX.

Para obter informações detalhadas sobre a consistência do DAX e do DynamoDB, consulte [Modelos de consistência do DAX e do DynamoDB](DAX.consistency.md).

Para obter informações sobre como as transações funcionam no DAX, consulte [Usar APIs transacionais no DynamoDB Accelerator (DAX)](transaction-apis.md#transaction-apis-dax).

### Limitação de taxa de solicitações
<a name="DAX.concepts.request-processing-throttling"></a>

Se o número de solicitações enviadas ao DAX exceder a capacidade de um nó, o DAX limitará a taxa na qual aceita solicitações adicionais retornando uma [ThrottlingException](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/CommonErrors.html#CommonErrors-ThrottlingException). O DAX avalia continuamente a utilização da CPU para determinar o volume de solicitações que ela pode processar enquanto mantém um estado de cluster íntegro.

Você pode monitorar a [métrica ThrottledRequestCount](dax-metrics-dimensions-dax.md) publicada pelo DAX no Amazon CloudWatch. Se você vir essas exceções regularmente, considere [aumentar o cluster](DAX.cluster-management.md#DAX.cluster-management.scaling).

## Cache de itens
<a name="DAX.concepts.item-cache"></a>

O DAX mantém um *cache de itens* para armazenar os resultados das operações `GetItem` e `BatchGetItem`. Os itens no cache representam dados finais consistentes do DynamoDB e são armazenados por seus valores de chave primária.

Quando uma aplicação envia uma solicitação de `GetItem` ou `BatchGetItem`, o DAX tenta ler os itens diretamente do cache de itens usando os valores de chave especificados. Se os itens forem encontrados (acerto de cache), o DAX os retornará imediatamente para a aplicação. Se os itens não forem encontrados (erro de cache), o DAX envia a solicitação para o DynamoDB. O DynamoDB processa as solicitações usando leituras eventualmente consistentes e retorna os resultados para o DAX. O DAX armazena-os no cache de itens e, em seguida, retorna-os para a aplicação.

O cache de itens tem uma configuração de vida útil (TTL) que é 5 minutos por padrão. O DAX atribui uma marca de data e hora para cada item que ele grava no cache de itens. Um item expira se ele permaneceu no cache por mais tempo que a configuração de TTL. Se você emitir uma solicitação de `GetItem` em um item expirado, isso será considerado um erro de cache, e o DAX enviará a solicitação de `GetItem` ao DynamoDB.

**nota**  
Você pode especificar a configuração de TTL para o cache de itens ao criar um novo cluster do DAX. Para obter mais informações, consulte [Gerenciar clusters do DAX](DAX.cluster-management.md).

O DAX também mantém uma lista Last Recently Used (LRU – Menos usados recentemente) para o cache de itens. A lista de LRU rastreia quando um item foi gravado pela primeira vez no cache, e quando o item foi lido pela última vez no cache. Se o cache de itens encher, o DAX removerá os itens mais antigos (mesmo que ainda não tenham expirado) para abrir espaço para novos itens. O algoritmo de LRU está sempre habilitado para o cache de itens, e não pode ser configurado pelo usuário.

Se você especificar zero como a configuração de TTL do *cache de itens*, os itens no cache de itens só serão atualizados devido a uma remoção por LRU ou a uma operação ["write-through"](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DAX.concepts.html#DAX.concepts.request-processing-write).

Para obter informações detalhadas sobre a consistência do cache de itens no DAX, consulte [Comportamento do cache de itens do DAX](DAX.consistency.md#DAX.consistency.item-cache).

## Cache de consultas
<a name="DAX.concepts.query-cache"></a>

O DAX também mantém um *cache de consultas* para armazenar os resultados das operações `Query` e `Scan`. Os itens nesse cache representam conjuntos de resultados de consultas e verificações nas tabelas do DynamoDB. Esses conjuntos de resultados são armazenados por seus valores de parâmetro.

Quando uma aplicação envia uma solicitação de `Query` ou `Scan`, o DAX tenta ler um conjunto de resultados correspondente no cache de consultas usando os valores dos parâmetros especificados. Se o conjunto de resultados for encontrado (acerto de cache), o DAX o retornará para a aplicação imediatamente. Se o conjunto de resultados não for encontrado (erro de cache), o DAX enviará a solicitação para o DynamoDB. O DynamoDB processa as solicitações usando leituras finais consistentes e retorna o conjunto de resultados para o DAX. O DAX o armazena no cache de itens e, em seguida, retorna-o para a aplicação.

**nota**  
Você pode especificar a configuração de TTL para o cache de consultas ao criar um novo cluster do DAX. Para obter mais informações, consulte [Gerenciar clusters do DAX](DAX.cluster-management.md).

O DAX também mantém uma lista de LRU para o cache de consultas. A lista rastreia quando um conjunto de resultados foi gravado pela primeira vez no cache, e quando o resultado foi lido pela última vez no cache. Se o cache de consultas encher, o DAX removerá os conjuntos de resultados mais antigos (mesmo que eles ainda não tenham expirado) para abrit espaço para novos conjuntos de resultados. O algoritmo LRU está sempre ativado para o cache de consultas, e não pode ser configurado pelo usuário.

Se você especificar zero como configuração de TTL do *cache de consultas*, a resposta da consulta não será armazenada em cache.

Para obter informações detalhadas sobre a consistência do cache de consultas no DAX, consulte [Comportamento do cache de consultas DAX](DAX.consistency.md#DAX.consistency.query-cache).