SlideShare a Scribd company logo
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
GREG LUCK, CO-SPEC LEAD JSR107
@GREGRLUCK CEO | HAZELCAST FOUNDER | EHCACHE FORMER CTO
23 MAY 2016
How to speed up your
application using JCache
See all the presentations from the In-Memory Computing
Summit at http://imcsummit.org
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Agenda
• Introduction to Caching
• Java Caching (JCache), JSR-107
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Introduction to Caching
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Benefits of Caching
• Performance
• Offload expensive or non-scalable parts of your architecture
• Scale up – get the most out of one machine
• Scale out – add more capacity with more machines
• Excellent Buffer against load variability
And…
• Usually very fast and easy to apply
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
When to Use Caching
• When applications use the same data more than once
• When cost (time / resources) of making an initial copy is less
than fetching or producing the data again or when faster to
request from a Cache
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Common Problem Areas that Benefit
Anything Web Scale Anything where the data is across the network
Compound Data Objects Data Persistence
1 3
2 4
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Database Caching
Moving data from the database into the cache increases processing speed
and can reduce database licensing and maintenance costs.
Speed ✓
Data
Store
Application
Cache
Application
Cache
Application
Cache
Application
Cache
Costs ✓ Scalability ✓
~200 us
Average Response Time
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Caches are built primarily in RAM
in-process or distributed
NVRAM/Flash/SSD
(serialized form)
Local Storage
Heap
(Objects)
Opaque to
GC in RAM
(serialized form)
<100 ns
< 100ns
+deserialization time
2
500
1,000+
Latency
Size (GB)
Network Storage
< 50us
+deserialization time
< 140us for 1Gbps
< 70us for 10Gbps/40Gbps
+deserialization time
20,000+Scaleout across the network
(serialized form)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
‘s law
Estimated Performance Improvements
Predicted System Speedup
=
1 / ((1 – Proportion Sped Up) + Proportion Sped Up / Speed up))
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Cache Efficiency
Cache Efficiency = cache hits / total hits
• High efficiency = high offload
• High efficiency = high performance
• How to increase:
- Put reference data in the cache
- Put long lived in the cache.
- Consider frequency of mutability of data
- Put highly used data in cache
- Increase the size of the cache. Today you can create TB sized caches
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Problems to Consider
• Standalone Caches and the N * problem
- As each entry expires, the backing system gets N requests for data where
n is the number of standalone caches. Solution: Use a distributed cache
• Consistency with the System of Record
- How to keep the cache in sync with changes in a backing system. Solution:
Match mutability of data with data safety configuration. Update the cache
and backing store at the same time.
• Consistency with other cache nodes
- How to keep all cache nodes in sync: Solution: Use a distributed cache and
match consistency configuration with data mutability
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
New JCache Standard (JSR107)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Java Caching (JCache)
What?
• Java Caching (JCache) standardized Caching for the Java Platform*
• A common mechanism to create, access, update and remove
information from Caches
How?
• JSR-107: Java Caching Specification (JCache)
• Java Community Process (JCP) 2.9
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Java Caching (JCache)
Why?
• Standardize! Standardize! Standardize!
- Core Caching Concepts
- Core Caching API
• Provide application portability between Caching solutions
- Big & Small, Open & Commercial
• Caching is ubiquitous!
• Allows frameworks to depend on JCache and stop creating specific
integrations to each and every cache
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Java Caching (Jcache)
Recent History
Item Date
JCache Final Spec Released 18 March 2014
Spring 4.1 September 2014
Hazelcast 3.3.1 TCK Compliant September 2014
Hazelcast 3.4 (with High-Density Memory Store) November 2014
Hazelcast 3.5 - added HD Memory Store to near cache) June 2015
Most project vendors create implementations June 2014 - June 2015
Hazelcast 3.6 (split brain handler, quorums) January 2016
JCache 1.1 Maintenance Release Summer 2016
JCache 2.0 Will start after 1.1
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Java Caching (JCache)
Which Platform?
java.util.Map (Java 6/7) Target Platform
Specification (SPEC) Java 6+ (SE or EE)
Reference Implementation (RI) Java 7+ (SE or EE)
Technology Compatibility Kit (TCK) Java 7+ (SE or EE)
Demos and Samples Java 7+ (SE or EE)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Implementations
• JCache Reference Implementation
• Ehcache
• Hazelcast
• Oracle Coherence
• Infinispan
• GridGain/Apache Ignite
• TayzGrid
• Caffeine
• Cache2K (in progress)
• Blazing Cache (in progress)
• tCache (Trivago in process)
Keep Track
• https://jcp.org/aboutJava/communityprocess/i
mplementations/jsr107/index.html
• https://github.com/cruftex/jsr107-test-
zoo/blob/master/report.md
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Non-Implementation: Gemfire/Geode
Gemfire/Geode have no plans to implement
Why?
• Gemfire and Geode are directly supported in Spring
• Because Spring supports JCache cache annotations you can use
Gemfire/Geode from Spring but that is it.
See:
• http://apache-geode-incubating-developers-
forum.70738.x6.nabble.com/JCache-JSR-107-support-td1255.html
Campaign to have Pivotal Support JCache:
#PivotalJCache campaign for @PivotalGemFire to support #JSR107 #JCache.
Please retweet or mention #PivotalJCache
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Relationship to NoSQL
Difficult/Impossible for NoSQL to fully implement the spec
• Server Side code execution including: Entry Processors, Listeners,
Write-Through etc.
• Strong Consistency is the default consistency model and is not
supported by most/all NoSQL.
Likely that Couchbase will release a partial implementation
leaving out EntryProcessor and some other methods with an
UnsupportedOperationException if these methods are called. They
have Developer Preview 2 out.
Using With NoSQL
• Use NoSQL like a database and read-through/write-though to it using
CacheLoader/CacheWriter.
• NoSQL gives you scale our persistence - cache gives you very low
latencies
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Java Caching (JCache)
Project Hosting
• JCP Project:
- http://jcp.org/en/jsr/detail?id=107
• Source Code:
- https://github.com/jsr107
• Forum:
- https://groups.google.com/forum/?fromgroups#!forum/jsr107
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Java Caching (JCache)
How to get it
• Apache Maven (via Maven Central Repository)
<dependency>
<groupId>javax.cache</groupId>
<artifactId>cache-api</artifactId>
<version>1.0</version>
</dependency>
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Caches and Caching
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Caches and Caching
JSR107 Cache Definition:
A high-performance, low-latency data-structure* in
which an application places a temporary copy of
information that is likely to be used more than once
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Maps vs Cache APIs
java.util.Map (Java 6/7)
Key-Value Based API
Supports Atomic Updates
Entries Don’t Expire
Entries Aren’t Evicted
Entries Stored On-Heap
Store-By-Reference
javax.cache.Cache (Java 6)
Key-Value Based API
Supports Atomic Updates
Entries May Expire
Entries May Be Evicted
Entries Stored Anywhere (ie: topologies)
Store-By-Value and Store-By-Reference
Supports Integration (ie: Loaders / Writers)
Supports Observation (ie: Listeners)
Entry Processors
Statistics
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Features
• java.util.ConcurrentMap like API
• Atomic Operations
• Lock-Free
• Read-Through / Write-Through Integration Support
• Cache Event Listeners
• Fully Generic API = type-safety
• Statistics
• Annotations (for frameworks and containers)
• Store-By-Value semantics (optional store-by-reference)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Features
• Topology Agnostic
- Topologies not defined or restricted by the specification
• Efficiently supports:
- “local” in-memory Caching and
- “distributed” server-based Caching
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache Key Classes/Interfaces
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Runtime Structure
Caching
“service loader”
CachingProvider
“SPI implementation”
CacheManager
“manager of caches”
Cache
“interface to a Cache”
*
Created &
Managed By
Created &
Managed By
“application”
Uses..
Loads &
Tracks
*
*
*
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Cache Managers
javax.cache.CacheManager
• Establishes, configures, manages and owns named Caches
- Caches may be pre-define or dynamically created at runtime
• Provides Cache infrastructure and resources
• Provides Cache “scoping” (say in a Cluster)
• Provides Cache ClassLoaders (important for store-by-value)
• Provides Cache lifecycle management
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Hello World
(via a Cache Manager)
// acquire the default CacheManager
CacheManager manager = Caching.getCacheManager();
// acquire a previously configured cache (via CacheManager)
Cache<Integer, String> cache = manager.getCache(“my-cache”,
Integer.class, String.class);
// put something in the cache
cache.put(123, “Hello World”);
// get something from the cache
String message = cache.get(123);
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Cache Interface & Methods (in IDE)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Entry Processors
Custom atomic operations for everyone!
// acquire a cache
Cache<String, Integer> cache = manager.getCache(“my-cache”,
String.class, Integer.class);
// increment a cached value by 42, returning the old value
int value =
cache.invoke(“key”, new IncrementProcessor<>(), 42);
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Entry Processors
Custom atomic operations for everyone!
public class IncrementProcessor<K>
implements EntryProcessor<K, Integer, Integer>, Serializable {
@Override
public Integer process(MutableEntry<K, Integer> entry, Object...
arguments) {
if (entry.exists()) {
int amount =
arguments.length == 0 ? 1 :(Integer)arguments[0];
int current = entry.getValue();
entry.setValue(count + amount);
return current;
} else {
throw new IllegalStateException(“no entry exists”);
}
}
}
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Entry Processors
Custom atomic operations for everyone!
• Eliminate Round-Trips! (in distributed systems)
• Enable development of a Lock-Free API! (simplifies applications)
*May need to be Serializable (in distributed systems)
Application
CacheCache
Application
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache: Entry Processors
Which is better?
// using an entry processor?
int value = cache.invoke(
“key”, new IncrementProcessor<>(), 42);
// using a lock based API?
cache.lock(“key”);
int current = cache.get(“key”);
cache.put(“key”, current + 42);
cache.unlock(“key”);
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Annotations
• JSR107 introduces a standardized set of caching annotations,
which do method level caching interception on annotated
classes running in dependency injection containers.
• Caching annotations are becoming increasingly popular:
- Ehcache Annotations for Spring
- Spring 3’s caching annotations.
• JSR107 Annotations will be added to:
- Java EE 8 (planned?)
- Spring 4.1 (released)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Annotation Operations
The JSR107 annotations cover the
most common cache operations:
• @CacheResult
• @CachePut
• @CacheRemove
• @CacheRemoveAll
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Fully Annotated Class Example
@CacheDefaults(cacheName = "blogManager")
public class BlogManager {
@CacheResult
public Blog getBlogEntry(String title) {...}
@CacheRemove
public void removeBlogEntry(String title) {...}
@CacheRemoveAll
public void removeAllBlogs() {...}
@CachePut
public void createEntry(@CacheKey String title,
@CacheValue Blog blog) {...}
@CacheResult
public Blog getEntryCached(String randomArg,
@CacheKey String title){...}
}
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache With Spring
• Spring
- uses JCache since 4.1 http://bit.ly/1V0q1Kp
- Added support for JCache cache annotations which can be mixed and
matched with Spring ones
• Spring Boot
- Auto-configuration for any JCache Provider http://bit.ly/1TPQKLx
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache With Java EE
• Java EE
- Can add JCache and an implementation to any Java EE app by adding the
jars and configuring it outside of EE.
• Java EE 8
- JCache added to EE8
- Add JCache Annotations
- Other integration possibilities:
• ejb timer store
• jbatch store
• JPA
- Adam Bien is prepared to lead a JSR to get JCache into EE8. 4
contributors so far. See See
https://abhirockzz.wordpress.com/2016/01/21/jcache-in-java-ee-8/
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
The Future
• JCache 1.1
• Java EE 8 Integration (2017)
• JCache 2.0 (Later)
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache 1.1
• CDDL GPL with Class Path Exception License to the spec API or
UPL.
• Errata
• TCK Challenges
• Very Close – should be Summer 2016
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
JCache 2.0
Enterprise Features
- Transactions
- Annotations Integration for EE
- Servlet 4.0 Integration / Session Caching
Core
- Java 8
- Java 9 Modularity
- Async API
- Distributed java.util.stream
- Basic cache profile: - listener, -integration, - EntryProcessor.
Timing
• Start after 1.1 is released
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Hazelcast JCache Support
Full TCK Compliant implementation for:
• Embedded Members
• Clients (caches are stored in Members)
• HD Memory Store for members and near cache
• Very Fast Persistence with the Hot Restart Store
• Very fast and highly scalable JCache Implementation
• Usable in all cloud environments. Works with CloudFoundry and
OpenShift
• Docs: http://bit.ly/1Q52yDz
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Questions?
Greg Luck
• @gregrluck
• greg@hazelcast.com
Thank you

