SlideShare a Scribd company logo
Data Grid Platform
인피니스팬 소개와 사용 사례

전 재 홍 / Jaehong Cheon
9 Nov 2013
Agenda





Data Grid
Infinispan
Case Study
References
Data Grid
Data Grid
 Distributed Cache with persistence
–
–
–
–
–

Performance Boost
Dynamic provisioning
Fast access to data (in memory) - optionally write-through
Elasticity
Fault tolerance

 Data Grid
– Evolution of distributed caches
– Well-known pattern to boost data access performance and
scalability
– Clustered by nature
Cache vs. Data Grid
 JSR 107 - Temporary Caching for the Java Platform
– read, write, expiry, write-through, distributed-manner
– JBoss Cache

 JSR 347 - Data Grids for the Java Platform
– query, consistency, map-reducing standard way
– Infinispan
Infinispan
Infinispan








Distributed In-memory key/value Data Grid/ Cache
org.infinispan.Cache Interface
Distributed as Library and Server (from 5.3)
High availability
Elastic
Manageable
Open source

DefaultCacheManager manager = new DefaultCacheManager();
// Cache<Integer, Ticket> cache = manager.getCache();
Cache<Integer, Ticket> cache = manager.getCache(“myCache”);
Architecture: Library
Library Mode - standalone

Infinispan

App

JVM

JCP-107 Style Cache
just cache with advantages: expiry, j2ee transaction
Architecture: Library (Clustered)
 Use as library

Library Mode - clustered
Infinispan

– More features
– Richer APIs
– Programmatic/
Declarative
configuration
– Extendable/
embeddable
– Faster (API call)

App

JVM

Infinispan

App

Cluster

JVM
Infinispan

App

JVM

Application doesn’t know it’s on cluster
Architecture: Server
Server Mode - clustered

 Use as server

Infinispan

JVM
App

App

Infinispan

Cluster

JVM
Infinispan
App

JVM

– Remote
 Memcached, R
EST, Hot Rod,
WebSocket

– Data tier shared
by multi-apps
– App doesn’t affe
ct cluster
– Non-java clients
 C++, .NET, Rub
y, Python, Java
Architecture: Durability
Durability

 Durability
Infinispan
JVM

Cluster
Infinispan
JVM

Infinispan
JVM

Infinispan
JVM

Cluster
persistence

– By replication
– By persistence
– By replication to
other cluster
(topology aware)
Infinispan: Key Features





Transactions
Persistence
Querying
Map/Reduce
Clustering
 Peer-to-Peer
– No central master, no single point of failure, no single bottle
neck

 JGroups
– Reliable multicast communication library, nodes discovery,
sharing data, performing cluster scaling

 Consistent Hash
– Hash based data distribution
– How it finds where data locates

 Linear in nature: throughput, capacity
 Cluster Mode
Cluster Mode: Replication(복제)
Replication Mode
cache.put(K,V)

Cache on
Server 2 K,V

Cache on
Server 1 K,V

Cache on
Server 3 K,V

Cache on
Server 4 K,V
Cluster Mode: Distribution(분산)
Distribution Mode(numOwners=2)
cache.put(K,V)

Cache on
Server 1 K,V

cache.get(K,V)

Cache on
Server 2 K,V

Cache on
Server 3

Cache on
Server 4
Cluster Mode: Invalidation(무효화)
Invalidation Mode
cache.put(K,V2)

Cache on
Server 1 K,V2

Cache on
Server 2 K,V

Cache on
Server 3

Cache on
Server 4

DB
Configuration: Declarative
<global>
<transport clusterName="OperationsCacheCluster">
<properties>
<property name="configurationFile“
value="jgroups-tcp.xml" />
</properties>
</transport>
<globalJmxStatistics enabled="true" />
</global>
<default>
<clustering mode="replication">
<sync />
</clustering>
</default>

<namedCache name="secureLayerContextCache">
<eviction strategy="LIRS" maxEntries="2000" />
<expiration lifespan="600000" />
<loaders passivation="true" shared="false" preload="false">
<fileStore fetchPersistentState="true" purgerThreads="3"
purgeSynchronously="true" ignoreModifications="false"
purgeOnStartup="false" location="${java.io.tmpdir}">
<async />
</fileStore>
</loaders>
</namedCache>

 Eviction(제거)
 Expiration(만료)
