SlideShare a Scribd company logo
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
GREG LUCK, CO-SPEC LEAD JSR107
@GREGRLUCK CEO | HAZELCAST FOUNDER | EHCACHE FORMER CTO
18 FEBRUARY 2016
How to speed up your
application using JCache
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Agenda
• Theory of Caching
• Java Caching (JCache), JSR-107
• Code Demo
© 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
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 March 2016
Herenow!
© 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
Implementations
• JCache Reference Implementation
• Ehcache
• Hazelcast
• Oracle Coherence
• Infinispan
• GridGain/Apache Ignite
• TayzGrid*
• Caffeine* (Ben Manes)
Keep Track
• https://jcp.org/aboutJava/communityprocess/implementations/jsr107/index.html
• * Being verified by spec leads
© 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”);

Java 8Ready!
© 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 (2016)
- Maintenance Release being worked on, by me ☺
- Just bug fixes
• Java EE 8 Integration (2017)
• JCache 2.0 (Later)
- Transactions
- Async API
- Servlet 4.0 Integration / Session Caching
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Working with Hazelcast JCache
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Hazelcast JCache Support
Full TCK Compliant implementation for:
• Features:
• Embedded Members
• Clients (caches are stored in Members)
• HD Memory Store for members and near cache
• Very Fast Persistence with the Hot Restart Store
• Docs: http://bit.ly/1Q52yDz
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Hazelcast JCache Performance
• Fastest IMDG using competitors
own benchmarks
• See http://bit.ly/1T36n1m
• We added JCache put/get to
Yardstick and will add it to
RadarGun.
© 2016 Hazelcast Inc. Confidential & Proprietary ‹#›
Questions?
Greg Luck
• @gregrluck
• greg@hazelcast.com
Thank you

More Related Content

PPTX
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
PDF
Distributed applications using Hazelcast
PDF
PDF
Hazelcast for Terracotta Users
PDF
Distributed caching with java JCache
PDF
Barcelona mysqlnd qc
PDF
Time to Make the Move to In-Memory Data Grids
PDF
Ehcache Architecture, Features And Usage Patterns
IMC Summit 2016 Breakout - Greg Luck - How to Speed Up Your Application Using...
Distributed applications using Hazelcast
Hazelcast for Terracotta Users
Distributed caching with java JCache
Barcelona mysqlnd qc
Time to Make the Move to In-Memory Data Grids
Ehcache Architecture, Features And Usage Patterns

What's hot (20)

PDF
Postgres Plus Cloud Database on OpenStack
PDF
Hazelcast Introduction
PDF
Hazelcast 101
PPTX
Proxysql use case scenarios fosdem17
PDF
MySQL Performance Metrics that Matter
PDF
MySQL: From Single Instance to Big Data
PDF
Squeezing Performance out of Hazelcast
KEY
Whirr dev-up-puppetconf2011
PDF
Implementing High Availability Caching with Memcached
PDF
Mysql User Camp : 20-June-14 : Mysql Fabric
PDF
MySQL Manchester TT - Performance Tuning
PDF
Hadoop Operations at LinkedIn
PDF
JCache (JSR107) - QCon London 2015 & JBCNConf Barcelona 2015
PDF
Optimizing MySQL for Cascade Server
PDF
Web session replication with Hazelcast
PPTX
3. v sphere big data extensions
PDF
Scaling MySQl 1 to N Servers -- Los Angelese MySQL User Group Feb 2014
KEY
Caching: A Guided Tour - 10/12/2010
PDF
MySQL Cloud Service Deep Dive
PDF
Tulsa tech fest 2010 - web speed and scalability
Postgres Plus Cloud Database on OpenStack
Hazelcast Introduction
Hazelcast 101
Proxysql use case scenarios fosdem17
MySQL Performance Metrics that Matter
MySQL: From Single Instance to Big Data
Squeezing Performance out of Hazelcast
Whirr dev-up-puppetconf2011
Implementing High Availability Caching with Memcached
Mysql User Camp : 20-June-14 : Mysql Fabric
MySQL Manchester TT - Performance Tuning
Hadoop Operations at LinkedIn
JCache (JSR107) - QCon London 2015 & JBCNConf Barcelona 2015
Optimizing MySQL for Cascade Server
Web session replication with Hazelcast
3. v sphere big data extensions
Scaling MySQl 1 to N Servers -- Los Angelese MySQL User Group Feb 2014
Caching: A Guided Tour - 10/12/2010
MySQL Cloud Service Deep Dive
Tulsa tech fest 2010 - web speed and scalability
Ad