More Related Content

PDF
Caching and JCache with Greg Luck 18.02.16
PDF
Barcelona mysqlnd qc
PDF
PDF
Hazelcast for Terracotta Users
PDF
Rails Caching: Secrets From the Edge
PPTX
Accelerating Rails with edge caching
PDF
MySQL: From Single Instance to Big Data
PDF
Distributed Caching Using the JCACHE API and ehcache, Including a Case Study ...
Caching and JCache with Greg Luck 18.02.16
Barcelona mysqlnd qc
Hazelcast for Terracotta Users
Rails Caching: Secrets From the Edge
Accelerating Rails with edge caching
MySQL: From Single Instance to Big Data
Distributed Caching Using the JCACHE API and ehcache, Including a Case Study ...

What's hot (20)

PDF
Postgres Plus Cloud Database on OpenStack
PDF
MySQL Performance Metrics that Matter
PDF
MySQL Manchester TT - Performance Tuning
PPTX
Proxysql use case scenarios fosdem17
PDF
Ehcache Architecture, Features And Usage Patterns
PDF
MySQL Cloud Service Deep Dive
PDF
Postgres on OpenStack
 
PDF
Implementing High Availability Caching with Memcached
PDF
Squeezing Performance out of Hazelcast
PDF
Distributed Caching Essential Lessons (Ts 1402)
PDF
Mysql User Camp : 20-June-14 : Mysql Fabric
PDF
Optimizing MySQL for Cascade Server
KEY
Whirr dev-up-puppetconf2011
PDF
Scaling MySQl 1 to N Servers -- Los Angelese MySQL User Group Feb 2014
PDF
Ehcache3 — JSR-107 on steroids
PDF
Time to Make the Move to In-Memory Data Grids
PDF
Hadoop Operations at LinkedIn
PDF
MySql's NoSQL -- best of both worlds on the same disks
PPT
Understanding MySql locking issues
PDF
JCache (JSR107) - QCon London 2015 & JBCNConf Barcelona 2015
Postgres Plus Cloud Database on OpenStack
MySQL Performance Metrics that Matter
MySQL Manchester TT - Performance Tuning
Proxysql use case scenarios fosdem17
Ehcache Architecture, Features And Usage Patterns
MySQL Cloud Service Deep Dive
Postgres on OpenStack
 
