Hazelcast

in-memory data grid
Agenda
•   Introdução
•   Mercado
•   Particionamento dos dados
•   Funcionalidades
•   Integrações
•   Enterprise Edition
•   Demonstração
Hazelcast
• In-memory Data Grid (IMDG):
  –   Dados distribuídos e particionados;
  –   Altamente disponíveis;
  –   Sem interrupções;
  –   “shared nothing”

• Dados distribuídos:
  – List, Set, Map e MultiMap;
  – Lock;
  – Queue e Topic.
java.util.Map
Local                       Distribuído
import java.util.Map;       import java.util.Map;
import java.util.HashMap;   import com.hazelcast.core.Hazelcast;

Map map = new HashMap();    Map map = Hazelcast.getMap(“mymap”);

map.put(“1”, “value”);      map.put(“1”, “value”);

map.get(“1”);               map.get(“1”);
Soluções no Mercado
Open source           Comercial
• Hazelcast           • Oracle Coherence
• JBoss Infinispan    • IBM WebSphere eXtreme
                        Scale
Particionamento dos dados
Funcionalidades
• Persistence
   – write-through
   – write-behind
   – read-through
com.hazelcast.core.MapStore
    – loadAllKeys();
    – loadAll(keys);
    – load(key);
    – store(key, value);
    – delete(key);
Funcionalidades
• NIO                 • Backup
• Eviction            • Distributed Query
                         – SqlPredicate
  – LRU
                         – Indexing
  – LFU
                      • Near Cache
  – time-to-live
                      • Entry Statistics
Integrações
Spring                    Hibernate
• Configuração            • Second level cache
• Contexto
• Cache (JSR-107)
   – @Cacheable
   – @CacheEvict
Map (List, Set, MultiMap)
import com.hazelcast.core.Hazelcast;
import java.util.Map;
import java.util.Collection;

Map<String, Customer> mapCustomers =
Hazelcast.getMap("customers");

mapCustomers.put("1", new Customer("Joe", "Smith"));
mapCustomers.put("2", new Customer("Ali", "Selam"));
mapCustomers.put("3", new Customer("Avi", "Noyan"));

Collection<Customer> colCustomers = mapCustomers.values();
for (Customer customer : colCustomers) {
    // process customer
}
Distributed Lock
import com.hazelcast.core.Hazelcast;
import java.util.concurrent.locks.Lock;

Lock lock = Hazelcast.getLock(myLockedObject);

lock.lock();
try {
    // do something here
} finally {
    lock.unlock();
}
Distributed Query
import com.hazelcast.core.IMap;
import com.hazelcast.query.SqlPredicate;

IMap map = Hazelcast.getMap("employee");

