O documento discute cenários para implementação de caches de dados distribuídos. Ele descreve requisitos comuns como alta disponibilidade e escalabilidade, bem como diferentes tipos de dados e arquiteturas de cache, incluindo cache particionado, replicado e com alta disponibilidade. Apresenta também alguns produtos comerciais de cache distribuído.
2. Cenário Atual das Aplicações
Requisitos
• Os dados devem ser acessados por
aplicações presentes em todos os lugares:
Local, Web, Federação Arquiteturas Utilizadas
• N camadas
• Uma série de aplicações devem acessar o
mesmo dado, ao mesmo tempo, porém de
• Regras de negócio e dados distribuídos,
forma diferente
aonde os dados “moram” perto das regras
• Aplicações cada vez com mais dados
• Replicação de dados
• Alta disponibilidade
• Criação de caches de memória pela equipe
de desenvolvimento do projeto
• Aplicações de Missão Crítica
• Aplicações devem ser “baratas” para se
escalar
3. Principais Mercados
Cenários
• Compartilhamento de sessões HTTP através de farms de servidores
• Carrinho de compras em ambiente de Farm de Servidores Web
Web
• Aplicações Online
• Armazenamento de dados pré-calculados acessados com frequência
• Catálogos de produtos entre empresas
LOB
• Armazenar referência de dados utilizados frequentemente por aplicações ERP
• Cellular/VOIP: Computar utilização, informações de sessões ativas, Cargas de pré-
Telco pagos
• SMS: Conteúdo de mensagens / notificações / tarifações
Turismo • Comparação de preços entre companhias / Disponibilidade de passagens aéreas
Segurança • Processamento de dados de rede e detecção de intrusão
• Portifólio de dados de usuários
Financeiro
• Simulações de carteiras de risco e cenários
4. O que é cache?
• Uma área de armazenamento temporária
onde os dados são armazenados para acesso
rápido
5. Cache Local
Servidor de Servidor de
Aplicação 01 Aplicação 02
• Normalmente utilizando variáveis de Sessão ou Aplicação
6. Cache Distribuido
Clientes
espalhados por
várias máquinas
Clientes acessam o
Cache como se
fossem em um
Visão unificada do Cache único repositório
Camada de
Cache distribui
os dados
através de
vários nós
7. O que viabiliza?
Tendência de mercado
Máquinas multi-core memória
• Rápida queda do valor das memórias, possibilitando maior poder de
armazenagem de dados em memória
• Facilidade de troca e melhoria de hardware com Virtualização
• Multi-core CPUs, custo reduzido de memória flash
8. Quem deve criar a infraestrutura de
cache para as aplicações?
• Possíveis respostas:
– Desenvolvedores de aplicações
– Empresas de software, como a Microsoft ou
Oracle
Os desenvolvedores devem estar focados em construir soluções para o negócio
do cliente e não em ferramentas para aplicações
9. Aonde o Cache Distribuido se “encaixa" ?
Client Web Client
Desktop, Mobile, WPF AJAX, Silverlight, ASPX
Camada de aplicação
IIS apps, ASP.NET, .NET Apps,
COM+, WCF
Camada de dados
Camada de Cache
SQL, XML
11. Dados de Consulta
• Dados para consulta
– Dados agregados ou trasformados
• Cada versão é única
• Dados atualizados com frequência
• Exemplos
– Alicações Web e Coorporativas como catalogos de produtos
– Usuários, Dados de Funcionários
• Tipo de Acesso
– Maior quantidade de leitura
– Acesso concorrente e compartilhado
• Escalabilidade
– Maior número de acessos
• Funcionalidade
– Acesso baseado em chaves
– Buscas e filtro
– Carregamento local (Servidor Web) Cenário: Redes Sociais
12. Dados Transacionais
• Dados gerados a partir de atividade transacionais nas aplicações
– Dados Históricos
• Exemplos
– Carrinho de compras
– Session State
– Aplicações coorporativas B2B
• Tipo de Acesso
– Leitura e gravação
– Acesso exclusivo
• Escalabilidade
– Muitos dados e acessos simultâneos
• Funcionalidades
– Acesso baseado em chaves
– Transações
Cenário: Aplicações Coorporativas
13. Dados Distribuídos
• Dados alterados por transações
– Transações “partidas”
• Exemplos
– Inventário de venda de passagens
• Tipo de Acesso
– Leitura e gravação
– Acesso compartilhado aos dados
• Funcionalidades
– Acesso baseado em chaves
– Transações
• Escalabilidade
– Grande número de acessos simultâneos
Cenário: Inventário de venda de passagens
15. Cache Particionado (Mais memória, sem HA)
• Put (K2, V2) executado na aplicação do Cliente1
– Camada de roteamento envia o item V2 para o Cache2
• Get (K2) executado na aplicação do Cliente2
– Cliente 2 roteia para o Cache 2 para pegar o item V2
Put(K2, v2) Get(K2)
Cliente1 Cliente2
Routing layer Routing layer
Cache1 Cache2 Cache3
Regiões Primárias Regiões Primárias Regiões Primárias
K1, V1 K2, V2 K3, V3
16. Cache Particionado com Cache Local
(Mais memória, maior performance, sem HA)
• Cache local pode acelerar acesso aos dados no cliente
Put(K2, v2) Get(K2)
Cliente Cliente Velocity
Cache Local K2, V2 Cache Local K2, V2
Routing layer Routing layer
Cache1 Cache2 Cache3
Região Primária Região Primária Região Primária
K1, V1 K2, V2 K3, V3
17. Alta Disponibilidade
• Put (K2, V2) on Cache1
– As alterçaões são replicadas do Cache2 para os demais nós
– Cache2 aguarda o “ok” da atualização dos outros nós
• Get (K2) on Cache3
– Cache3 verifica se os dados são iguais ao do Cache2 e, caso não seja, se atualiza
Put(K2, v2) Get(K2)
Client Client
Routing layer Routing layer
Cache1 Cache2 Cache3
Região Primária Região Primária Região Primária
K1, V1 K2, V2 K3, V3
Região Secundária Região Secundária Região Secundária
K3, V3 K2, V2 K3, V3 K1, V1 K2, V2 K1, V1
18. Cache Replicado (Maior performance com HA)
• Put (K2, V2) on Cache1
– Cache2 é atualizado e notifica o Cache1 e o Cache3
– Cache2 replica de forma assíncrona os dados para o Cache1 e Cache2
• Get on cache3
– O Cache 3 lê do seu repositório local os dados e retorna o valor do Item
Put(K2, v2) Get(K2)
Cache1 Routing layer Cache2 Cache3
Regiões Replicadas Regiões Replicadas Regiões Replicadas
K2, V2
K2, V2
K2, V2
K3, V3 K1, V1 K3, V3 K1, V1 K3, V3 K1, V1
19. API
//-------------------------------------------------------
// Get/Put simples
catalogo.Put(“Item01", new Toy(“Autorama", .,.));
// Recuperando um item
Toy toyObj = (Toy)catalogo.Get(“Item01");
// ------------------------------------------------------
// Get/Put por região
catalogo.CreateRegion(“Brinquedos");
// Ambos objetos são inseridos na mesma região
catalogo.Put(“Brinquedos", “Item02", new Toy( .,.));
catalogo.Put(“Brinquedos", “SubItem02", new ToyParts(…));
Toy toyObj = (Toy)catalogo.Get(“Brinquedos", “Item02");
20. Cache Aside Pattern
object data = null;
var key = "DataKey";
data = cache.Get(key);
if (data == null)
{
data = GetData();
cache.Add(key, data);
}