Implementing High Availability Caching with Memcached
Squeezing Performance out of Hazelcast
Distributed Caching Essential Lessons (Ts 1402)
Mysql User Camp : 20-June-14 : Mysql Fabric
Optimizing MySQL for Cascade Server
Whirr dev-up-puppetconf2011
Scaling MySQl 1 to N Servers -- Los Angelese MySQL User Group Feb 2014
Ehcache3 — JSR-107 on steroids
Time to Make the Move to In-Memory Data Grids
Hadoop Operations at LinkedIn
MySql's NoSQL -- best of both worlds on the same disks
Understanding MySql locking issues
JCache (JSR107) - QCon London 2015 & JBCNConf Barcelona 2015
Ad

Viewers also liked (14)

PDF
Tim hieu ve nganh quan he cong chung
DOCX
7 hábitos de la gente altamente efectiva
DOCX
Aniurcar pérez ecología
PPT
The Tugler Show Episode 7
PDF
การสะท้อนของแสง
PDF
Vitrine Tupperware 1/2016 - Juliana Marchetti
PPTX
Ekosistema.4.taldea.mendi
PPTX
Chocolate Toast Crunch Cereal
PPTX
POLYMERASE CHAIN REACTION
PDF
IOCL-REPORT
PDF
สื่อการสอน Internet 2559
Tim hieu ve nganh quan he cong chung
7 hábitos de la gente altamente efectiva
Aniurcar pérez ecología
The Tugler Show Episode 7
การสะท้อนของแสง
Vitrine Tupperware 1/2016 - Juliana Marchetti
Ekosistema.4.taldea.mendi
Chocolate Toast Crunch Cereal
POLYMERASE CHAIN REACTION
IOCL-REPORT
สื่อการสอน Internet 2559
Ad