Similar to Caching and JCache with Greg Luck 18.02.16 (20)

PDF
Using JCache to speed up your apps
PDF
JCache - It's finally here
PDF
In-memory No SQL- GIDS2014
PDF
Gimme Caching - The JCache Way
PDF
JSR107 State of the Union JavaOne 2013
PPT
Cluster your application using CDI and JCache - Jonathan Gallimore
PPTX
From cache to in-memory data grid. Introduction to Hazelcast.
PDF
Gimme Caching - The JCache Way
PPTX
Think Distributed: The Hazelcast Way
PPTX
Jug Lugano - Scale over the limits
PPTX
Distributed caching and computing v3.7
PDF
Building scalable applications with hazelcast
PDF
Building scalable applications with hazelcast
PDF
Caching reboot: javax.cache & Ehcache 3
PDF
Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES
PDF
JCache - Gimme Caching - JavaLand
PDF
[DevopsDays India 2019] Where is my cache? Architectural patterns for caching...
PDF
Caching 101: Caching on the JVM (and beyond)
PDF
Caching 101: sur la JVM et au delà
PPTX
Distributed caching-computing v3.8
Using JCache to speed up your apps
JCache - It's finally here
In-memory No SQL- GIDS2014
Gimme Caching - The JCache Way
JSR107 State of the Union JavaOne 2013
Cluster your application using CDI and JCache - Jonathan Gallimore
From cache to in-memory data grid. Introduction to Hazelcast.
Gimme Caching - The JCache Way
Think Distributed: The Hazelcast Way
Jug Lugano - Scale over the limits
Distributed caching and computing v3.7
Building scalable applications with hazelcast
Building scalable applications with hazelcast
Caching reboot: javax.cache & Ehcache 3
Spring One 2 GX 2014 - CACHING WITH SPRING: ADVANCED TOPICS AND BEST PRACTICES
JCache - Gimme Caching - JavaLand
[DevopsDays India 2019] Where is my cache? Architectural patterns for caching...
Caching 101: Caching on the JVM (and beyond)
Caching 101: sur la JVM et au delà
Distributed caching-computing v3.8
Ad

More from Comsysto Reply GmbH (20)

