SlideShare a Scribd company logo
1 of 70
Download to read offline
Coherence	
  Implementa/on	
  
        Pa1erns	
  
             Ben	
  Stopford	
  
    The	
  Royal	
  Bank	
  of	
  Scotland	
  
Some	
  Ideas	
  	
  

 Nothing	
  More	
  
Why	
  do	
  we	
  use	
  Coherence?	
  

                Fast?	
  
              Scalable?	
  
          Applica/on	
  layer?	
  
Simplifying	
  the	
  Contract	
  
•  We	
  don’t	
  want	
  ACID	
  all	
  of	
  the	
  /me	
  
•  We	
  want	
  to	
  pick	
  the	
  bits	
  we	
  need	
  when	
  we	
  
   need	
  them	
  
•  We	
  want	
  to	
  use	
  the	
  context	
  of	
  our	
  business	
  
   requirement	
  to	
  work	
  our	
  way	
  around	
  the	
  ones	
  
   we	
  don’t	
  need.	
  
Version	
  your	
  Objects	
  
Why	
  do	
  we	
  care?	
  
Without	
  versioning	
  it’s	
  a	
  free-­‐for-­‐all.	
  	
  
•  What	
  changed?	
  
•  Was	
  something	
  overwri1en?	
  
•  How	
  can	
  you	
  prevent	
  concurrent	
  updates?	
  
•  What	
  did	
  the	
  system	
  look	
  like	
  10	
  seconds	
  ago.	
  
•  How	
  can	
  I	
  provide	
  a	
  consistent	
  view?	
  
•  How	
  to	
  I	
  ensure	
  ordering	
  of	
  updates	
  in	
  an	
  
   asynchronous	
  system?	
  
Versioning	
  your	
  Objects	
  
            Versioned	
  
              Cache	
  
        A.1	
  
        A.2	
  
        B.1	
  
        C.1	
  
        C.2	
  
        D.1	
  
Versioning	
  your	
  Objects	
  

          Cache	
  
A.1	
  
                                      Coherence	
  Trigger	
  
A.2	
  



New	
  Version	
  =	
  Old	
  Version	
  +	
  1	
  ??	
  
Running	
  a	
  Coherence	
  Filter	
  
Using	
  Key-­‐Based	
  Access	
  
Latest	
  /	
  Versioned	
  Pa1ern	
  
                            Coherence	
  Trigger	
  
Write	
  
                                               Versioned	
  
            Latest	
  Cache	
                    Cache	
  
            A	
                            A.1	
  


            B	
                           A.2	
  
            C	
                           B.1	
  
            D	
                           C.1	
  
                                           C.2	
  
                                          D.1	
  
Latest	
  /	
  Versioned	
  Pa1ern	
  

Latest	
  Cache	
  Key	
  =	
  [Business	
  Key]	
  