– on cache
– on key
Configuration: Programmatic
 Configuration Based on XML
DefaultCacheManager manager = new DefaultCacheManager("infinispan-config.xml");
Configuration baseConf = manager.getDefaultCacheConfiguration();
Configuration config =new ConfigurationBuilder().
read(baseConf).expiration().lifespan(50000).build();
manager.defineConfiguration(programmaticCache, config);
Cache<String, String> cache = manager.getCache("secureLayerContextCache");

 Programmatic configuration
DefaultCacheManager manager = new DefaultCacheManager();
Configuration config = new ConfigurationBuilder()
.loaders()
.shared(false).passivation(false).preload(false)
.addCacheLoader()
.cacheLoader(new JdbcStringBasedCacheStore())
.addProperty("connectionFactoryClass","org.infinispan.loaders.jdbc
.connectionfactory.ManagedConnectionFactory")
.addProperty("datasourceJndiLocation", "java:jboss/datasources/MySQLDS")
.addProperty("userName", "root")
.addProperty("password", "admin")
.async().threadPoolSize(10).build();
manager.defineConfiguration(programmaticCache, config);
Cache<String, String> cache = manager.getCache("secureLayerContextCache");
Listener
 Listener on CacheManager
– Node join/ leave, Cache start/ stop

 Cache
– CRUD, Eviction/ Passivation
– Rehashing/ Transaction completion
@Listener
public class SimpleListener {
@CacheEntryCreated
public void dataAdded(CacheEntryCreatedEvent event) {
if (event.isPre()) {
System.out.println("Before creating the entry:" + event.getKey());
} else {
System.out.println("After creating the entry:" + event.getKey());
}
…
}

DefaultCacheManager manager = new DefaultCacheManager();
manager.addListener(listener);
Cache<Integer, Ticket> cache = manager.getCache();
cache.addListener(listener);
Asynchronous APIs
 put() and get() and remove() are synchronous
– They wait for RPC and Locks (and maybe cache stores)

 The asynchronous API returns NotifyingFuture
– Events are fired on completion of the operation
NotifyingFuture<String> future = c.removeAsync(key);
future.attachListener(new FutureListener<String>() {
@Override
public void futureDone(Future<String> future) {
try {
future.get();
System.out.printf ("The entry stored under key %s has been removed.", key);
} catch (ExecutionException e) {
System.out.printf("Failed to remove %s!", key);
}
}
});
Key Features: Persistence
 Used for durability
 Cache Store - Persistence Storage
– File System, Cloud, Remote, JDBC, JPA, LevelDB, Cassandra,
– HBase, MongoDB, BerkeleyDB, JDBM, REST







CacheLoader, CacheStore(CacheWriter from 6.0)
Write-through, write-behind
Passivation, activation
Store chain
Shared store
Persistence: Passivation/Activation
 Passivation – write to persistence when evicted from
memory (default)
 Activation – read to memory and remove from
persistence
Key Features: Transactons
 JTA Transaction Support
 Support MVCC (Multi-Versioned Concurrency Control)
 Isolation Level
– READ_COMMITTED (default)
– REPEATABLE_READ

 Locking Mode
– Optimistic Lock (default)
– Pessimistic Lock
Key Features: Query
 JBoss Hibernate Search + Apache Lucene
 Query on values
 Index Directory
– Lucene Directory: in-memory, file system, JDBC
– Infinispan Directory

 Distributed queries
Distributed Execution
 Executes codes on distributed nodes
 Through a standard JDK ExecutorService interface
 Use DistributedCallable extends
java.util.concurrent.Callable
Key Features: Map/Reduce
 Based on Distributed Execution Framework
 Mapper, Reducer, Collator, MapReduceTask
public interface Mapper<KIn, VIn, KOut, VOut> extends Serializable {
void map(KIn key, VIn value, Collector<KOut, VOut> collector);
}
public interface Reducer<KOut, VOut> extends Serializable {
VOut reduce(KOut reducedKey, Iterator<VOut> iter);
}
public interface Callator<KOut, Vout, R> {

R collate(Map<KOut, VOut>);
}
Client
Monitoring/Management
 Mbeans on CacheManager, Cache
 RHQ (JON, JBoss Operations Network)
Spring Integration
 Infinispan provider for Spring cache abstraction
 infinispan-spring.jar
<cache:annotation-driven cache-manager="operationCacheManager"/>
<bean id="operationCacheManager"
class="org.infinispan.spring.provider.SpringEmbeddedCacheManagerFactoryBean"
p:configurationFileLocation="classpath:infinispan-config.xml" />
@Cacheable(value = "secureLayerContextCache", key="#contextId")
public SecureLayerContext getSecureLayerContext(String contextId) {
return null;
}

@CachePut(value = "secureLayerContextCache", key="#contextId")
public SecureLayerContext setSecureLayerContext(String contextId,
SecureLayerContext secureLayerContext) {
return secureLayerContext;
}
@CacheEvict(value = "secureLayerContextCache", key="#contextId")
public void removeSecureLayerContext(String contextId) {
// Intentionally blank
}
Infinispan on Jboss AS 7
 Used for session clustering, Hibernate L2 cache
 Application gets cache with JNDI name using
@Resource
 XML Configuration in server configuration file
<cache-container name="web" aliases="standard-session-cache" default-cache="repl">
<transport lock-timeout="60000" />
<replicated-cache name="repl" mode="ASYNC" batching="true">
<file-store />
</replicated-cache>
</cache-container>
JDG





Red Hat JBoss Data Grid
Infinispan-based
JON
All the benefits of
subscription, including
Red Hat world class
support and services
Radar Gun
 Data grid and distributed cache benchmarking
framework
 Built to test Infinispan and other distributed data grid
platforms
 https://github.com/radargun/radargun
Case Study
Case Study: Session Clustering

 Store session information into cache
in Spring MVC Interceptor
Case Study: Session Clustering
Store session information into cache
in Spring Security Filter
-

-

SecurityContextRepository를 구현한
CacheSecurityContextRepository 작성
loadContext, saveContext를 오버라이드하여
인피니스팬 사용
Spring cache abstraction 사용
Use Cases: Storm Processing State Store

Infinispan Data Grid
References
www.acornpub.co.kr/book/infinispan
infinispan.org
blog.infinispan.org
infinispan-ko.blogspot.com
facebook.com/groups/infinispan
red.ht/data-grid
tedwon.com/display
/dev/Infinispan+Data+Grid
 cbcpascal.blogspot.kr







jbugkorea.org

More Related Content

What's hot

[B5]memcached scalability-bag lru-deview-100
[B5]memcached scalability-bag lru-deview-100[B5]memcached scalability-bag lru-deview-100
[B5]memcached scalability-bag lru-deview-100
NAVER D2
 
plProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancerplProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancer
elliando dias
 
My sql monitoring cu沙龙
My sql monitoring cu沙龙My sql monitoring cu沙龙
My sql monitoring cu沙龙
colderboy17
 
Top5 scalabilityissues withappendix
Top5 scalabilityissues withappendixTop5 scalabilityissues withappendix
Top5 scalabilityissues withappendix
ColdFusionConference
 

What's hot (20)

[B5]memcached scalability-bag lru-deview-100
[B5]memcached scalability-bag lru-deview-100[B5]memcached scalability-bag lru-deview-100
[B5]memcached scalability-bag lru-deview-100
 
MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바MySQL Advanced Administrator 2021 - 네오클로바
MySQL Advanced Administrator 2021 - 네오클로바
 
PostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetPostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication Cheatsheet
 
plProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancerplProxy, pgBouncer, pgBalancer
plProxy, pgBouncer, pgBalancer
 
Oracle: Binding versus caging
Oracle: Binding versus cagingOracle: Binding versus caging
Oracle: Binding versus caging
 
Proxysql sharding
Proxysql shardingProxysql sharding
Proxysql sharding
 
My sql monitoring cu沙龙
My sql monitoring cu沙龙My sql monitoring cu沙龙
My sql monitoring cu沙龙
 
Xtrabackup工具使用简介 - 20110427
Xtrabackup工具使用简介 - 20110427Xtrabackup工具使用简介 - 20110427
Xtrabackup工具使用简介 - 20110427
 
Intro ProxySQL
Intro ProxySQLIntro ProxySQL
Intro ProxySQL
 
Building better Node.js applications on MariaDB
Building better Node.js applications on MariaDBBuilding better Node.js applications on MariaDB
Building better Node.js applications on MariaDB
 
Connection Pooling in PostgreSQL using pgbouncer
Connection Pooling in PostgreSQL using pgbouncer Connection Pooling in PostgreSQL using pgbouncer
Connection Pooling in PostgreSQL using pgbouncer
 
MySQL Backup and Security Best Practices
MySQL Backup and Security Best PracticesMySQL Backup and Security Best Practices
MySQL Backup and Security Best Practices
 
ACADGILD:: HADOOP LESSON
ACADGILD:: HADOOP LESSON ACADGILD:: HADOOP LESSON
ACADGILD:: HADOOP LESSON
 
hadoop
hadoophadoop
hadoop
 
MySQL Replication: Demo Réplica en Español
MySQL Replication: Demo Réplica en EspañolMySQL Replication: Demo Réplica en Español
MySQL Replication: Demo Réplica en Español
 
Broker otw.pptx
Broker otw.pptxBroker otw.pptx
Broker otw.pptx
 
The Essential postgresql.conf
The Essential postgresql.confThe Essential postgresql.conf
The Essential postgresql.conf
 
Top5 scalabilityissues withappendix
Top5 scalabilityissues withappendixTop5 scalabilityissues withappendix
Top5 scalabilityissues withappendix
 
Proxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynoteProxysql ha plam_2016_2_keynote
Proxysql ha plam_2016_2_keynote
 
A Groovy Kind of Java (San Francisco Java User Group)
A Groovy Kind of Java (San Francisco Java User Group)A Groovy Kind of Java (San Francisco Java User Group)
A Groovy Kind of Java (San Francisco Java User Group)
 

Similar to 인피니스팬 데이터그리드 플랫폼

Infinispan @ Red Hat Forum 2013
Infinispan @ Red Hat Forum 2013Infinispan @ Red Hat Forum 2013
Infinispan @ Red Hat Forum 2013
Jaehong Cheon
 

Similar to 인피니스팬 데이터그리드 플랫폼 (20)

인메모리 클러스터링 아키텍처
인메모리 클러스터링 아키텍처인메모리 클러스터링 아키텍처
인메모리 클러스터링 아키텍처
 
인피니스팬데이터그리드따라잡기 (@JCO 2014)
인피니스팬데이터그리드따라잡기 (@JCO 2014)인피니스팬데이터그리드따라잡기 (@JCO 2014)
인피니스팬데이터그리드따라잡기 (@JCO 2014)
 
Infinispan @ Red Hat Forum 2013
Infinispan @ Red Hat Forum 2013Infinispan @ Red Hat Forum 2013
Infinispan @ Red Hat Forum 2013
 
Think Distributed: The Hazelcast Way
Think Distributed: The Hazelcast WayThink Distributed: The Hazelcast Way
Think Distributed: The Hazelcast Way
 
Distributed caching and computing v3.7
Distributed caching and computing v3.7Distributed caching and computing v3.7
Distributed caching and computing v3.7
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
Elastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara MicroElastic and Cloud-ready Applications with Payara Micro
Elastic and Cloud-ready Applications with Payara Micro
 
JCache Using JCache
JCache Using JCacheJCache Using JCache
JCache Using JCache
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Scalable Integration with JBoss Fuse
Scalable Integration with JBoss FuseScalable Integration with JBoss Fuse
Scalable Integration with JBoss Fuse
 
JBoss AS Upgrade
JBoss AS UpgradeJBoss AS Upgrade
JBoss AS Upgrade
 
An Engineer's Intro to Oracle Coherence
An Engineer's Intro to Oracle CoherenceAn Engineer's Intro to Oracle Coherence
An Engineer's Intro to Oracle Coherence
 
The Design, Implementation and Open Source Way of Apache Pegasus
The Design, Implementation and Open Source Way of Apache PegasusThe Design, Implementation and Open Source Way of Apache Pegasus
The Design, Implementation and Open Source Way of Apache Pegasus
 
Speed it up and Spark it up at Intel
Speed it up and Spark it up at IntelSpeed it up and Spark it up at Intel
Speed it up and Spark it up at Intel
 
Leveraging Hadoop in your PostgreSQL Environment
Leveraging Hadoop in your PostgreSQL EnvironmentLeveraging Hadoop in your PostgreSQL Environment
Leveraging Hadoop in your PostgreSQL Environment
 
Java >= 9
Java >= 9Java >= 9
Java >= 9
 
Hidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-PersistenceHidden pearls for High-Performance-Persistence
Hidden pearls for High-Performance-Persistence
 
Airbnb Search Architecture: Presented by Maxim Charkov, Airbnb
Airbnb Search Architecture: Presented by Maxim Charkov, AirbnbAirbnb Search Architecture: Presented by Maxim Charkov, Airbnb
Airbnb Search Architecture: Presented by Maxim Charkov, Airbnb
 
GlassFish REST Administration Backend
GlassFish REST Administration BackendGlassFish REST Administration Backend
GlassFish REST Administration Backend
 

Recently uploaded

Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
Safe Software
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Peter Udo Diehl
 

Recently uploaded (20)

Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Knowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and backKnowledge engineering: from people to machines and back
Knowledge engineering: from people to machines and back
 
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMsTo Graph or Not to Graph Knowledge Graph Architectures and LLMs
To Graph or Not to Graph Knowledge Graph Architectures and LLMs
 
Essentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with ParametersEssentials of Automations: Optimizing FME Workflows with Parameters
Essentials of Automations: Optimizing FME Workflows with Parameters
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Introduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG EvaluationIntroduction to Open Source RAG and RAG Evaluation
Introduction to Open Source RAG and RAG Evaluation
 
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo DiehlFuture Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
Future Visions: Predictions to Guide and Time Tech Innovation, Peter Udo Diehl
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3UiPath Test Automation using UiPath Test Suite series, part 3
UiPath Test Automation using UiPath Test Suite series, part 3
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi"Impact of front-end architecture on development cost", Viktor Turskyi
"Impact of front-end architecture on development cost", Viktor Turskyi
 

인피니스팬 데이터그리드 플랫폼

  • 1.
  • 2. Data Grid Platform 인피니스팬 소개와 사용 사례 전 재 홍 / Jaehong Cheon 9 Nov 2013
  • 5. Data Grid  Distributed Cache with persistence – – – – – Performance Boost Dynamic provisioning Fast access to data (in memory) - optionally write-through Elasticity Fault tolerance  Data Grid – Evolution of distributed caches – Well-known pattern to boost data access performance and scalability – Clustered by nature
  • 6. Cache vs. Data Grid  JSR 107 - Temporary Caching for the Java Platform – read, write, expiry, write-through, distributed-manner – JBoss Cache  JSR 347 - Data Grids for the Java Platform – query, consistency, map-reducing standard way – Infinispan
  • 8. Infinispan        Distributed In-memory key/value Data Grid/ Cache org.infinispan.Cache Interface Distributed as Library and Server (from 5.3) High availability Elastic Manageable Open source DefaultCacheManager manager = new DefaultCacheManager(); // Cache<Integer, Ticket> cache = manager.getCache(); Cache<Integer, Ticket> cache = manager.getCache(“myCache”);
  • 9. Architecture: Library Library Mode - standalone Infinispan App JVM JCP-107 Style Cache just cache with advantages: expiry, j2ee transaction
  • 10. Architecture: Library (Clustered)  Use as library Library Mode - clustered Infinispan – More features – Richer APIs – Programmatic/ Declarative configuration – Extendable/ embeddable – Faster (API call) App JVM Infinispan App Cluster JVM Infinispan App JVM Application doesn’t know it’s on cluster
  • 11. Architecture: Server Server Mode - clustered  Use as server Infinispan JVM App App Infinispan Cluster JVM Infinispan App JVM – Remote  Memcached, R EST, Hot Rod, WebSocket – Data tier shared by multi-apps – App doesn’t affe ct cluster – Non-java clients  C++, .NET, Rub y, Python, Java
  • 14. Clustering  Peer-to-Peer – No central master, no single point of failure, no single bottle neck  JGroups – Reliable multicast communication library, nodes discovery, sharing data, performing cluster scaling  Consistent Hash – Hash based data distribution – How it finds where data locates  Linear in nature: throughput, capacity  Cluster Mode
  • 15. Cluster Mode: Replication(복제) Replication Mode cache.put(K,V) Cache on Server 2 K,V Cache on Server 1 K,V Cache on Server 3 K,V Cache on Server 4 K,V
  • 16. Cluster Mode: Distribution(분산) Distribution Mode(numOwners=2) cache.put(K,V) Cache on Server 1 K,V cache.get(K,V) Cache on Server 2 K,V Cache on Server 3 Cache on Server 4
  • 17. Cluster Mode: Invalidation(무효화) Invalidation Mode cache.put(K,V2) Cache on Server 1 K,V2 Cache on Server 2 K,V Cache on Server 3 Cache on Server 4 DB
  • 18. Configuration: Declarative <global> <transport clusterName="OperationsCacheCluster"> <properties> <property name="configurationFile“ value="jgroups-tcp.xml" /> </properties> </transport> <globalJmxStatistics enabled="true" /> </global> <default> <clustering mode="replication"> <sync /> </clustering> </default> <namedCache name="secureLayerContextCache"> <eviction strategy="LIRS" maxEntries="2000" /> <expiration lifespan="600000" /> <loaders passivation="true" shared="false" preload="false"> <fileStore fetchPersistentState="true" purgerThreads="3" purgeSynchronously="true" ignoreModifications="false" purgeOnStartup="false" location="${java.io.tmpdir}"> <async /> </fileStore> </loaders> </namedCache>  Eviction(제거)  Expiration(만료) – on cache – on key
  • 19. Configuration: Programmatic  Configuration Based on XML DefaultCacheManager manager = new DefaultCacheManager("infinispan-config.xml"); Configuration baseConf = manager.getDefaultCacheConfiguration(); Configuration config =new ConfigurationBuilder(). read(baseConf).expiration().lifespan(50000).build(); manager.defineConfiguration(programmaticCache, config); Cache<String, String> cache = manager.getCache("secureLayerContextCache");  Programmatic configuration DefaultCacheManager manager = new DefaultCacheManager(); Configuration config = new ConfigurationBuilder() .loaders() .shared(false).passivation(false).preload(false) .addCacheLoader() .cacheLoader(new JdbcStringBasedCacheStore()) .addProperty("connectionFactoryClass","org.infinispan.loaders.jdbc .connectionfactory.ManagedConnectionFactory") .addProperty("datasourceJndiLocation", "java:jboss/datasources/MySQLDS") .addProperty("userName", "root") .addProperty("password", "admin") .async().threadPoolSize(10).build(); manager.defineConfiguration(programmaticCache, config); Cache<String, String> cache = manager.getCache("secureLayerContextCache");
  • 20. Listener  Listener on CacheManager – Node join/ leave, Cache start/ stop  Cache – CRUD, Eviction/ Passivation – Rehashing/ Transaction completion @Listener public class SimpleListener { @CacheEntryCreated public void dataAdded(CacheEntryCreatedEvent event) { if (event.isPre()) { System.out.println("Before creating the entry:" + event.getKey()); } else { System.out.println("After creating the entry:" + event.getKey()); } … } DefaultCacheManager manager = new DefaultCacheManager(); manager.addListener(listener); Cache<Integer, Ticket> cache = manager.getCache(); cache.addListener(listener);
  • 21. Asynchronous APIs  put() and get() and remove() are synchronous – They wait for RPC and Locks (and maybe cache stores)  The asynchronous API returns NotifyingFuture – Events are fired on completion of the operation NotifyingFuture<String> future = c.removeAsync(key); future.attachListener(new FutureListener<String>() { @Override public void futureDone(Future<String> future) { try { future.get(); System.out.printf ("The entry stored under key %s has been removed.", key); } catch (ExecutionException e) { System.out.printf("Failed to remove %s!", key); } } });
  • 22. Key Features: Persistence  Used for durability  Cache Store - Persistence Storage – File System, Cloud, Remote, JDBC, JPA, LevelDB, Cassandra, – HBase, MongoDB, BerkeleyDB, JDBM, REST      CacheLoader, CacheStore(CacheWriter from 6.0) Write-through, write-behind Passivation, activation Store chain Shared store
  • 23. Persistence: Passivation/Activation  Passivation – write to persistence when evicted from memory (default)  Activation – read to memory and remove from persistence
  • 24. Key Features: Transactons  JTA Transaction Support  Support MVCC (Multi-Versioned Concurrency Control)  Isolation Level – READ_COMMITTED (default) – REPEATABLE_READ  Locking Mode – Optimistic Lock (default) – Pessimistic Lock
  • 25. Key Features: Query  JBoss Hibernate Search + Apache Lucene  Query on values  Index Directory – Lucene Directory: in-memory, file system, JDBC – Infinispan Directory  Distributed queries
  • 26. Distributed Execution  Executes codes on distributed nodes  Through a standard JDK ExecutorService interface  Use DistributedCallable extends java.util.concurrent.Callable
  • 27. Key Features: Map/Reduce  Based on Distributed Execution Framework  Mapper, Reducer, Collator, MapReduceTask public interface Mapper<KIn, VIn, KOut, VOut> extends Serializable { void map(KIn key, VIn value, Collector<KOut, VOut> collector); } public interface Reducer<KOut, VOut> extends Serializable { VOut reduce(KOut reducedKey, Iterator<VOut> iter); } public interface Callator<KOut, Vout, R> { R collate(Map<KOut, VOut>); }
  • 29. Monitoring/Management  Mbeans on CacheManager, Cache  RHQ (JON, JBoss Operations Network)
  • 30. Spring Integration  Infinispan provider for Spring cache abstraction  infinispan-spring.jar <cache:annotation-driven cache-manager="operationCacheManager"/> <bean id="operationCacheManager" class="org.infinispan.spring.provider.SpringEmbeddedCacheManagerFactoryBean" p:configurationFileLocation="classpath:infinispan-config.xml" /> @Cacheable(value = "secureLayerContextCache", key="#contextId") public SecureLayerContext getSecureLayerContext(String contextId) { return null; } @CachePut(value = "secureLayerContextCache", key="#contextId") public SecureLayerContext setSecureLayerContext(String contextId, SecureLayerContext secureLayerContext) { return secureLayerContext; } @CacheEvict(value = "secureLayerContextCache", key="#contextId") public void removeSecureLayerContext(String contextId) { // Intentionally blank }
  • 31. Infinispan on Jboss AS 7  Used for session clustering, Hibernate L2 cache  Application gets cache with JNDI name using @Resource  XML Configuration in server configuration file <cache-container name="web" aliases="standard-session-cache" default-cache="repl"> <transport lock-timeout="60000" /> <replicated-cache name="repl" mode="ASYNC" batching="true"> <file-store /> </replicated-cache> </cache-container>
  • 32. JDG     Red Hat JBoss Data Grid Infinispan-based JON All the benefits of subscription, including Red Hat world class support and services
  • 33. Radar Gun  Data grid and distributed cache benchmarking framework  Built to test Infinispan and other distributed data grid platforms  https://github.com/radargun/radargun
  • 35. Case Study: Session Clustering  Store session information into cache in Spring MVC Interceptor
  • 36. Case Study: Session Clustering Store session information into cache in Spring Security Filter - - SecurityContextRepository를 구현한 CacheSecurityContextRepository 작성 loadContext, saveContext를 오버라이드하여 인피니스팬 사용 Spring cache abstraction 사용
  • 37. Use Cases: Storm Processing State Store Infinispan Data Grid