Similar to IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using JCache (20)

PDF
Using JCache to speed up your apps
PDF
JCache - It's finally here
PDF
Distributed applications using Hazelcast
PDF
In-memory No SQL- GIDS2014
PDF
Gimme Caching - The JCache Way
PPTX
From cache to in-memory data grid. Introduction to Hazelcast.
PDF
JSR107 State of the Union JavaOne 2013
PDF
Gimme Caching - The JCache Way
PDF
Building scalable applications with hazelcast
PPTX
Jug Lugano - Scale over the limits
PDF
Building scalable applications with hazelcast
PDF
Distributed caching with java JCache
PPTX
Think Distributed: The Hazelcast Way
PDF
Caching reboot: javax.cache & Ehcache 3
PPTX
Distributed caching and computing v3.7
PPTX
Distributed caching-computing v3.8
PDF
Caching 101: Caching on the JVM (and beyond)
PDF
Overview of the ehcache
PPT
Cluster your application using CDI and JCache - Jonathan Gallimore
PDF
Ehcache 3 @ BruJUG
Using JCache to speed up your apps
JCache - It's finally here
Distributed applications using Hazelcast
In-memory No SQL- GIDS2014
Gimme Caching - The JCache Way
From cache to in-memory data grid. Introduction to Hazelcast.
JSR107 State of the Union JavaOne 2013
Gimme Caching - The JCache Way
Building scalable applications with hazelcast
Jug Lugano - Scale over the limits
Building scalable applications with hazelcast
Distributed caching with java JCache
Think Distributed: The Hazelcast Way
Caching reboot: javax.cache & Ehcache 3
Distributed caching and computing v3.7
Distributed caching-computing v3.8
Caching 101: Caching on the JVM (and beyond)
Overview of the ehcache
Cluster your application using CDI and JCache - Jonathan Gallimore
Ehcache 3 @ BruJUG

More from In-Memory Computing Summit (20)