Versioned	
  Cache	
  Key	
  =	
  [Business	
  Key][Version]	
  

                    !"                  !&'"


                    #"                 !&("
                    $"                 #&'"
                    %"                 $&'"
                                       $&("
                                       %&'"
Suffers	
  from	
  data	
  duplica/on	
  
Latest	
  Marker	
  Pa1ern	
  
             Write	
  
                             Versioned	
     Coherence	
  Trigger	
  
                               Cache	
  
                         A.1	
  
                         A.L	
  
                         B.L	
  
Well	
  Known	
  
Marker	
  Version	
      C.1	
  
                         C.L	
  
                         D.L	
  
However	
  our	
  trigger	
  can’t	
  use	
  
         cache.put()	
  
                  Why?	
  
Need	
  to	
  consider	
  the	
  threading	
  model	
  
So	
  we’ll	
  need	
  to	
  use	
  the	
  backing	
  map	
  
                          directly	
  
public	
  void	
  copyObjectToVersionedCacheAddingVersion(MapTrigger.Entry	
  entry)	
  
{	
  
	
  	
  	
  MyValue	
  value	
  =	
  (MyValue)entry.getValue();	
  
	
  	
  	
  MyKey	
  versionedKey	
  =	
  (MyKey)value.getKey();	
  
	
  
	
  	
  	
  BinaryEntry	
  binary	
  =	
  (BinaryEntry)entry;	
  
	
  	
  	
  Binary	
  binaryValue	
  =	
  binaryEntry.getBinaryValue();	
  
	
  
	
  	
  	
  Map	
  map	
  =	
  binary.getContext().getBackingMap("VersionedCacheName");	
  
	
  	
  	
  map.put(toBinary(versionedKey),	
  binaryValue);	
  
}	
  
A	
  third	
  approach	
  
The	
  Collec/ons	
  Cache	
  
                                       Trigger	
  Appends	
  to	
  Collec/on	
  


collec/onsCache.put(key,	
  val);	
                A	
     [O1,	
  O2,	
  O3..]	
  


                                                   B	
     [O1,	
  O2,	
  O3..]	
  

collec/onsCache.invoke(key,	
  
                                                   C	
     [O1,	
  O2,	
  O3..]	
  
  new	
  LastValueGe1er());	
  
 …or	
  override	
  backing	
  store	
             D	
     [O1,	
  O2,	
  O3..]	
  


                                                Collec/onsCache	
  
So	
  we	
  have	
  3	
  pa1erns	
  for	
  managing	
  
    versioning	
  whilst	
  retaining	
  key	
  
                 based	
  access	
  
Using	
  versioning	
  to	
  manage	
  
    concurrent	
  changes	
  
 Mul/	
  Version	
  Concurrency	
  Control	
  	
  
                (MVCC)	
  
Cache	
  
         Version	
  1	
  
                                      Coherence	
  Trigger	
  
         Version	
  2	
  




New	
  Version	
  =	
  Old	
  Version	
  +	
  1	
  ??	
  
Concurrent	
  Object	
  Update	
  
(2	
  Clients	
  update	
  the	
  same	
  object	
  at	
  the	
  same	
  /me)	
  

             Client1	
                               Client2	
  


                                    A.1	
  
                                 A.2	
  
                                           A.2	
  
Concurrent	
  Object	
  Update	
  
 (Client2	
  fails	
  to	
  update	
  dirty	
  object)	
  

  Client1	
                             Client2	
  


                         A.1	
  
                         A.2	
  

                  Versioned	
  
                    Cache	
  
Concurrent	
  Object	
  Update	
  
    (Client	
  2	
  updates	
  clean	
  object)	
  

  Client1	
  
                                      Client2	
  
                       A.1	
  
                       A.2	
  
                       A.3	
  

                 Versioned	
  
                   Cache	
  
So	
  a	
  concurrent	
  update	
  results	
  in	
  
  an	
  error	
  and	
  must	
  be	
  retried.	
  
           &'()*+#$            &'()*+%$


                       !"#$
                       !"%$
What’s	
  going	
  to	
  happen	
  if	
  we	
  are	
  
            using	
  putAll?	
  
Reliable	
  PutAll	
  

We	
  want	
  putAll	
  to	
  tell	
  us	
  which	
  
objects	
  failed	
  the	
  write	
  process	
  
Reliable	
  PutAll	
  

                                                        Node	
     Node	
  



Client	
       Extend	
                      Node	
                           Node	
  



                                                        Node	
     Node	
  
             Invocable:	
  
             •  Split	
  keys	
  by	
  member	
   Invocable:	
  
             •  Send	
  appropriate	
  values	
   •  Write	
  entries	
  to	
  
                to	
  each	
  member	
               backing	
  map	
  (we	
  
             •  Collect	
  any	
  excep/ons	
        use	
  an	
  EP	
  for	
  
                returned	
  	
                       this)	
  
This	
  gives	
  us	
  a	
  reliable	
  mechanism	
  
for	
  knowing	
  what	
  worked	
  and	
  what	
  
                          failed	
  
Synthesising	
  Transac/onality	
  
The	
  Fat	
  Object	
  Method	
  


                                Cache	
  
                        A	
  
                        B	
  
                        C	
  
                       D	
  
The	
  Single	
  Entry	
  Point	
  Method	
  
       (objects	
  are	
  stored	
  separately)	
  


                                             	
  
                                             	
  
                   Collocate	
  with	
  
                   key	
  associa/on	
  
All	
  writes	
  synchronize	
  on	
  the	
  
           primary	
  object.	
  



                     EP	
  
All	
  reads	
  synchronize	
  on	
  the	
  
          primary	
  object.	
  



                    EP	
  
Wri/ng	
  Orphaned	
  Objects	
  

 Write	
  read	
  
 entry	
  point	
  
 object	
  last	
  




              Write	
  orphaned	
  objects	
  first	
  

  This	
  mechanism	
  is	
  subtly	
  flawed	
  
Reading	
  several	
  objects	
  as	
  an	
  
           atomic	
  unit	
  
                 aka	
  Joins	
  
The	
  trivial	
  approach	
  to	
  joins	
  

Get	
       Get	
       Get	
      Get	
      Get	
     Get	
           Get	
  
Cost	
      Ledger      Source	
   Transac MTMs	
       Legs	
          Cost	
  
Centers	
   Books	
     Books	
   -­‐/ons	
                             Centers	
  




                                 Network

                                                                   Time	
  
Server	
  Side,	
  Sharded	
  Joins	
  
                                     Use	
  KeyAssocia/on	
  to	
  
                                     keep	
  related	
  en//es	
  
                                     together	
  
Orders	
       Shipping	
  Log	
  



         Common	
  Key	
  
Server	
  Side,	
  Sharded	
  Joins	
  




                                Transactions


                        Aggregator joins
                                   Mtms

                        data across cluster
                                Cashflows
So	
  we	
  have	
  a	
  set	
  of	
  mechanisms	
  for	
  
      reading	
  and	
  wri/ng	
  groups	
  of	
  
               related	
  objects.	
  
Cluster	
  Singleton	
  Service	
  
A	
  service	
  that	
  automa/cally	
  restarts	
  
                  amer	
  failure	
  
A	
  service	
  that	
  automa/cally	
  restarts	
  
                  amer	
  failure	
  
What	
  is	
  the	
  cluster	
  singleton	
  good	
  for	
  
•    Adding	
  indexes	
  
•    Loading	
  data	
  
•    Keeping	
  data	
  up	
  to	
  date	
  
•    Upda/ng	
  cluster	
  /me	
  
•    You	
  can	
  probably	
  think	
  of	
  a	
  bunch	
  of	
  others	
  
     yourselves.	
  
Code	
  for	
  Cluster	
  Singleton	
  
//run in a new thread on every Cache Server
while (true) {
    boolean gotLock = lockCache.lock("singletonLock", -1);
    if (gotLock) {
         //Start singletons
         wait();
    }
}
Implemen/ng	
  Consistent	
  Views	
  
   and	
  Repeatable	
  Queries	
  
Bi-­‐temporal	
  	
  
public	
  interface	
  MyBusinessObject{	
  
	
  	
  	
  //data	
  	
                               Business	
  
	
  	
  	
  public	
  Date	
  getBusinessDate();	
      Time	
  
	
  	
  	
  public	
  Date	
  validFrom();	
           System	
  
	
  	
  	
  public	
  Date	
  validTo();	
              Time	
  
}	
  
	
  
Where	
  does	
  the	
  System	
  Time	
  
          come	
  from?	
  
You	
  can’t	
  use	
  the	
  
System.currentTimeMillis()	
  in	
  a	
  
   distributed	
  environment!	
  
You	
  need	
  a	
  cluster	
  synchronised	
  
                      clock	
  
Repeatable	
  Time:	
  A	
  guaranteed	
  Tick	
  


                    Write	
  first	
  
                                            Write	
  Time	
  
Singleton	
  	
  
 Service	
  

                                             Read	
  Time	
  
               Write	
  second	
  


                                        Replicated	
  Caches	
  
                                          (pessimis/c)	
  
As	
  we	
  add	
  objects	
  we	
  /mestamp	
  them	
  
                    with	
  Write	
  Time	
  


                                Write	
  Time	
  
Singleton	
  	
  
 Service	
  
When	
  we	
  read	
  objects	
  we	
  use	
  Read	
  
                           Time	
  

Singleton	
  	
  
 Service	
  

                                   Read	
  Time	
  
Repeatable	
  Time:	
  A	
  guaranteed	
  Tick	
  

                                           8	
  
                                           7	
               8	
  
                                                             7	
              8	
  
                                                                              7	
  
                    Write	
  first	
  
                                                       Write	
  Time	
  
Singleton	
  	
  
 Service	
  

                                                        Read	
  Time	
  
               Write	
  second	
  
                                        6	
  
                                        7	
                  6	
  
                                                             7	
                6	
  
                                                                                7	
  
                                                   Replicated	
  Caches	
  
                                                     (pessimis/c)	
  
Event	
  Based	
  Processing	
  

                                            Async	
  	
  
                                          Cachestore	
  
cache.put(key,	
  val);	
     A	
  
                              B	
  
                              C	
  
                              D	
  
Messaging	
  as	
  a	
  System	
  of	
  Record	
  




Messaging System (use Topics for scalability)
Messaging	
  as	
  a	
  System	
  of	
  Record	
  

                                           Trigger	
  

cache.put(key,	
  val);	
     A	
  
                                                          
                              B	
  
                                                         JMS
                              C	
  
                                                         TOPIC	
  
                              D	
  
Easy	
  Grid	
  Implementa/on	
  in	
  GUIs	
  
CQCs	
  on	
  a	
  CQC	
  

      GUI	
  JVM	
  



CQC	
                  CQC	
                         Cache	
  



                  Define	
  this	
  in	
  config	
  
How	
  do	
  you	
  release	
  quickly	
  to	
  a	
  
        Coherence	
  cluster?	
  
Rolling	
  Restart?	
  
Disk-­‐Persist	
  
Final	
  Thoughts	
  
Data	
  is	
  the	
  most	
  important	
  
commodity	
  that	
  you	
  have	
  	
  
              Keep	
  it	
  safe	
  
Use	
  a	
  Par//on	
  Listener	
  
Have	
  Proac/ve	
  Monitoring	
  of	
  
            Memory	
  
Version	
  your	
  Objects	
  
Thanks	
  
Slides	
  &	
  related	
  ar/cles	
  available	
  at:	
  
	
  
h1p://www.benstopford.com	
  
	
  

More Related Content

What's hot

Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013mumrah
 
Decoupling Decisions with Apache Kafka
Decoupling Decisions with Apache KafkaDecoupling Decisions with Apache Kafka
Decoupling Decisions with Apache KafkaGrant Henke
 
What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2 What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2 confluent
 
Apache Kafka Women Who Code Meetup
Apache Kafka Women Who Code MeetupApache Kafka Women Who Code Meetup
Apache Kafka Women Who Code MeetupSnehal Nagmote
 
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity PlanningFrom Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planningconfluent
 
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Christopher Curtin
 
Kafka Summit SF 2017 - Best Practices for Running Kafka on Docker Containers
Kafka Summit SF 2017 - Best Practices for Running Kafka on Docker ContainersKafka Summit SF 2017 - Best Practices for Running Kafka on Docker Containers
Kafka Summit SF 2017 - Best Practices for Running Kafka on Docker Containersconfluent
 
Building Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache KafkaBuilding Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache KafkaBrian Ritchie
 
Akka Microservices Architecture And Design
Akka Microservices Architecture And DesignAkka Microservices Architecture And Design
Akka Microservices Architecture And DesignYaroslav Tkachenko
 
Kafka Technical Overview
Kafka Technical OverviewKafka Technical Overview
Kafka Technical OverviewSylvester John
 
Cassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per monthCassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per monthdaveconnors
 
Microservices for a Streaming World
Microservices for a Streaming WorldMicroservices for a Streaming World
Microservices for a Streaming WorldBen Stopford
 
Kafka meetup - kafka connect
Kafka meetup -  kafka connectKafka meetup -  kafka connect
Kafka meetup - kafka connectYi Zhang
 
Apache Kafka Introduction
Apache Kafka IntroductionApache Kafka Introduction
Apache Kafka IntroductionAmita Mirajkar
 
Reducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive StreamsReducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive Streamsjimriecken
 
APACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka StreamsAPACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka StreamsKetan Gote
 

What's hot (20)

Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
Introduction and Overview of Apache Kafka, TriHUG July 23, 2013
 
Apache kafka
Apache kafkaApache kafka
Apache kafka
 
Decoupling Decisions with Apache Kafka
Decoupling Decisions with Apache KafkaDecoupling Decisions with Apache Kafka
Decoupling Decisions with Apache Kafka
 
What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2 What's new in Confluent 3.2 and Apache Kafka 0.10.2
What's new in Confluent 3.2 and Apache Kafka 0.10.2
 
Apache Kafka Women Who Code Meetup
Apache Kafka Women Who Code MeetupApache Kafka Women Who Code Meetup
Apache Kafka Women Who Code Meetup
 
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity PlanningFrom Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
From Message to Cluster: A Realworld Introduction to Kafka Capacity Planning
 
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
Kafka 0.8.0 Presentation to Atlanta Java User's Group March 2013
 
Kafka Summit SF 2017 - Best Practices for Running Kafka on Docker Containers
Kafka Summit SF 2017 - Best Practices for Running Kafka on Docker ContainersKafka Summit SF 2017 - Best Practices for Running Kafka on Docker Containers
Kafka Summit SF 2017 - Best Practices for Running Kafka on Docker Containers
 
Building Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache KafkaBuilding Event-Driven Systems with Apache Kafka
Building Event-Driven Systems with Apache Kafka
 
Akka Microservices Architecture And Design
Akka Microservices Architecture And DesignAkka Microservices Architecture And Design
Akka Microservices Architecture And Design
 
Kafka Technical Overview
Kafka Technical OverviewKafka Technical Overview
Kafka Technical Overview
 
Cassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per monthCassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per month
 
Kafka
KafkaKafka
Kafka
 
Microservices for a Streaming World
Microservices for a Streaming WorldMicroservices for a Streaming World
Microservices for a Streaming World
 
Kafka meetup - kafka connect
Kafka meetup -  kafka connectKafka meetup -  kafka connect
Kafka meetup - kafka connect
 
Apache Kafka Introduction
Apache Kafka IntroductionApache Kafka Introduction
Apache Kafka Introduction
 
Apache Kafka Best Practices
Apache Kafka Best PracticesApache Kafka Best Practices
Apache Kafka Best Practices
 
Reducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive StreamsReducing Microservice Complexity with Kafka and Reactive Streams
Reducing Microservice Complexity with Kafka and Reactive Streams
 
APACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka StreamsAPACHE KAFKA / Kafka Connect / Kafka Streams
APACHE KAFKA / Kafka Connect / Kafka Streams
 
JAX London Slides
JAX London SlidesJAX London Slides
JAX London Slides
 

Viewers also liked

Beyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear ScalabilityBeyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear ScalabilityBen Stopford
 
The Power of the Log
The Power of the LogThe Power of the Log
The Power of the LogBen Stopford
 
Test-Oriented Languages: Is it time for a new era?
Test-Oriented Languages: Is it time for a new era?Test-Oriented Languages: Is it time for a new era?
Test-Oriented Languages: Is it time for a new era?Ben Stopford
 
Oracle Coherence: in-memory datagrid
Oracle Coherence: in-memory datagridOracle Coherence: in-memory datagrid
Oracle Coherence: in-memory datagridEmiliano Pecis
 
Data Grids with Oracle Coherence
Data Grids with Oracle CoherenceData Grids with Oracle Coherence
Data Grids with Oracle CoherenceBen Stopford
 
Ideas for Distributing Skills Across a Continental Divide
Ideas for Distributing Skills Across a Continental DivideIdeas for Distributing Skills Across a Continental Divide
Ideas for Distributing Skills Across a Continental DivideBen Stopford
 
Refactoring tested code - has mocking gone wrong?
Refactoring tested code - has mocking gone wrong?Refactoring tested code - has mocking gone wrong?
Refactoring tested code - has mocking gone wrong?Ben Stopford
 
Big Data & the Enterprise
Big Data & the EnterpriseBig Data & the Enterprise
Big Data & the EnterpriseBen Stopford
 
The return of big iron?
The return of big iron?The return of big iron?
The return of big iron?Ben Stopford
 
Big iron 2 (published)
Big iron 2 (published)Big iron 2 (published)
Big iron 2 (published)Ben Stopford
 

Viewers also liked (11)

Beyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear ScalabilityBeyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
Beyond The Data Grid: Coherence, Normalisation, Joins and Linear Scalability
 
The Power of the Log
The Power of the LogThe Power of the Log
The Power of the Log
 
Test-Oriented Languages: Is it time for a new era?
Test-Oriented Languages: Is it time for a new era?Test-Oriented Languages: Is it time for a new era?
Test-Oriented Languages: Is it time for a new era?
 
Oracle Coherence
Oracle CoherenceOracle Coherence
Oracle Coherence
 
Oracle Coherence: in-memory datagrid
Oracle Coherence: in-memory datagridOracle Coherence: in-memory datagrid
Oracle Coherence: in-memory datagrid
 
Data Grids with Oracle Coherence
Data Grids with Oracle CoherenceData Grids with Oracle Coherence
Data Grids with Oracle Coherence
 
Ideas for Distributing Skills Across a Continental Divide
Ideas for Distributing Skills Across a Continental DivideIdeas for Distributing Skills Across a Continental Divide
Ideas for Distributing Skills Across a Continental Divide
 
Refactoring tested code - has mocking gone wrong?
Refactoring tested code - has mocking gone wrong?Refactoring tested code - has mocking gone wrong?
Refactoring tested code - has mocking gone wrong?
 
Big Data & the Enterprise
Big Data & the EnterpriseBig Data & the Enterprise
Big Data & the Enterprise
 
The return of big iron?
The return of big iron?The return of big iron?
The return of big iron?
 
Big iron 2 (published)
Big iron 2 (published)Big iron 2 (published)
Big iron 2 (published)
 

Similar to Coherence Implementation Patterns - Sig Nov 2011

Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...confluent
 
Concurrency at the Database Layer
Concurrency at the Database Layer Concurrency at the Database Layer
Concurrency at the Database Layer mcwilson1
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry confluent
 
Api Versioning with Docker and Nginx
Api Versioning with Docker and NginxApi Versioning with Docker and Nginx
Api Versioning with Docker and Nginxtech.kartenmacherei
 
Api versioning w_docker_and_nginx
Api versioning w_docker_and_nginxApi versioning w_docker_and_nginx
Api versioning w_docker_and_nginxLee Wilkins
 
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv MeetupExactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv MeetupNatan Silnitsky
 
Drilling the Async Library
Drilling the Async LibraryDrilling the Async Library
Drilling the Async LibraryKnoldus Inc.
 
Highly concurrent yet natural programming
Highly concurrent yet natural programmingHighly concurrent yet natural programming
Highly concurrent yet natural programmingInfinit
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshoploodse
 
Getting Started with Docker on AWS
Getting Started with Docker on AWSGetting Started with Docker on AWS
Getting Started with Docker on AWSAmazon Web Services
 
KubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipeline
KubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipelineKubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipeline
KubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipelineKubeAcademy
 
Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)StreamNative
 
