07 - Osvaldo Daibert - Cenários para cache de dados distribuidos

22
Identificando e implementando cenários para caches de dados distribuídos @daibert http://daibert.wordpress.com

description

O objetivo desta apresentação é mostrar conceitos de caches distribuídos e compara-los com caches locais. Também iremos identificar cenários locais e da nuvem indicados para utilização de caches de dados distribuídos. Apresentaremos padrões de projeto de implementação de caches. E ainda: É possível criar um banco de dados sem persistência dos dados em disco? Descubra nessa sessão.

Transcript of 07 - Osvaldo Daibert - Cenários para cache de dados distribuidos

Page 1: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Identificando e implementando cenários para caches de dados distribuídos

@daibert http://daibert.wordpress.com

Page 2: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

• Os dados devem ser acessados por aplicações presentes em todos os lugares: Local, Web, Federação

• Uma série de aplicações devem acessar o mesmo dado, ao mesmo tempo, porém de forma diferente

• Aplicações cada vez com mais dados

• Alta disponibilidade

• Aplicações de Missão Crítica

• Aplicações devem ser “baratas” para se escalar

Requisitos

• N camadas

• Regras de negócio e dados distribuídos, aonde os dados “moram” perto das regras

• Replicação de dados

• Criação de caches de memória pela equipe de desenvolvimento do projeto

Arquiteturas Utilizadas

Cenário Atual das Aplicações

Page 3: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Principais Mercados

Commonalities: Extreme transaction volume, store for transient processing

Cenários

Web

• Compartilhamento de sessões HTTP através de farms de servidores

• Carrinho de compras em ambiente de Farm de Servidores Web

• Aplicações Online

• Armazenamento de dados pré-calculados acessados com frequência

LOB • Catálogos de produtos entre empresas

• Armazenar referência de dados utilizados frequentemente por aplicações ERP

Telco • Cellular/VOIP: Computar utilização, informações de sessões ativas, Cargas de pré-

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

Financeiro • Portifólio de dados de usuários

• Simulações de carteiras de risco e cenários

Page 4: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

O que é cache?

• Uma área de armazenamento temporária onde os dados são armazenados para acesso rápido

Page 5: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Cache Local

Servidor de Aplicação 01

Servidor de Aplicação 02

• Normalmente utilizando variáveis de Sessão ou Aplicação

Page 6: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Cache Distribuido

Visão unificada do Cache

Clientes espalhados por várias máquinas

Clientes acessam o Cache como se fossem em um

único repositório

Camada de Cache distribui

os dados através de vários nós

Page 7: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

O que viabiliza?

• 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

Tendência de mercado

Máquinas multi-core memória

Page 8: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

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

Page 9: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Aonde o Cache Distribuido se “encaixa" ?

Camada de aplicação IIS apps, ASP.NET, .NET Apps,

COM+, WCF

Client Desktop, Mobile, WPF

Web Client AJAX, Silverlight, ASPX

Camada de dados SQL, XML

Camada de Cache

Page 10: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Tipos de Dados

Page 11: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

• 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)

Dados de Consulta

Cenário: Redes Sociais

Page 12: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

• 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

Dados Transacionais

Cenário: Aplicações Coorporativas

Page 13: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

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

Page 14: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Tipos de Cache Distribuido

Page 15: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Cliente2 Cliente1

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)

Routing layer Routing layer

Cache2

Cache1

Regiões Primárias

K2, V2

Regiões Primárias

K1, V1

Cache3

Regiões Primárias

K3, V3

Page 16: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Cliente Velocity

Cache Local

Cliente

Cache Local

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)

Routing layer Routing layer

Cache2

Cache1

Região Primária

K2, V2

Região Primária

K1, V1

Cache3

Região Primária

K3, V3

K2, V2 K2, V2

Page 17: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Client Client

Cache2

Região Secundária

Cache1

Região Secundária

Cache3

Região Secundária

Região Primária

Alta Disponibilidade

Put(K2, v2)

K2, V2

K2, V2

Get(K2)

Região Primária

Região Primária

K3, V3 K1, V1 K1, V1 K2, V2 K3, V3

K3, V3 K1, V1

Routing layer Routing layer

• 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

Page 18: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Cache2

Cache1

Cache3

Regiões Replicadas

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)

K2, V2

Get(K2)

Regiões Replicadas

Regiões Replicadas

K3, V3 K1, V1 K1, V1 K3, V3 K3, V3 K1, V1

K2, V2 K2, V2

Routing layer

Page 19: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

// ------------------------------------------------------ // 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");

//------------------------------------------------------- // Get/Put simples catalogo.Put(“Item01", new Toy(“Autorama", .,.)); // Recuperando um item Toy toyObj = (Toy)catalogo.Get(“Item01");

API

Page 20: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

object data = null; var key = "DataKey"; data = cache.Get(key); if (data == null) { data = GetData(); cache.Add(key, data); }

Cache Aside Pattern

Page 21: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Principais Pordutos de Mercado

MemCache

Page 22: 07  - Osvaldo Daibert - Cenários para cache de dados distribuidos

Perguntas

Obrigado! @daibert

http://daibert.wordpress.com