PDF
Architectural Decisions: Smoothly and Consistently
PDF
ljug-meetup-2023-03-hexagonal-architecture.pdf
PDF
Software Architecture and Architectors: useless VS valuable
PDF
Invited-Talk_PredAnalytics_München (2).pdf
PDF
MicroFrontends für Microservices
PDF
Alles offen = gut(ai)
PDF
Bable on Smart City Munich Meetup: How cities are leveraging innovative partn...
PDF
Smart City Munich Kickoff Meetup
PDF
Data Reliability Challenges with Spark by Henning Kropp (Spark & Hadoop User ...
PDF
"Hadoop Data Lake vs classical Data Warehouse: How to utilize best of both wo...
PDF
Data lake vs Data Warehouse: Hybrid Architectures
PPTX
Java 9 Modularity and Project Jigsaw
PDF
Distributed Computing and Caching in the Cloud: Hazelcast and Microsoft
PDF
Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
PDF
Building a fully-automated Fast Data Platform
PPTX
Apache Apex: Stream Processing Architecture and Applications
PPTX
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
PDF
Geospatial applications created using java script(and nosql)
PDF
Java cro 2016 - From.... to Scrum by Jurica Krizanic
PDF
21.04.2016 Meetup: Spark vs. Flink
Architectural Decisions: Smoothly and Consistently
ljug-meetup-2023-03-hexagonal-architecture.pdf
Software Architecture and Architectors: useless VS valuable
Invited-Talk_PredAnalytics_München (2).pdf
MicroFrontends für Microservices
Alles offen = gut(ai)
Bable on Smart City Munich Meetup: How cities are leveraging innovative partn...
Smart City Munich Kickoff Meetup
Data Reliability Challenges with Spark by Henning Kropp (Spark & Hadoop User ...
"Hadoop Data Lake vs classical Data Warehouse: How to utilize best of both wo...
Data lake vs Data Warehouse: Hybrid Architectures
Java 9 Modularity and Project Jigsaw
Distributed Computing and Caching in the Cloud: Hazelcast and Microsoft
Grundlegende Konzepte von Elm, React und AngularDart 2 im Vergleich
Building a fully-automated Fast Data Platform
Apache Apex: Stream Processing Architecture and Applications
Ein Prozess lernt laufen: LEGO Mindstorms Steuerung mit BPMN
Geospatial applications created using java script(and nosql)
Java cro 2016 - From.... to Scrum by Jurica Krizanic
21.04.2016 Meetup: Spark vs. Flink

Recently uploaded (20)

PPTX
mbdjdhjjodule 5-1 rhfhhfjtjjhafbrhfnfbbfnb
PDF
Galatica Smart Energy Infrastructure Startup Pitch Deck
PPTX
Business Acumen Training GuidePresentation.pptx
PPTX
Introduction to machine learning and Linear Models
PPT
Quality review (1)_presentation of this 21
PPTX
Introduction to Basics of Ethical Hacking and Penetration Testing -Unit No. 1...
PPT
ISS -ESG Data flows What is ESG and HowHow
PDF
168300704-gasification-ppt.pdfhghhhsjsjhsuxush
PPTX
Introduction to Firewall Analytics - Interfirewall and Transfirewall.pptx
PPTX
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
PPTX
Microsoft-Fabric-Unifying-Analytics-for-the-Modern-Enterprise Solution.pptx
PPTX
Computer network topology notes for revision
PDF
Foundation of Data Science unit number two notes
PDF
.pdf is not working space design for the following data for the following dat...
PDF
Business Analytics and business intelligence.pdf
PPTX
AI Strategy room jwfjksfksfjsjsjsjsjfsjfsj
PPTX
Qualitative Qantitative and Mixed Methods.pptx
PPTX
Introduction-to-Cloud-ComputingFinal.pptx
PPTX
ALIMENTARY AND BILIARY CONDITIONS 3-1.pptx
mbdjdhjjodule 5-1 rhfhhfjtjjhafbrhfnfbbfnb
Galatica Smart Energy Infrastructure Startup Pitch Deck
Business Acumen Training GuidePresentation.pptx
Introduction to machine learning and Linear Models
Quality review (1)_presentation of this 21
Introduction to Basics of Ethical Hacking and Penetration Testing -Unit No. 1...
ISS -ESG Data flows What is ESG and HowHow
168300704-gasification-ppt.pdfhghhhsjsjhsuxush
Introduction to Firewall Analytics - Interfirewall and Transfirewall.pptx
MODULE 8 - DISASTER risk PREPAREDNESS.pptx
Microsoft-Fabric-Unifying-Analytics-for-the-Modern-Enterprise Solution.pptx
Computer network topology notes for revision
Foundation of Data Science unit number two notes
.pdf is not working space design for the following data for the following dat...
Business Analytics and business intelligence.pdf
AI Strategy room jwfjksfksfjsjsjsjsjfsjfsj
Qualitative Qantitative and Mixed Methods.pptx
Introduction-to-Cloud-ComputingFinal.pptx
ALIMENTARY AND BILIARY CONDITIONS 3-1.pptx

Caching and JCache with Greg Luck 18.02.16

  • 1. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› GREG LUCK, CO-SPEC LEAD JSR107 @GREGRLUCK CEO | HAZELCAST FOUNDER | EHCACHE FORMER CTO 18 FEBRUARY 2016 How to speed up your application using JCache
  • 2. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Agenda • Theory of Caching • Java Caching (JCache), JSR-107 • Code Demo
  • 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 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 March 2016 Herenow!
  • 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 Implementations • JCache Reference Implementation • Ehcache • Hazelcast • Oracle Coherence • Infinispan • GridGain/Apache Ignite • TayzGrid* • Caffeine* (Ben Manes) Keep Track • https://jcp.org/aboutJava/communityprocess/implementations/jsr107/index.html • * Being verified by spec leads
  • 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”);
 Java 8Ready!
  • 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 (2016) - Maintenance Release being worked on, by me ☺ - Just bug fixes • Java EE 8 Integration (2017) • JCache 2.0 (Later) - Transactions - Async API - Servlet 4.0 Integration / Session Caching
  • 42. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Working with Hazelcast JCache
  • 43. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Hazelcast JCache Support Full TCK Compliant implementation for: • Features: • Embedded Members • Clients (caches are stored in Members) • HD Memory Store for members and near cache • Very Fast Persistence with the Hot Restart Store • Docs: http://bit.ly/1Q52yDz
  • 44. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Hazelcast JCache Performance • Fastest IMDG using competitors own benchmarks • See http://bit.ly/1T36n1m • We added JCache put/get to Yardstick and will add it to RadarGun.
  • 45. © 2016 Hazelcast Inc. Confidential & Proprietary ‹#› Questions? Greg Luck • @gregrluck • greg@hazelcast.com