From a Kafkaesque Story to The Promised Land at LivePerson
From a Kafkaesque Story to The Promised Land at LivePersonFrom a Kafkaesque Story to The Promised Land at LivePerson
From a Kafkaesque Story to The Promised Land at LivePersonLivePerson
 
Akka in Production - ScalaDays 2015
Akka in Production - ScalaDays 2015Akka in Production - ScalaDays 2015
Akka in Production - ScalaDays 2015Evan Chan
 
From a kafkaesque story to The Promised Land
From a kafkaesque story to The Promised LandFrom a kafkaesque story to The Promised Land
From a kafkaesque story to The Promised LandRan Silberman
 
Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...
Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...
Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...Flink Forward
 

Similar to Coherence Implementation Patterns - Sig Nov 2011 (20)

Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
 
Concurrency at the Database Layer
Concurrency at the Database Layer Concurrency at the Database Layer
Concurrency at the Database Layer
 
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
Fundamentals of Stream Processing with Apache Beam, Tyler Akidau, Frances Perry
 
Api Versioning with Docker and Nginx
Api Versioning with Docker and NginxApi Versioning with Docker and Nginx
Api Versioning with Docker and Nginx
 
Lp seminar
Lp seminarLp seminar
Lp seminar
 
Api versioning w_docker_and_nginx
Api versioning w_docker_and_nginxApi versioning w_docker_and_nginx
Api versioning w_docker_and_nginx
 
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv MeetupExactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
 