PPTX
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
PPTX
IMC Summit 2016 Breakout - Henning Andersen - Using Lock-free and Wait-free I...
PPTX
IMC Summit 2016 Breakout - Roman Shtykh - Apache Ignite as a Data Processing Hub
PDF
IMC Summit 2016 Breakout - Nikita Shamgunov - Propelling IoT Innovation with ...
PPTX
IMC Summit 2016 Breakout - Matt Coventon - Test Driving Streaming and CEP on ...
PDF
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
PPTX
IMC Summit 2016 Innovation - Dennis Duckworth - Lambda-B-Gone: The In-memory ...
PPTX
IMC Summit 2016 Innovation - Steve Wilkes - Tap Into Your Enterprise – Why Da...
PPTX
IMC Summit 2016 Innovation - Girish Mutreja - Unveiling the X Platform
PPTX
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
PPTX
IMC Summit 2016 Breakout - Brian Bulkowski - NVMe, Storage Class Memory and O...
PDF
IMC Summit 2016 Breakout - Yanping Wang - Non-volatile Generic Object Program...
PPTX
IMC Summit 2016 Breakout - Andy Pavlo - What Non-Volatile Memory Means for th...
PPTX
IMC Summit 2016 Breakout - Gordon Patrick - Developments in Persistent Memory
PPTX
IMC Summit 2016 Breakout - Girish Kathalagiri - Decision Making with MLLIB, S...
PPTX
IMC Summit 2016 Breakout - Steve Wikes - Making IMC Enterprise Grade
PPTX
IMC Summit 2016 Breakout - Noah Arliss - The Truth: How to Test Your Distribu...
PPTX
IMC Summit 2016 Breakout - Aleksandar Seovic - The Illusion of Statelessness
PPTX
IMC Summit 2016 Breakout - Girish Mutreja - Extreme Transaction Processing in...
PPTX
IMC Summit 2016 Breakout - Pandurang Naik - Demystifying In-Memory Data Grid,...
IMC Summit 2016 Breakout - Per Minoborg - Work with Multiple Hot Terabytes in...
IMC Summit 2016 Breakout - Henning Andersen - Using Lock-free and Wait-free I...
IMC Summit 2016 Breakout - Roman Shtykh - Apache Ignite as a Data Processing Hub
IMC Summit 2016 Breakout - Nikita Shamgunov - Propelling IoT Innovation with ...
IMC Summit 2016 Breakout - Matt Coventon - Test Driving Streaming and CEP on ...
IMC Summit 2016 Innovation - Derek Nelson - PipelineDB: The Streaming-SQL Dat...
IMC Summit 2016 Innovation - Dennis Duckworth - Lambda-B-Gone: The In-memory ...
IMC Summit 2016 Innovation - Steve Wilkes - Tap Into Your Enterprise – Why Da...
IMC Summit 2016 Innovation - Girish Mutreja - Unveiling the X Platform
IMC Summit 2016 Breakout - Ken Gibson - The In-Place Working Storage Tier
IMC Summit 2016 Breakout - Brian Bulkowski - NVMe, Storage Class Memory and O...
IMC Summit 2016 Breakout - Yanping Wang - Non-volatile Generic Object Program...
IMC Summit 2016 Breakout - Andy Pavlo - What Non-Volatile Memory Means for th...
IMC Summit 2016 Breakout - Gordon Patrick - Developments in Persistent Memory
IMC Summit 2016 Breakout - Girish Kathalagiri - Decision Making with MLLIB, S...
IMC Summit 2016 Breakout - Steve Wikes - Making IMC Enterprise Grade
IMC Summit 2016 Breakout - Noah Arliss - The Truth: How to Test Your Distribu...
IMC Summit 2016 Breakout - Aleksandar Seovic - The Illusion of Statelessness
IMC Summit 2016 Breakout - Girish Mutreja - Extreme Transaction Processing in...
IMC Summit 2016 Breakout - Pandurang Naik - Demystifying In-Memory Data Grid,...

Recently uploaded (20)

PPTX
sac 451hinhgsgshssjsjsjheegdggeegegdggddgeg.pptx
PPT
lectureusjsjdhdsjjshdshshddhdhddhhd1.ppt
PPTX
IMPACT OF LANDSLIDE.....................
PPTX
Qualitative Qantitative and Mixed Methods.pptx
PPTX
retention in jsjsksksksnbsndjddjdnFPD.pptx
PPTX
01_intro xxxxxxxxxxfffffffffffaaaaaaaaaaafg
PPTX
Pilar Kemerdekaan dan Identi Bangsa.pptx
PDF
Introduction to Data Science and Data Analysis
PPT
ISS -ESG Data flows What is ESG and HowHow
PPTX
QUANTUM_COMPUTING_AND_ITS_POTENTIAL_APPLICATIONS[2].pptx
PPTX
Topic 5 Presentation 5 Lesson 5 Corporate Fin
PPTX
STERILIZATION AND DISINFECTION-1.ppthhhbx
PPTX
Database Infoormation System (DBIS).pptx
PPTX
AI Strategy room jwfjksfksfjsjsjsjsjfsjfsj
PDF
Votre score augmente si vous choisissez une catégorie et que vous rédigez une...
PDF
OneRead_20250728_1808.pdfhdhddhshahwhwwjjaaja
PPTX
Market Analysis -202507- Wind-Solar+Hybrid+Street+Lights+for+the+North+Amer...
PDF
Business Analytics and business intelligence.pdf
PDF
How to run a consulting project- client discovery
PPTX
modul_python (1).pptx for professional and student
sac 451hinhgsgshssjsjsjheegdggeegegdggddgeg.pptx
lectureusjsjdhdsjjshdshshddhdhddhhd1.ppt
IMPACT OF LANDSLIDE.....................
Qualitative Qantitative and Mixed Methods.pptx
retention in jsjsksksksnbsndjddjdnFPD.pptx
01_intro xxxxxxxxxxfffffffffffaaaaaaaaaaafg
Pilar Kemerdekaan dan Identi Bangsa.pptx
Introduction to Data Science and Data Analysis
ISS -ESG Data flows What is ESG and HowHow
QUANTUM_COMPUTING_AND_ITS_POTENTIAL_APPLICATIONS[2].pptx
Topic 5 Presentation 5 Lesson 5 Corporate Fin
STERILIZATION AND DISINFECTION-1.ppthhhbx
Database Infoormation System (DBIS).pptx
AI Strategy room jwfjksfksfjsjsjsjsjfsjfsj
Votre score augmente si vous choisissez une catégorie et que vous rédigez une...
OneRead_20250728_1808.pdfhdhddhshahwhwwjjaaja
Market Analysis -202507- Wind-Solar+Hybrid+Street+Lights+for+the+North+Amer...
Business Analytics and business intelligence.pdf
How to run a consulting project- client discovery
modul_python (1).pptx for professional and student

IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using JCache

  • 1. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› GREG LUCK, CO-SPEC LEAD JSR107 @GREGRLUCK CEO | HAZELCAST FOUNDER | EHCACHE FORMER CTO 23 MAY 2016 How to speed up your application using JCache See all the presentations from the In-Memory Computing Summit at http://imcsummit.org
  • 2. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Agenda • Introduction to Caching • Java Caching (JCache), JSR-107
  • 3. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Introduction to Caching
  • 4. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Benefits of Caching • Performance • Offload expensive or non-scalable parts of your architecture • Scale up – get the most out of one machine • Scale out – add more capacity with more machines • Excellent Buffer against load variability And… • Usually very fast and easy to apply
  • 5. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› When to Use Caching • When applications use the same data more than once • When cost (time / resources) of making an initial copy is less than fetching or producing the data again or when faster to request from a Cache
  • 6. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Common Problem Areas that Benefit Anything Web Scale Anything where the data is across the network Compound Data Objects Data Persistence 1 3 2 4
  • 7. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Database Caching Moving data from the database into the cache increases processing speed and can reduce database licensing and maintenance costs. Speed ✓ Data Store Application Cache Application Cache Application Cache Application Cache Costs ✓ Scalability ✓ ~200 us Average Response Time
  • 8. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Caches are built primarily in RAM in-process or distributed NVRAM/Flash/SSD (serialized form) Local Storage Heap (Objects) Opaque to GC in RAM (serialized form) <100 ns < 100ns +deserialization time 2 500 1,000+ Latency Size (GB) Network Storage < 50us +deserialization time < 140us for 1Gbps < 70us for 10Gbps/40Gbps +deserialization time 20,000+Scaleout across the network (serialized form)
  • 9. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› ‘s law Estimated Performance Improvements Predicted System Speedup = 1 / ((1 – Proportion Sped Up) + Proportion Sped Up / Speed up))
  • 10. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Cache Efficiency Cache Efficiency = cache hits / total hits • High efficiency = high offload • High efficiency = high performance • How to increase: - Put reference data in the cache - Put long lived in the cache. - Consider frequency of mutability of data - Put highly used data in cache - Increase the size of the cache. Today you can create TB sized caches
  • 11. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Problems to Consider • Standalone Caches and the N * problem - As each entry expires, the backing system gets N requests for data where n is the number of standalone caches. Solution: Use a distributed cache • Consistency with the System of Record - How to keep the cache in sync with changes in a backing system. Solution: Match mutability of data with data safety configuration. Update the cache and backing store at the same time. • Consistency with other cache nodes - How to keep all cache nodes in sync: Solution: Use a distributed cache and match consistency configuration with data mutability
  • 12. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› New JCache Standard (JSR107)
  • 13. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Java Caching (JCache) What? • Java Caching (JCache) standardized Caching for the Java Platform* • A common mechanism to create, access, update and remove information from Caches How? • JSR-107: Java Caching Specification (JCache) • Java Community Process (JCP) 2.9
  • 14. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Java Caching (JCache) Why? • Standardize! Standardize! Standardize! - Core Caching Concepts - Core Caching API • Provide application portability between Caching solutions - Big & Small, Open & Commercial • Caching is ubiquitous! • Allows frameworks to depend on JCache and stop creating specific integrations to each and every cache
  • 15. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Java Caching (Jcache) Recent History Item Date JCache Final Spec Released 18 March 2014 Spring 4.1 September 2014 Hazelcast 3.3.1 TCK Compliant September 2014 Hazelcast 3.4 (with High-Density Memory Store) November 2014 Hazelcast 3.5 - added HD Memory Store to near cache) June 2015 Most project vendors create implementations June 2014 - June 2015 Hazelcast 3.6 (split brain handler, quorums) January 2016 JCache 1.1 Maintenance Release Summer 2016 JCache 2.0 Will start after 1.1
  • 16. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Java Caching (JCache) Which Platform? java.util.Map (Java 6/7) Target Platform Specification (SPEC) Java 6+ (SE or EE) Reference Implementation (RI) Java 7+ (SE or EE) Technology Compatibility Kit (TCK) Java 7+ (SE or EE) Demos and Samples Java 7+ (SE or EE)
  • 17. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Implementations • JCache Reference Implementation • Ehcache • Hazelcast • Oracle Coherence • Infinispan • GridGain/Apache Ignite • TayzGrid • Caffeine • Cache2K (in progress) • Blazing Cache (in progress) • tCache (Trivago in process) Keep Track • https://jcp.org/aboutJava/communityprocess/i mplementations/jsr107/index.html • https://github.com/cruftex/jsr107-test- zoo/blob/master/report.md
  • 18. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Non-Implementation: Gemfire/Geode Gemfire/Geode have no plans to implement Why? • Gemfire and Geode are directly supported in Spring • Because Spring supports JCache cache annotations you can use Gemfire/Geode from Spring but that is it. See: • http://apache-geode-incubating-developers- forum.70738.x6.nabble.com/JCache-JSR-107-support-td1255.html Campaign to have Pivotal Support JCache: #PivotalJCache campaign for @PivotalGemFire to support #JSR107 #JCache. Please retweet or mention #PivotalJCache
  • 19. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Relationship to NoSQL Difficult/Impossible for NoSQL to fully implement the spec • Server Side code execution including: Entry Processors, Listeners, Write-Through etc. • Strong Consistency is the default consistency model and is not supported by most/all NoSQL. Likely that Couchbase will release a partial implementation leaving out EntryProcessor and some other methods with an UnsupportedOperationException if these methods are called. They have Developer Preview 2 out. Using With NoSQL • Use NoSQL like a database and read-through/write-though to it using CacheLoader/CacheWriter. • NoSQL gives you scale our persistence - cache gives you very low latencies
  • 20. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Java Caching (JCache) Project Hosting • JCP Project: - http://jcp.org/en/jsr/detail?id=107 • Source Code: - https://github.com/jsr107 • Forum: - https://groups.google.com/forum/?fromgroups#!forum/jsr107
  • 21. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Java Caching (JCache) How to get it • Apache Maven (via Maven Central Repository) <dependency> <groupId>javax.cache</groupId> <artifactId>cache-api</artifactId> <version>1.0</version> </dependency>
  • 22. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Caches and Caching
  • 23. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Caches and Caching JSR107 Cache Definition: A high-performance, low-latency data-structure* in which an application places a temporary copy of information that is likely to be used more than once
  • 24. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Maps vs Cache APIs java.util.Map (Java 6/7) Key-Value Based API Supports Atomic Updates Entries Don’t Expire Entries Aren’t Evicted Entries Stored On-Heap Store-By-Reference javax.cache.Cache (Java 6) Key-Value Based API Supports Atomic Updates Entries May Expire Entries May Be Evicted Entries Stored Anywhere (ie: topologies) Store-By-Value and Store-By-Reference Supports Integration (ie: Loaders / Writers) Supports Observation (ie: Listeners) Entry Processors Statistics
  • 25. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Features • java.util.ConcurrentMap like API • Atomic Operations • Lock-Free • Read-Through / Write-Through Integration Support • Cache Event Listeners • Fully Generic API = type-safety • Statistics • Annotations (for frameworks and containers) • Store-By-Value semantics (optional store-by-reference)
  • 26. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Features • Topology Agnostic - Topologies not defined or restricted by the specification • Efficiently supports: - “local” in-memory Caching and - “distributed” server-based Caching
  • 27. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache Key Classes/Interfaces
  • 28. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Runtime Structure Caching “service loader” CachingProvider “SPI implementation” CacheManager “manager of caches” Cache “interface to a Cache” * Created & Managed By Created & Managed By “application” Uses.. Loads & Tracks * * *
  • 29. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Cache Managers javax.cache.CacheManager • Establishes, configures, manages and owns named Caches - Caches may be pre-define or dynamically created at runtime • Provides Cache infrastructure and resources • Provides Cache “scoping” (say in a Cluster) • Provides Cache ClassLoaders (important for store-by-value) • Provides Cache lifecycle management
  • 30. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Hello World (via a Cache Manager) // acquire the default CacheManager CacheManager manager = Caching.getCacheManager(); // acquire a previously configured cache (via CacheManager) Cache<Integer, String> cache = manager.getCache(“my-cache”, Integer.class, String.class); // put something in the cache cache.put(123, “Hello World”); // get something from the cache String message = cache.get(123);
  • 31. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Cache Interface & Methods (in IDE)
  • 32. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Entry Processors Custom atomic operations for everyone! // acquire a cache Cache<String, Integer> cache = manager.getCache(“my-cache”, String.class, Integer.class); // increment a cached value by 42, returning the old value int value = cache.invoke(“key”, new IncrementProcessor<>(), 42);
  • 33. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Entry Processors Custom atomic operations for everyone! public class IncrementProcessor<K> implements EntryProcessor<K, Integer, Integer>, Serializable { @Override public Integer process(MutableEntry<K, Integer> entry, Object... arguments) { if (entry.exists()) { int amount = arguments.length == 0 ? 1 :(Integer)arguments[0]; int current = entry.getValue(); entry.setValue(count + amount); return current; } else { throw new IllegalStateException(“no entry exists”); } } }
  • 34. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Entry Processors Custom atomic operations for everyone! • Eliminate Round-Trips! (in distributed systems) • Enable development of a Lock-Free API! (simplifies applications) *May need to be Serializable (in distributed systems) Application CacheCache Application
  • 35. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache: Entry Processors Which is better? // using an entry processor? int value = cache.invoke( “key”, new IncrementProcessor<>(), 42); // using a lock based API? cache.lock(“key”); int current = cache.get(“key”); cache.put(“key”, current + 42); cache.unlock(“key”);
  • 36. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Annotations • JSR107 introduces a standardized set of caching annotations, which do method level caching interception on annotated classes running in dependency injection containers. • Caching annotations are becoming increasingly popular: - Ehcache Annotations for Spring - Spring 3’s caching annotations. • JSR107 Annotations will be added to: - Java EE 8 (planned?) - Spring 4.1 (released)
  • 37. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Annotation Operations The JSR107 annotations cover the most common cache operations: • @CacheResult • @CachePut • @CacheRemove • @CacheRemoveAll
  • 38. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Fully Annotated Class Example @CacheDefaults(cacheName = "blogManager") public class BlogManager { @CacheResult public Blog getBlogEntry(String title) {...} @CacheRemove public void removeBlogEntry(String title) {...} @CacheRemoveAll public void removeAllBlogs() {...} @CachePut public void createEntry(@CacheKey String title, @CacheValue Blog blog) {...} @CacheResult public Blog getEntryCached(String randomArg, @CacheKey String title){...} }
  • 39. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache With Spring • Spring - uses JCache since 4.1 http://bit.ly/1V0q1Kp - Added support for JCache cache annotations which can be mixed and matched with Spring ones • Spring Boot - Auto-configuration for any JCache Provider http://bit.ly/1TPQKLx
  • 40. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache With Java EE • Java EE - Can add JCache and an implementation to any Java EE app by adding the jars and configuring it outside of EE. • Java EE 8 - JCache added to EE8 - Add JCache Annotations - Other integration possibilities: • ejb timer store • jbatch store • JPA - Adam Bien is prepared to lead a JSR to get JCache into EE8. 4 contributors so far. See See https://abhirockzz.wordpress.com/2016/01/21/jcache-in-java-ee-8/
  • 41. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› The Future • JCache 1.1 • Java EE 8 Integration (2017) • JCache 2.0 (Later)
  • 42. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache 1.1 • CDDL GPL with Class Path Exception License to the spec API or UPL. • Errata • TCK Challenges • Very Close – should be Summer 2016
  • 43. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› JCache 2.0 Enterprise Features - Transactions - Annotations Integration for EE - Servlet 4.0 Integration / Session Caching Core - Java 8 - Java 9 Modularity - Async API - Distributed java.util.stream - Basic cache profile: - listener, -integration, - EntryProcessor. Timing • Start after 1.1 is released
  • 44. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Hazelcast JCache Support Full TCK Compliant implementation for: • Embedded Members • Clients (caches are stored in Members) • HD Memory Store for members and near cache • Very Fast Persistence with the Hot Restart Store • Very fast and highly scalable JCache Implementation • Usable in all cloud environments. Works with CloudFoundry and OpenShift • Docs: http://bit.ly/1Q52yDz
  • 45. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Questions? Greg Luck • @gregrluck • [email protected]

