Top Banner
Infinispan - NoSQL für den Enterprise Java Orientation in Objects GmbH Weinheimer Str. 68 68309 Mannheim www.oio.de [email protected] Version: Alltag 1.2
47

Infinispan - NoSQL für den Enterprise Java Alltag

May 06, 2015

Download

Technology

gedoplan

Vortrag auf dem Expertenkreis Java von
Christian Dedek, Orientation in Objects GmbH
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Infinispan - NoSQL für den Enterprise Java Alltag

Infinispan - NoSQL für den Enterprise Java

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected]:

Alltag

1.2

Page 2: Infinispan - NoSQL für den Enterprise Java Alltag

Ihr Sprecher

Christian Dedek

Trainer, Berater, Entwickler

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 2

SchwerpunkteSoftwarearchitektur

Qualitätsmanagement Performanceoptimierung

Page 3: Infinispan - NoSQL für den Enterprise Java Alltag

Gliederung

• NoSQL und Java EE

• Infinispan

• Integrationsszenarien

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Ausblick

3

Page 4: Infinispan - NoSQL für den Enterprise Java Alltag

Gliederung

• NoSQL und Java EE

• Infinispan

• Integrationsszenarien

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Ausblick

4

Page 5: Infinispan - NoSQL für den Enterprise Java Alltag

NoSQL vs. Java EE

• NoSQL– Datenspeicher ohne festgelegte Tabellenschemata– skalieren horizontal– keine strenge Spezifikation( viele gut diskutierte/erprobte Konzepte)– viele Implementierungen auf verschiedenen Konzepten basierend

• Java EE– strenge Spezifikation einer Softwarearchitektur

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

– strenge Spezifikation einer Softwarearchitektur – transaktionsbasierte Ausführung von Java-Komponenten– auf transkaktionsbasiertem Konzept beruhende Teilstandards

• JTA/JCA/JPA/JMS/JDBC

– Horizontale Skalierung als Konzept für High Availability• Antwortzeiten• Ausfall von Knoten

– (insbesondere gedacht für Web-Anwendungen)

5

Page 6: Infinispan - NoSQL für den Enterprise Java Alltag

NoSQL

• Dokumentenorientierte Datenbanken• Graphendatenbanken• Key-Value-Stores

– Diskbasiert– RAM-Cache– Sortierte Key-Value-Stores

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Eventually Consistent Stores• MultivalueDatenbanken• Objektdatenbanken• Spaltenorientierte Datenbank

6

Page 7: Infinispan - NoSQL für den Enterprise Java Alltag

CAP-Theorem ( nach E. Brewer PODC Symposium 2000)

• Consistency – roughly meaning that all clients of a data store get responses to

requests that ‘make sense’. For example, if Client A writes 1 then 2 to location X, Client B cannot read 2 followed by 1.

• Availability– all operations on a data store eventually return successfully. We say

that a data store is ‘available’ for, e.g. write operations.

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

that a data store is ‘available’ for, e.g. write operations.

• Partition tolerance– “The network will be allowed to lose arbitrarily many messages sent

from one node to another”– if the network stops delivering messages between two sets of servers,

will the system continue to work correctly?

7

Page 8: Infinispan - NoSQL für den Enterprise Java Alltag

CAP Theorem und JTA

Consistency

JTA JTA

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 8

AvailabilityPartion

Tolerance

n.a.

BASE

JTA JTA

Page 9: Infinispan - NoSQL für den Enterprise Java Alltag

Data Grid vs. Distributed DBMS

Consistency

Data Distributed

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 9

AvailabilityPartion

Tolerance

n.a.

BASE

Data Grid

DistributedDBMS

Page 10: Infinispan - NoSQL für den Enterprise Java Alltag

JSR 107(347) Elastic Data Grid für Java EE

Servlet

Node 1EJB

AppserverJSR 107

Node 1

JSR 107

JSR 107

Node 2

Data Grid

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 10

JSF

Node 3

Node 2

JSR 107

Node 3

Node 2

Secondary Store

Page 11: Infinispan - NoSQL für den Enterprise Java Alltag

JSR 107 API - Standard für einen Distributed HashTable