Drilling the Async Library
Drilling the Async LibraryDrilling the Async Library
Drilling the Async Library
 
Highly concurrent yet natural programming
Highly concurrent yet natural programmingHighly concurrent yet natural programming
Highly concurrent yet natural programming
 
Kubernetes Workshop
Kubernetes WorkshopKubernetes Workshop
Kubernetes Workshop
 
Getting Started with Docker on AWS
Getting Started with Docker on AWSGetting Started with Docker on AWS
Getting Started with Docker on AWS
 
KubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipeline
KubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipelineKubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipeline
KubeCon EU 2016: Leveraging ephemeral namespaces in a CI/CD pipeline
 
Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)Lessons from managing a Pulsar cluster (Nutanix)
Lessons from managing a Pulsar cluster (Nutanix)
 
From a Kafkaesque Story to The Promised Land at LivePerson
From a Kafkaesque Story to The Promised Land at LivePersonFrom a Kafkaesque Story to The Promised Land at LivePerson
From a Kafkaesque Story to The Promised Land at LivePerson
 
Akka in Production - ScalaDays 2015
Akka in Production - ScalaDays 2015Akka in Production - ScalaDays 2015
Akka in Production - ScalaDays 2015
 
[OSS Upstream Training] 5 open stack liberty_recap
[OSS Upstream Training] 5 open stack liberty_recap[OSS Upstream Training] 5 open stack liberty_recap
[OSS Upstream Training] 5 open stack liberty_recap
 
