of 79 /79
@ljacomet #DevoxxMA #ehcache Ehcache 3 JSR-107 on steroids Louis Jacomet - Lead Software Engineer

Ehcache 3: JSR-107 on steroids at Devoxx Morocco

Embed Size (px)

Text of Ehcache 3: JSR-107 on steroids at Devoxx Morocco

  • @ljacomet#DevoxxMA #ehcache

    Ehcache 3 JSR-107 on steroids

    Louis Jacomet - Lead Software Engineer

  • @ljacomet#DevoxxMA #ehcache

    Who am I? Louis Jacomet

    Software engineer, closer to 40 than 20 and still coding!

    @ Terracotta (Software AG) since 2013

    Working on Ehcache mostly

    Team manager and fiddling in infrastructure

    No idea how to do a (nice) UI, especially a web one Enjoys concurrency, API design and hard problems

  • @ljacomet#DevoxxMA #ehcache

    And what about you? Who knows nothing about caching? Who already uses caching in production? Who had production problems related to

    caching?

    Who knows about JCache?

  • @ljacomet#DevoxxMA #ehcache

    AgendaCaching and JSR-107

    Ehcache past and present

    Ehcache 3 future

  • @ljacomet#DevoxxMA #ehcache

    Caching and JSR-107

  • @ljacomet#DevoxxMA #ehcache

    Caching Data structure holding a temporary copy of data Trade off between higher memory usage and

    reduced latency

    Targets Data which is reused Data which is expensive to compute / retrieve

  • @ljacomet#DevoxxMA #ehcache

    Caches all over the place

    CPU

    Browser

    Network

    Disk

  • @ljacomet#DevoxxMA #ehcache

    What should I cache? Keys

    Proper equals/hashcode

    Immutable Small(ish)

    Value Proper equals/

    hashcode

    Ideally immutable Think concurrent

    otherwise

    Size matters

  • @ljacomet#DevoxxMA #ehcache

    JSR-107 javax.cache

    Java Community Process driven standard Specifies API and semantics for temporary,

    in-memory caching of Java objects, including object creation, shared access, spooling, invalidation, and consistency across JVM's

  • @ljacomet#DevoxxMA #ehcache

    JSR-107 Features CacheManager / Cache Expiration

    Creation/Access/Update

    Integration CacheLoader /

    Writer

    CacheEntryListener Created/Updated Removed/Expired Get old value

    Entry processor Annotations MBeans, exposing

    Configuration Statistics

    No capacity control !

  • @ljacomet#DevoxxMA #ehcache

    JSR-107 gotchas MutableConfiguration

    Always invoke MutableConfiguration.setTypes(Class, Class)

    Otherwise Cache only knows about Object Adding a CacheLoader factory is not enough -

    need to invoke setReadThrough(boolean)

  • @ljacomet#DevoxxMA #ehcache

    JSR-107 gotchas (2) Compare and Swap operations with a CacheLoader

    Loader is ignored putIfAbsent checks Cache only, not underlying

    system of record

    Results in a weird contract

  • @ljacomet#DevoxxMA #ehcache

    Ehcache past and present

  • @ljacomet#DevoxxMA #ehcache

    A bit of history Announced in November 2003 on v1.0 released on September 2004

    Only a few days before Java 5 and generics Acquired in 2009 by v2.0 released in March 2010 Terracotta acquired in 2011 by

  • @ljacomet#DevoxxMA #ehcache

    Storage model: tiers Multiple storage tiers

    Heap: like objects in a regular hash map Off-heap: binary form stored outside of

    Garbage Collector reach

    Disk: binary form stored on disk Clustered: binary form stored on other

    server(s)

  • @ljacomet#DevoxxMA #ehcache

    Overflow model

    Heap

    Disk

  • @ljacomet#DevoxxMA #ehcache

    Heap

    Disk

    Overflow model

  • @ljacomet#DevoxxMA #ehcache

    Disk

    Heap

    Overflow model

  • @ljacomet#DevoxxMA #ehcache

    Disk

    Heap

    Overflow model

  • @ljacomet#DevoxxMA #ehcache

    Disk

    Heap

    Overflow model

  • @ljacomet#DevoxxMA #ehcache

    Authoritative tier model

    Heap

    Disk

  • @ljacomet#DevoxxMA #ehcache

    Disk

    Heap

    Authoritative tier model

  • @ljacomet#DevoxxMA #ehcache

    Heap

    Disk

    Authoritative tier model

  • @ljacomet#DevoxxMA #ehcache

    Heap

    Disk

    Authoritative tier model

  • @ljacomet#DevoxxMA #ehcache

    Heap

    Disk

    Authoritative tier model

  • @ljacomet#DevoxxMA #ehcache

    Why the new model? Predictable latency

    Every put pays the price of the lower / slowest tier

    No degradation when a higher tier gets full Preserves fast(er) access for hot set

    When a mapping is accessed it moves to the fastest tier available

  • @ljacomet#DevoxxMA #ehcache

    Not a cache feature? Search

    What does searching on a hot set means? Even without interacting with the cache, two

    execution of the same query could return different results

    Pinning Prevent eviction from cache entries May adversly effect the ability of the cache to

    respect size constraints

  • @ljacomet#DevoxxMA #ehcache

    Ehcache 3 The future is here

  • @ljacomet#DevoxxMA #ehcache

    Lifecycle - explicit CacheManager

    init / close methods create and close caches

    PersistentCacheManager Maintenance mode Destroy cache data

  • @ljacomet#DevoxxMA #ehcache

    Cache for proper typing Ehcache 2.x not generic, was time to change

    that

    Needs to be known at runtime No one wants a ClassCastException Cache data may live beyond application

    lifecycle

    Usage show that frequently key and values are of the same type in a given cache

  • @ljacomet#DevoxxMA #ehcache

    Serialization Required as soon as we move away from the

    heap

    Fully customisable in Ehcache 3

  • @ljacomet#DevoxxMA #ehcache

    CacheLoaderWriter Enables the cache-through pattern Consistent across all cache operations Single interface

    Loader only - make sure write related methods throw

    Writer only - what? Anyone having a good use case for this -

    talk to us

  • @ljacomet#DevoxxMA #ehcache

    Cache through - miss

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - miss

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - miss

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - miss

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - miss

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - hit

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - hit

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - hit

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - write

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - write

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - write

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Cache through - write

    Application Cache

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind Enables scaling your writes

    Putter does not pay for write latency Batching and coalescing options Simplified compared to 2.x - no more sizing

    gotchas

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind - eviction

    (K1, V1)

    (K1, V1)

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind - eviction

    (K1, V1)

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind - eviction

    (K1, V1)

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind - eviction

    (K1, V1)

  • @ljacomet#DevoxxMA #ehcache

    Application Cache

    Database

    queue

    Write behind - eviction

    (K1, V1)

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Application Cache

    queue

    Database

  • @ljacomet#DevoxxMA #ehcache

    Write behind - failure

    Database

  • @ljacomet#DevoxxMA #ehcache

    Database

    Write behind - failure

  • @ljacomet#DevoxxMA #ehcache

    queue

    Database

    Write behind - failure

  • @ljacomet#DevoxxMA #ehcache

    queue

    Database

    Write behind - failure

  • @ljacomet#DevoxxMA #ehcache

    queue

    Database

    Write behind - failure

  • @ljacomet#DevoxxMA #ehcache

    Expiry Offers context

  • @ljacomet#DevoxxMA #ehcache

    Eviction Veto and Prioritizer Veto

    Enables to suggest a veto on certain mappings Prioritizer

    Allows to sort sample before picking eviction victim

    Not applicable to all stores Both are hints only - capacity always takes priority

  • @ljacomet#DevoxxMA #ehcache

    Transactions Full blown XA resource

    includes recovery support Needs work for transaction managers

    integration

    Code isolated in its own module Currently part of the main Ehcache 3 jar

  • @ljacomet#DevoxxMA #ehcache

    Clustering using Terracotta

  • @ljacomet#DevoxxMA #ehcache

    Automatic Resource Control Enables sizing in natural units

    n bytes on heap Percentage of the max heap available

    Define resource pools at the cache manager Cross eviction amongst caches Enables auto balancing

  • @ljacomet#DevoxxMA #ehcache

    Resilience strategy A cache is to be resilient Yet sh*t happens

    Storage failures SLA violations (timeouts?)

    Very explicit contract at this time To be refined when clustering is wrapping up

  • @ljacomet#DevoxxMA #ehcache

    Q&AThank you for your time