Editor's Notes

  • #5: Caching as a solution automatically provides speed. And a distributed cache provides scale out.
  • #6: Caching as a solution automatically provides speed. And a distributed cache provides scale out.
  • #7: Most Amdahl’s Law analyses will turn up the following bottlenecks: Web: static content (solved by edge caches such as Akamai, Limelight, CloudFront), origin page caching and page fragment caching. e.g. Can be hundreds of DB lookups to build up a page Collections Caching: Storing precomputed or transformed results. E.g. hotels in a region External Systems: Web services, Data: Data Stores
  • #9: But in Ehcache you should be always able to fit what you need to in cache. Even beyond the limits of local storage, the partitioned cache available with Terracotta Server Array takes you into the terabytes. And the speeds shown are worst case. The average for a given cache will heavily favour the highest points of the pyramid. Overall throughput is scaleable by increasing threads, cpus and nodes.
  • #10: Amdahl's law, after Gene Amdahl, is used to find the system speed up from a speed up in part of the system. 1 / ((1 - Proportion Sped Up) + Proportion Sped Up / Speed up)To apply Amdahl’s law you must measure the components of system time and the before and after affect of the perf change made. It is thus an empirical approach.
  • #11: Two reasons for poor performance: What if the data set is too large to fit in the cache? What about limiting time to live due to concerns around staleness of data i.e. incoherence with the underlying SOR
  • #12: Two reasons for poor performance: What if the data set is too large to fit in the cache? What about limiting time to live due to concerns around staleness of data i.e. incoherence with the underlying SOR
  • #25: Perhaps ask who is using Java 6? Note that we’re comparing to Java 6/7 java.lang.Map, not Java 8.