open stackliberty_recap_by_VietOpenStack
open stackliberty_recap_by_VietOpenStackopen stackliberty_recap_by_VietOpenStack
open stackliberty_recap_by_VietOpenStack
 
From a kafkaesque story to The Promised Land
From a kafkaesque story to The Promised LandFrom a kafkaesque story to The Promised Land
From a kafkaesque story to The Promised Land
 
Deep Dive into AWS Fargate
Deep Dive into AWS FargateDeep Dive into AWS Fargate
Deep Dive into AWS Fargate
 
Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...
Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...
Flink Forward Berlin 2018: Steven Wu - "Failure is not fatal: what is your re...
 

More from Ben Stopford

10 Principals for Effective Event-Driven Microservices with Apache Kafka
10 Principals for Effective Event-Driven Microservices with Apache Kafka10 Principals for Effective Event-Driven Microservices with Apache Kafka
10 Principals for Effective Event-Driven Microservices with Apache KafkaBen Stopford
 
10 Principals for Effective Event Driven Microservices
10 Principals for Effective Event Driven Microservices10 Principals for Effective Event Driven Microservices
10 Principals for Effective Event Driven MicroservicesBen Stopford
 
The Future of Streaming: Global Apps, Event Stores and Serverless
The Future of Streaming: Global Apps, Event Stores and ServerlessThe Future of Streaming: Global Apps, Event Stores and Serverless
The Future of Streaming: Global Apps, Event Stores and ServerlessBen Stopford
 