• Distributed HashTable– javax.cache.Cache

• ähnlich java.util.ConcurrentMap

• Managementschnittstellen– javax.cache.CacheManager– javax.cache..CacheListener

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Annotationen z.B.– @CacheResult,@CacheKeyParam,@CacheRemove.

11

Page 12: Infinispan - NoSQL für den Enterprise Java Alltag

javax.cache.CacheLoader

JEEApplication

Cache

1. Get

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 12

• Secondary Store

CacheLoader

2. load

Page 13: Infinispan - NoSQL für den Enterprise Java Alltag

javax.cache.CacheWriter

JEEApplication

Cache

1. Put

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 13

• Secondary Store

CacheWriter

2. store

Page 14: Infinispan - NoSQL für den Enterprise Java Alltag

Expiration

Cache

I

Y

XMput

get

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 14

F

D

Page 15: Infinispan - NoSQL für den Enterprise Java Alltag

Gliederung

• NoSQL und Java EE

• Infinispan

• Integrationsszenarien

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Ausblick

15

Page 16: Infinispan - NoSQL für den Enterprise Java Alltag

Infinispan

• Key-Value-Store– Distributed HashTable(JSR 107/347)– Transactional (JTA)– Low-latency (RAM)– Optional persist to disk

• Open Source Data Grid Plattform (LGPL)– JBoss/Red Hat

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

– JBoss/Red Hat

• Java and Scala• Nicht nur für die JVM gedacht• in verschiedenen Modi einsetzbar

– Embedded– Client/Server(Data Grid)

16

Consistency

AvailabilityPartion

Tolerance

n.a.

BASE

Infinispan DistributedDBs

Page 17: Infinispan - NoSQL für den Enterprise Java Alltag

Demo

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 17

Page 18: Infinispan - NoSQL für den Enterprise Java Alltag

Local Embedded Mode

JEE

Application

Data Access

UI

0./3. Query

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 18

SecondaryStore

2. Read Cache

1. get4. Read

Page 19: Infinispan - NoSQL für den Enterprise Java Alltag

Local Embedded Mode II

• Code in der gleiche VM wie infinispan• wenig Konfigurationsarbeit

– Mit default EinstellungenDefaultCacheManager cacheManager = new DefaultCacheManager();

Cache<String, String> cache = cacheManager.getCache( );

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

– Mit eigenen Einstellungen z.B: Clustereinstellungen