SqlPredicate sql = new SqlPredicate("active
AND age < 30");

Set<Employee> employees = (Set<Employee>)
map.values(sql);
Enterprise Edition
• Elastic Memory
  – Possível utilizar memória além da heap
• JAAS
• C# client
• Management Center
  – Gratuito para até 2 nós
Demonstração




https://github.com/brunolellis/hazelcast-demo
Conclusão
Hibernate + Cache segundo nível   DAO (java.util.Map) + MapStore
Referências
• http://www.hazelcast.com/files/hazelcast-
  presentation.pdf
• http://hazelcast.com/docs/2.2/manual/single
  _html
• http://highscalability.com/blog/2011/12/21/i
  n-memory-data-grid-technologies.html
Links interessantes
• Gartner Selected Hazelcast as a “Cool Vendor”
• Mozilla: Caching and processing 2TB on 50
  Node Hazelcast Cluster
• Running 100 Node Hazelcast Cluster on
  Amazon EC2
• www.github.com/hazelcast
Bruno Lellis
• http://about.me/brunolellis

Hazelcast

  • 1.
  • 2.
    Agenda • Introdução • Mercado • Particionamento dos dados • Funcionalidades • Integrações • Enterprise Edition • Demonstração
  • 3.
    Hazelcast • In-memory DataGrid (IMDG): – Dados distribuídos e particionados; – Altamente disponíveis; – Sem interrupções; – “shared nothing” • Dados distribuídos: – List, Set, Map e MultiMap; – Lock; – Queue e Topic.
  • 4.
    java.util.Map Local Distribuído import java.util.Map; import java.util.Map; import java.util.HashMap; import com.hazelcast.core.Hazelcast; Map map = new HashMap(); Map map = Hazelcast.getMap(“mymap”); map.put(“1”, “value”); map.put(“1”, “value”); map.get(“1”); map.get(“1”);
  • 5.
    Soluções no Mercado Opensource Comercial • Hazelcast • Oracle Coherence • JBoss Infinispan • IBM WebSphere eXtreme Scale
  • 6.
  • 7.
    Funcionalidades • Persistence – write-through – write-behind – read-through com.hazelcast.core.MapStore – loadAllKeys(); – loadAll(keys); – load(key); – store(key, value); – delete(key);
  • 8.
    Funcionalidades • NIO • Backup • Eviction • Distributed Query – SqlPredicate – LRU – Indexing – LFU • Near Cache – time-to-live • Entry Statistics
  • 9.
    Integrações Spring Hibernate • Configuração • Second level cache • Contexto • Cache (JSR-107) – @Cacheable – @CacheEvict
  • 10.
    Map (List, Set,MultiMap) import com.hazelcast.core.Hazelcast; import java.util.Map; import java.util.Collection; Map<String, Customer> mapCustomers = Hazelcast.getMap("customers"); mapCustomers.put("1", new Customer("Joe", "Smith")); mapCustomers.put("2", new Customer("Ali", "Selam")); mapCustomers.put("3", new Customer("Avi", "Noyan")); Collection<Customer> colCustomers = mapCustomers.values(); for (Customer customer : colCustomers) { // process customer }
  • 11.
    Distributed Lock import com.hazelcast.core.Hazelcast; importjava.util.concurrent.locks.Lock; Lock lock = Hazelcast.getLock(myLockedObject); lock.lock(); try { // do something here } finally { lock.unlock(); }
  • 12.
    Distributed Query import com.hazelcast.core.IMap; importcom.hazelcast.query.SqlPredicate; IMap map = Hazelcast.getMap("employee"); SqlPredicate sql = new SqlPredicate("active AND age < 30"); Set<Employee> employees = (Set<Employee>) map.values(sql);
  • 13.
    Enterprise Edition • ElasticMemory – Possível utilizar memória além da heap • JAAS • C# client • Management Center – Gratuito para até 2 nós
  • 14.
  • 15.
    Conclusão Hibernate + Cachesegundo nível DAO (java.util.Map) + MapStore
  • 16.
    Referências • http://www.hazelcast.com/files/hazelcast- presentation.pdf • http://hazelcast.com/docs/2.2/manual/single _html • http://highscalability.com/blog/2011/12/21/i n-memory-data-grid-technologies.html
  • 17.
    Links interessantes • GartnerSelected Hazelcast as a “Cool Vendor” • Mozilla: Caching and processing 2TB on 50 Node Hazelcast Cluster • Running 100 Node Hazelcast Cluster on Amazon EC2 • www.github.com/hazelcast
  • 18.

Editor's Notes

  • #7 Cluster Member:5 milhões de objetos com 5 nós no cluster: cadanóterá 1 milhão de objetos + 1 milhão de objetos-backupSuperClient: como um membro do cluster, mas semarmazenamento de dadosdeveestar no mesmo datacenter (cluster overhead)Native client (Java, C#)escalamelhor com baixo overheadregrageraléutilizar native client paradepoistestarSuperClientAcesso via memcache e REST
  • #8 Persistencewrite-through (síncrono): certeza das seguintesaçõesocorrerem no momento do map.put(key, value): MapStore.store(key, value)chamado com sucesso; item namemóriaatualizado; Itens de backup propagados.write-behind (assíncrono):Item namemóriaatualizado;Itens de backup propagados;Item marcadocomo “dirty” e, após write-delay-seconds serápersistido;read-through: se map.get(key) for null, carrega do MapLoaderMapLoader.loadAllKeys(): utilizadoparapré-carregar a cache no primeiroacesso (Hazelcast.getMap(“mymap”))Se retornar “null”, nada serácarregado;Possibilidade de retornartodas as chavesouapenas as maisutilizadas;Forma maisrápida de carregar a cache, poiscadanóseráresponsávelporsua “porção” de chaves;
  • #9 NIOEviction LRU (least recently used – remove o maisantigo)LFU (least frequently used – remove o menosutilizado – problema?)Time-to-live-seconds (independente do algoritmo, se for diferente de 0, itensmaisvelhosserãoremovidos)BackupPossibilidade de configurarquantascópiasserãodistribuídas entre osnós de forma e de que forma (síncronaouassíncrona)Distributed QueryPossibilidade de fazer um “select” em um Imap, suportaalgumassintaxes do SQL (AND, OR, expressões =, !=, &gt;, &lt;, IN, LIKE, BETWEEN;Tambémpossui API semelhante a JPA;Cadanóvaiprocessar a query;Adicionaríndiceagilizamuito a busca, mas afeta a escrita, comoembanco de dados.Near CacheSe um membroestálendo o item k muitasvezes, entãoépossívelevitartodoestetráfego da redetrazendo o item k paraestemembro;Algumasobservações: JVM vaiter dados “extras” armazenados; detalhes com invalidação e consistência;Entry StatisticsVáriasinformaçõessobrecada item do Map