A Global Source of Truth for the Microservices Generation
A Global Source of Truth for the Microservices GenerationA Global Source of Truth for the Microservices Generation
A Global Source of Truth for the Microservices GenerationBen Stopford
 
Building Event Driven Services with Kafka Streams
Building Event Driven Services with Kafka StreamsBuilding Event Driven Services with Kafka Streams
Building Event Driven Services with Kafka StreamsBen Stopford
 
NDC London 2017 - The Data Dichotomy- Rethinking Data and Services with Streams
NDC London 2017  - The Data Dichotomy- Rethinking Data and Services with StreamsNDC London 2017  - The Data Dichotomy- Rethinking Data and Services with Streams
NDC London 2017 - The Data Dichotomy- Rethinking Data and Services with StreamsBen Stopford
 
Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...
Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...
Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...Ben Stopford
 
Building Event Driven Services with Stateful Streams
Building Event Driven Services with Stateful StreamsBuilding Event Driven Services with Stateful Streams
Building Event Driven Services with Stateful StreamsBen Stopford
 
Devoxx London 2017 - Rethinking Services With Stateful Streams
Devoxx London 2017 - Rethinking Services With Stateful StreamsDevoxx London 2017 - Rethinking Services With Stateful Streams
Devoxx London 2017 - Rethinking Services With Stateful StreamsBen Stopford
 
Event Driven Services Part 2: Building Event-Driven Services with Apache Kafka
Event Driven Services Part 2:  Building Event-Driven Services with Apache KafkaEvent Driven Services Part 2:  Building Event-Driven Services with Apache Kafka
Event Driven Services Part 2: Building Event-Driven Services with Apache KafkaBen Stopford
 
Event Driven Services Part 1: The Data Dichotomy
Event Driven Services Part 1: The Data Dichotomy Event Driven Services Part 1: The Data Dichotomy
Event Driven Services Part 1: The Data Dichotomy Ben Stopford
 
Event Driven Services Part 3: Putting the Micro into Microservices with State...
Event Driven Services Part 3: Putting the Micro into Microservices with State...Event Driven Services Part 3: Putting the Micro into Microservices with State...
Event Driven Services Part 3: Putting the Micro into Microservices with State...Ben Stopford
 
Strata Software Architecture NY: The Data Dichotomy
Strata Software Architecture NY: The Data DichotomyStrata Software Architecture NY: The Data Dichotomy
Strata Software Architecture NY: The Data DichotomyBen Stopford
 
A little bit of clojure
A little bit of clojureA little bit of clojure
A little bit of clojureBen Stopford
 
Where Does Big Data Meet Big Database - QCon 2012
Where Does Big Data Meet Big Database - QCon 2012Where Does Big Data Meet Big Database - QCon 2012
Where Does Big Data Meet Big Database - QCon 2012Ben Stopford
 
A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...
A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...
A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...Ben Stopford
 
Balancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java DatabaseBalancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java DatabaseBen Stopford
 
Architecting for Change: An Agile Approach
Architecting for Change: An Agile ApproachArchitecting for Change: An Agile Approach
Architecting for Change: An Agile ApproachBen Stopford
 

More from Ben Stopford (18)

10 Principals for Effective Event-Driven Microservices with Apache Kafka
10 Principals for Effective Event-Driven Microservices with Apache Kafka10 Principals for Effective Event-Driven Microservices with Apache Kafka
10 Principals for Effective Event-Driven Microservices with Apache Kafka
 
10 Principals for Effective Event Driven Microservices
10 Principals for Effective Event Driven Microservices10 Principals for Effective Event Driven Microservices
10 Principals for Effective Event Driven Microservices
 
The Future of Streaming: Global Apps, Event Stores and Serverless
The Future of Streaming: Global Apps, Event Stores and ServerlessThe Future of Streaming: Global Apps, Event Stores and Serverless
The Future of Streaming: Global Apps, Event Stores and Serverless
 
A Global Source of Truth for the Microservices Generation
A Global Source of Truth for the Microservices GenerationA Global Source of Truth for the Microservices Generation
A Global Source of Truth for the Microservices Generation
 
Building Event Driven Services with Kafka Streams
Building Event Driven Services with Kafka StreamsBuilding Event Driven Services with Kafka Streams
Building Event Driven Services with Kafka Streams
 
NDC London 2017 - The Data Dichotomy- Rethinking Data and Services with Streams
NDC London 2017  - The Data Dichotomy- Rethinking Data and Services with StreamsNDC London 2017  - The Data Dichotomy- Rethinking Data and Services with Streams
NDC London 2017 - The Data Dichotomy- Rethinking Data and Services with Streams
 
Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...
Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...
Building Event Driven Services with Apache Kafka and Kafka Streams - Devoxx B...
 
