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