Infinispan

Post on 05-Jul-2015

1,142 views 1 download

description

quick introduction to Infinispan, JBug Roma and Jug Sardegna

transcript

Non puoi evitare le Cloud

● Le cloud in ogni forma● Come SaaS, PaaS, IaaS

● Ovunque● Pubbliche: Amazon, Google, GoGrid, RackSpace● Private: Eucalyptus, VMWare, IBM

● Datacenter tradizionali● Mercato di nicchia● Le cloud come mainstream

Dati sulla cloud

● Nuovi pattern architetturali● Le macchine sono stateless, effimere● IP dinamici● Servizi dinamici

● Database sono problematici● Storage tradizionali non si adattano alla cloud

● Scalabilità● I database sono ancora il bottleneck● ...e single point of failure!

Soluzione: Data Grids!

● Data Grids sono perfetti per le cloud:● Fortemente scalabili● Nessun single point of failure● Si adatta ai nodi effimeri● Latenza molto bassa

● Data Grids:● Amazon SimpleDB usa Dynamo● Infinispan, etc..● Altre offerte commerciali e open source

Soluzione: Data Grids!

● Veloci!● Latenza minima, uso minimale dei dischi

● La memoria è due ordini di grandezza più veloce

● Accesso concorrente ottimizzato● IO su disco è sempre un impedimento alla

concorrenza● La memoria è più adatta all'uso concorrente

● Highly scalable data grid platform● 100% open source licensed (LGPL)● Based on some JBoss Cache code

● But mostly all-new!

● JBoss Cache is a clustered caching library● Infinispan is a data grid platform

● JBoss Cache uses a tree-structured API● Infinispan is a Map. Like JSR-107’s JCACHE

Complicato?

Tutti conoscono Map<?,?>

CacheManager cm = new DefaultCacheManager("infin-cfg.xml");Cache cache1 = cm.getCache("cache1");

Map distMap = cache1;distMap.put( "chiave", "valore" );distMap.get( "altraChiave" );

ConcurrentMap concurrentDistMap = cm.getCache("cache2");concurrentDistMap.replace( "k", "atteso", "nuovo" );

Map, arricchito

CacheManager cm = new DefaultCacheManager("infi-cfg.xml");Cache cache1 = cm.getCache("cache1");

cache1.addListener( arg0 );

cache1.putAsync( arg0, arg1 );cache1.removeAsync( arg0 );

cache1.startBatch();

AdvancedCache advancedCache = cache1.getAdvancedCache();advancedCache.withFlags( Flag.SKIP_REMOTE_LOOKUP ) .put( arg0, arg1 );

Caratteristiche

● Strutture interne efficienti● CAS totale● Synchronized assente● Contenitori di dati naturalmete ordinate

– Molto efficiente per gestire policy di eviction

● Serializzazione ottimizzata● JBoss Marshalling

– payloads minimali + poolable streams

Ereditati da JBoss Cache

● JTA transactions

● Replicated data structure

● Eviction, cache persistence

● Notifications and eventing API

● JMX reporting

● Fine-grained replication

● MVCC locking

● Non-blocking state transfer techniques

● Query API

● Custom (non-JDK) marshalling

Nuove funzioni

● Consistent hash based data distribution● Map API semplicissima (JSR-107 compliant)● modulo compatibile memcached Client/server ● REST API● Non limitata a piattaforme JVM● Console di management basata su JOPR● Distributed executors

● Map/reduce programming model made easy!

Cache distribuita

● Consistent hash based data distribution● Permette di scalare su cluster grandi● Test in corso su cluster di migliaia di nodi

● Cache locale “L1” per letture migliorate● Invalidazione distribuita

● Ribilanciamento dinamico● Non presenta single-point-of-failure

Memoria condivisa

Storage esterno

Storage esterno

Configurazioni Avanzate

<?xml version="1.0" encoding="UTF-8"?><infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:4.0 http://www.infinispan.org/schemas/infinispan-config-4.0.xsd" xmlns="urn:infinispan:config:4.0" />

<infinispan />

Esempio: Scarlet

Configurazioni Avanzate

Come partecipare?

● Provalo!● Segnala problemi: non solo nel codice● Suggerisci nuove feature● Testa i tuoi casi d'uso particolari

● E raccontaceli

● Collabora con lo sviluppo● Sviluppo open e democratico● Priorità discusse pubblicamente● Già alcuni committer “core” esterni a Red Hat