Building Event Driven Services with Stateful Streams
Building Event Driven Services with Stateful StreamsBuilding Event Driven Services with Stateful Streams
Building Event Driven Services with Stateful Streams
 
Devoxx London 2017 - Rethinking Services With Stateful Streams
Devoxx London 2017 - Rethinking Services With Stateful StreamsDevoxx London 2017 - Rethinking Services With Stateful Streams
Devoxx London 2017 - Rethinking Services With Stateful Streams
 
Event Driven Services Part 2: Building Event-Driven Services with Apache Kafka
Event Driven Services Part 2:  Building Event-Driven Services with Apache KafkaEvent Driven Services Part 2:  Building Event-Driven Services with Apache Kafka
Event Driven Services Part 2: Building Event-Driven Services with Apache Kafka
 
Event Driven Services Part 1: The Data Dichotomy
Event Driven Services Part 1: The Data Dichotomy Event Driven Services Part 1: The Data Dichotomy
Event Driven Services Part 1: The Data Dichotomy
 
Event Driven Services Part 3: Putting the Micro into Microservices with State...
Event Driven Services Part 3: Putting the Micro into Microservices with State...Event Driven Services Part 3: Putting the Micro into Microservices with State...
Event Driven Services Part 3: Putting the Micro into Microservices with State...
 
Strata Software Architecture NY: The Data Dichotomy
Strata Software Architecture NY: The Data DichotomyStrata Software Architecture NY: The Data Dichotomy
Strata Software Architecture NY: The Data Dichotomy
 
A little bit of clojure
A little bit of clojureA little bit of clojure
A little bit of clojure
 
Where Does Big Data Meet Big Database - QCon 2012
Where Does Big Data Meet Big Database - QCon 2012Where Does Big Data Meet Big Database - QCon 2012
Where Does Big Data Meet Big Database - QCon 2012
 
A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...
A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...
A Paradigm Shift: The Increasing Dominance of Memory-Oriented Solutions for H...
 
Balancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java DatabaseBalancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java Database
 
Architecting for Change: An Agile Approach
Architecting for Change: An Agile ApproachArchitecting for Change: An Agile Approach
Architecting for Change: An Agile Approach
 

Recently uploaded

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 