DefaultCacheManager cacheManager = newDefaultCacheManager(„cluster.xml");

Cache<String, String> cache = cacheManager.getCache( );

19

Page 20: Infinispan - NoSQL für den Enterprise Java Alltag

Infinispan und Java EE Clustering

JEE

Application

Data Access

UI

0./4. Query

JEE

Application

Data Access

UI

0. Update

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 20

Cache

1. get5. get

Cache

1.x Store A1 2. Read A

• Secondary Store

Page 21: Infinispan - NoSQL für den Enterprise Java Alltag

Clustered Embedded Mode

JEE

Application

Data Access

UI

0./4. Query

JEE

Application

Data Access

UI

n.

JEE

Application

Data Access

UI

n+k.

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 21

Cache

2. get5. put

Cache

• Secondary Store

Cache

3./6. load/Store

Page 22: Infinispan - NoSQL für den Enterprise Java Alltag

Demo

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 22

Page 23: Infinispan - NoSQL für den Enterprise Java Alltag

JEEApplication

Data Access

JEEApplication

Data Access

2. Put

0. query

Replication

JEEApplication

Data Access

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

CacheCache

23

Cache

1. Store

• Secondary Store

Replicate Replicate

Page 24: Infinispan - NoSQL für den Enterprise Java Alltag

JEEApplication

Data Access

4. get

3. query

Invalidation

JEEApplication

Data Access

JEEApplication

Data Access

1. Put

0. query

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

Cache

4. get

24

CacheCache

• Secondary Store

Invalidate Invalidate

2. Store

5. load

Page 25: Infinispan - NoSQL für den Enterprise Java Alltag

JEEApplication

Data Access

2. get

0. query

Distribution [numOwner=2]

JEEApplication

Data Access

JEEApplication

Data Access

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

Cache

25

CacheCache

1. Read

• Secondary Store

Copy

Page 26: Infinispan - NoSQL für den Enterprise Java Alltag

Client/Server Mode

Non JavaApplication

Plenty

JEEApplication

Data Access

JSEApplication

Data Access

Hotrod

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 26

Load/Store

JVM

Cache

• Secondary Store

memcachedJVM

Cache

Hotrod

Page 27: Infinispan - NoSQL für den Enterprise Java Alltag

Demo

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 27

Page 28: Infinispan - NoSQL für den Enterprise Java Alltag

Client/Server Mode II

• Starten des Servers erfordert die Angabe des Protokolls– bin/clustered.sh -Djboss.socket.binding.port-offset=xxx -

Djboss.node.name=nodeX

• org.infinispan.client.hotrod.RemoteCacheManagerRemoteCacheManager rcm = new

RemoteCacheManager ("192.168.3.120");

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

RemoteCacheManager ("192.168.3.120");

RemoteCache remoteCace = rcm.getCache();

String key = "hello";

remoteCace.put(key, "world");

28

Page 29: Infinispan - NoSQL für den Enterprise Java Alltag

Client/Server Remoting

RemoteEndpoint

Protokoll Smart Routing

LoadBalancing

Memcached Text - VordefinierteListe

ReSTful Text - http Loadbalancer

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

Loadbalancer

HotRod Binary + DynamischeTopologie

29

JVM

Cache

JEEApplication

Data Access

GroovyApplication

Data Access

Page 30: Infinispan - NoSQL für den Enterprise Java Alltag

CacheStore

JEEApplication

Cache

1. Put

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 30

• Secondary Store

CacheStore

2. store

Page 31: Infinispan - NoSQL für den Enterprise Java Alltag

Eviction

Cache

I

Y

XM FDput

get

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 31

MemorymeterStrategiez.B. LRU

Page 32: Infinispan - NoSQL für den Enterprise Java Alltag

Storage JPA Cache Store

• Implementierung mit JPA 2• Speicherung mit applikationsspezifischem Datenmodell• Key muss Primärschlüssel der Entität sein

– @Id, @EmbeddedId

• Keine generierten Ids

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

Cache<String, User> usersCache = cacheManager.getCache("myJPACache"); // configured f or User entity class

usersCache.put(„Gosling_James", new User());

Cache<Integer, Teacher> teachersCache = cacheManager.getCache("myJPACache"); // cannot do th is whenthis cache is configured to use a JPA cache store

teachersCache.put(1, new Teacher());

32

Page 33: Infinispan - NoSQL für den Enterprise Java Alltag

Storage JPA Cache Store

<namedCache name=„ myJPACache">

<loaders passivation="false" shared="true" preload=" true">

<jpaStore

persistenceUnitName="org.infinispan.loaders.jpa.con figurationTest"

entityClassName="org.infinispan.loaders.jpa.entity. User "

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

er "

/>

</loaders>

</namedCache>

33

Page 34: Infinispan - NoSQL für den Enterprise Java Alltag

Gliederung

• NoSQL und Java EE

• Infinispan

• Integrationsszenarien

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Ausblick

34

Page 35: Infinispan - NoSQL für den Enterprise Java Alltag

DI-Container Integration

DI Container

Tra

nsac

tionI

nter

epto

r

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 35

Rem

oteC

onne

ctor

Ser

vice

Tra

nsac

tionI

nter

epto

r

Cac

he

DA

O

Cac

heS

tore

Page 36: Infinispan - NoSQL für den Enterprise Java Alltag

Spring Integration

• Spring 3.1 Cache Abstraktion• Infinispan Provider • Integration mit Spring DI für CacheManager und Cache

<bean id= "cacheManager"

class= "org.infinispan.spring.provider.SpringEmbeddedCacheManagerFactoryBean"

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

actoryBean"

p:configurationFileLocation= "classpath:META-INF/oio-infinispan-config.xml">

</bean>

• Aktivieren des Cache– <cache:annotation-driven />

36

Page 37: Infinispan - NoSQL für den Enterprise Java Alltag

Spring Integration

• Cache Annotation@Cacheable("nachrichtenCache")

public List<Nachricht> findAlleUngeleseneNachrichten () {… }

@Cacheable("nachrichtenCache", key=#" projektId ")

public List<Nachricht> findNachrichtenFuerProjekt(Bi gIntegerprojektId) {… }

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Deklarative Eviction@CacheEvict(value = "nachrichtenCache", allEntries = true)

public void nachrichtMarkieren(BigInteger nachrichtId, booleanungelesen) {… }

37

Page 38: Infinispan - NoSQL für den Enterprise Java Alltag

CDI

• Konfiguration und Injizierung des Infinispan Cache– Cache Injizierung

@Inject

private Cache<String, String> cache;

@Inject

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

@Inject

RemoteCache<String, String> remoteCache;

• Partielle Unterstützung vom JSR 107 Annotationen

38

Page 39: Infinispan - NoSQL für den Enterprise Java Alltag

CDI

• Eigene Cache [email protected]@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface NachrichtenCache {}

public class CacheCreator {

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

public class CacheCreator {@ConfigureCache("nachrichtencache") // cache name.

@NachrichtenCache // cache qualifier.

@Produces

public Configuration specialCacheCfg() {

return new ConfigurationBuilder()

.eviction()

.strategy(EvictionStrategy.LRU)

.maxEntries(10)

.build();

}

}

39

Page 40: Infinispan - NoSQL für den Enterprise Java Alltag

CDI

• Injizierung des eigenen Caches

public class MyCDIComponent {

@Inject @NachrichtenCache

Cache<String, String> nachrichtenCache;

}

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 40

Page 41: Infinispan - NoSQL für den Enterprise Java Alltag

OR/M Integration

Java Virtual Machine

Anwendung

Transient

Transient

PersistenceManager

1.Level Cache

ConnectionInstanzInstanz

Instanz

QueryFacility

Transaction

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH 42

TransientTransient

TransientDB

2.Level Cache

Entity Cache

InstanzInstanz

InstanzInstanz

QueryFacility

QueryCache

TimestampCache

Page 42: Infinispan - NoSQL für den Enterprise Java Alltag

Hibernate 2nd Level Cache

• Entity Cache– Key der Primärschlüssel– Cache lokal(default) oder repliziert – Replizierter Cache nicht empfohlen

• Query Cache– Key ist query-name und Parameter Hash

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

– Key ist query-name und Parameter Hash– Cache lokal(default) oder repliziert

• Timestamps Cache– asynchrone Replikation(default)– keine eviction/expiration

43

Page 43: Infinispan - NoSQL für den Enterprise Java Alltag

Hibernate second level cache

• JTA Transaktion Manager– Hibernate soll/muss JTA Manager nutzen.

<property name= "hibernate.cache.use_second_level_cache" value="true"/>

<property name= "hibernate.cache.use_query_cache" value="true"/>

<property name= "hibernate.cache.region.factory_class" value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

value="org.hibernate.cache.infinispan.InfinispanRegionFactory"/>

<property name= "hibernate.cache.infinispan.cfg" value="/oio-infinispan-config.xml"/>

<property name= "hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTSStandaloneTransactionManagerLookup"/>

44

Page 44: Infinispan - NoSQL für den Enterprise Java Alltag

Gliederung

• NoSQL und Java EE

• Infinispan

• Integrationsszenarien

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Ausblick

45

Page 45: Infinispan - NoSQL für den Enterprise Java Alltag

Infinispan Ausblick

• Map/Reduce Support

• Versioned Entries

• Support Eventual Consistency (7.0 ?)

Infinispan - NoSQL für den Enterprise Java Alltag© 2014 Orientation in Objects GmbH

• Optimierungen:– Transaktionen– Locking– RPC

46

Page 46: Infinispan - NoSQL für den Enterprise Java Alltag

? ??Fragen ?

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected]

??Fragen ?

47

Page 47: Infinispan - NoSQL für den Enterprise Java Alltag

Vielen Dank für ihre

Orientation in Objects GmbH

Weinheimer Str. 6868309 Mannheim

[email protected]

Vielen Dank für ihre Aufmerksamkeit !