Recently uploaded (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 

Coherence Implementation Patterns - Sig Nov 2011

  • 1. Coherence  Implementa/on   Pa1erns   Ben  Stopford   The  Royal  Bank  of  Scotland  
  • 2. Some  Ideas     Nothing  More  
  • 3. Why  do  we  use  Coherence?   Fast?   Scalable?   Applica/on  layer?  
  • 5. •  We  don’t  want  ACID  all  of  the  /me   •  We  want  to  pick  the  bits  we  need  when  we   need  them   •  We  want  to  use  the  context  of  our  business   requirement  to  work  our  way  around  the  ones   we  don’t  need.  
  • 7. Why  do  we  care?   Without  versioning  it’s  a  free-­‐for-­‐all.     •  What  changed?   •  Was  something  overwri1en?   •  How  can  you  prevent  concurrent  updates?   •  What  did  the  system  look  like  10  seconds  ago.   •  How  can  I  provide  a  consistent  view?   •  How  to  I  ensure  ordering  of  updates  in  an   asynchronous  system?  
  • 8. Versioning  your  Objects   Versioned   Cache   A.1   A.2   B.1   C.1   C.2   D.1  
  • 9. Versioning  your  Objects   Cache   A.1   Coherence  Trigger   A.2   New  Version  =  Old  Version  +  1  ??  
  • 10. Running  a  Coherence  Filter  
  • 12. Latest  /  Versioned  Pa1ern   Coherence  Trigger   Write   Versioned   Latest  Cache   Cache   A   A.1   B   A.2   C   B.1   D   C.1   C.2   D.1  
  • 13. Latest  /  Versioned  Pa1ern   Latest  Cache  Key  =  [Business  Key]   Versioned  Cache  Key  =  [Business  Key][Version]   !" !&'" #" !&(" $" #&'" %" $&'" $&(" %&'"
  • 14. Suffers  from  data  duplica/on  
  • 15. Latest  Marker  Pa1ern   Write   Versioned   Coherence  Trigger   Cache   A.1   A.L   B.L   Well  Known   Marker  Version   C.1   C.L   D.L  
  • 16. However  our  trigger  can’t  use   cache.put()   Why?  
  • 17. Need  to  consider  the  threading  model  
  • 18. So  we’ll  need  to  use  the  backing  map   directly   public  void  copyObjectToVersionedCacheAddingVersion(MapTrigger.Entry  entry)   {        MyValue  value  =  (MyValue)entry.getValue();        MyKey  versionedKey  =  (MyKey)value.getKey();          BinaryEntry  binary  =  (BinaryEntry)entry;        Binary  binaryValue  =  binaryEntry.getBinaryValue();          Map  map  =  binary.getContext().getBackingMap("VersionedCacheName");        map.put(toBinary(versionedKey),  binaryValue);   }  
  • 20. The  Collec/ons  Cache   Trigger  Appends  to  Collec/on   collec/onsCache.put(key,  val);   A   [O1,  O2,  O3..]   B   [O1,  O2,  O3..]   collec/onsCache.invoke(key,   C   [O1,  O2,  O3..]   new  LastValueGe1er());   …or  override  backing  store   D   [O1,  O2,  O3..]   Collec/onsCache  
  • 21. So  we  have  3  pa1erns  for  managing   versioning  whilst  retaining  key   based  access  
  • 22. Using  versioning  to  manage   concurrent  changes   Mul/  Version  Concurrency  Control     (MVCC)  
  • 23. Cache   Version  1   Coherence  Trigger   Version  2   New  Version  =  Old  Version  +  1  ??  
  • 24. Concurrent  Object  Update   (2  Clients  update  the  same  object  at  the  same  /me)   Client1   Client2   A.1   A.2   A.2  
  • 25. Concurrent  Object  Update   (Client2  fails  to  update  dirty  object)   Client1   Client2   A.1   A.2   Versioned   Cache  
  • 26. Concurrent  Object  Update   (Client  2  updates  clean  object)   Client1   Client2   A.1   A.2   A.3   Versioned   Cache  
  • 27. So  a  concurrent  update  results  in   an  error  and  must  be  retried.   &'()*+#$ &'()*+%$ !"#$ !"%$
  • 28. What’s  going  to  happen  if  we  are   using  putAll?  
  • 29. Reliable  PutAll   We  want  putAll  to  tell  us  which   objects  failed  the  write  process  
  • 30. Reliable  PutAll   Node   Node   Client   Extend   Node   Node   Node   Node   Invocable:   •  Split  keys  by  member   Invocable:   •  Send  appropriate  values   •  Write  entries  to   to  each  member   backing  map  (we   •  Collect  any  excep/ons   use  an  EP  for   returned     this)  
  • 31. This  gives  us  a  reliable  mechanism   for  knowing  what  worked  and  what   failed  
  • 33. The  Fat  Object  Method   Cache   A   B   C   D  
  • 34. The  Single  Entry  Point  Method   (objects  are  stored  separately)       Collocate  with   key  associa/on  
  • 35. All  writes  synchronize  on  the   primary  object.   EP  
  • 36. All  reads  synchronize  on  the   primary  object.   EP  
  • 37. Wri/ng  Orphaned  Objects   Write  read   entry  point   object  last   Write  orphaned  objects  first   This  mechanism  is  subtly  flawed  
  • 38. Reading  several  objects  as  an   atomic  unit   aka  Joins  
  • 39. The  trivial  approach  to  joins   Get   Get   Get   Get   Get   Get   Get   Cost   Ledger Source   Transac MTMs   Legs   Cost   Centers   Books   Books   -­‐/ons   Centers   Network Time  
  • 40. Server  Side,  Sharded  Joins   Use  KeyAssocia/on  to   keep  related  en//es   together   Orders   Shipping  Log   Common  Key  
  • 41. Server  Side,  Sharded  Joins   Transactions Aggregator joins Mtms data across cluster Cashflows
  • 42. So  we  have  a  set  of  mechanisms  for   reading  and  wri/ng  groups  of   related  objects.  
  • 44. A  service  that  automa/cally  restarts   amer  failure  
  • 45. A  service  that  automa/cally  restarts   amer  failure  
  • 46. What  is  the  cluster  singleton  good  for   •  Adding  indexes   •  Loading  data   •  Keeping  data  up  to  date   •  Upda/ng  cluster  /me   •  You  can  probably  think  of  a  bunch  of  others   yourselves.  
  • 47. Code  for  Cluster  Singleton   //run in a new thread on every Cache Server while (true) { boolean gotLock = lockCache.lock("singletonLock", -1); if (gotLock) { //Start singletons wait(); } }
  • 48. Implemen/ng  Consistent  Views   and  Repeatable  Queries  
  • 49. Bi-­‐temporal     public  interface  MyBusinessObject{        //data     Business        public  Date  getBusinessDate();   Time        public  Date  validFrom();   System        public  Date  validTo();   Time   }    
  • 50. Where  does  the  System  Time   come  from?  
  • 51. You  can’t  use  the   System.currentTimeMillis()  in  a   distributed  environment!  
  • 52. You  need  a  cluster  synchronised   clock  
  • 53. Repeatable  Time:  A  guaranteed  Tick   Write  first   Write  Time   Singleton     Service   Read  Time   Write  second   Replicated  Caches   (pessimis/c)  
  • 54. As  we  add  objects  we  /mestamp  them   with  Write  Time   Write  Time   Singleton     Service  
  • 55. When  we  read  objects  we  use  Read   Time   Singleton     Service   Read  Time  
  • 56. Repeatable  Time:  A  guaranteed  Tick   8   7   8   7   8   7   Write  first   Write  Time   Singleton     Service   Read  Time   Write  second   6   7   6   7   6   7   Replicated  Caches   (pessimis/c)  
  • 57. Event  Based  Processing   Async     Cachestore   cache.put(key,  val);   A   B   C   D  
  • 58. Messaging  as  a  System  of  Record   Messaging System (use Topics for scalability)
  • 59. Messaging  as  a  System  of  Record   Trigger   cache.put(key,  val);   A   B   JMS C   TOPIC   D  
  • 60. Easy  Grid  Implementa/on  in  GUIs  
  • 61. CQCs  on  a  CQC   GUI  JVM   CQC   CQC   Cache   Define  this  in  config  
  • 62. How  do  you  release  quickly  to  a   Coherence  cluster?  
  • 66. Data  is  the  most  important   commodity  that  you  have     Keep  it  safe  
  • 67. Use  a  Par//on  Listener  
  • 68. Have  Proac/ve  Monitoring  of   Memory  
  • 70. Thanks   Slides  &  related  ar/cles  available  at:     h1p://www.benstopford.com