net.sf.ehcache.distribution

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
C# / C Sharp
C# / CSharp Tutorial
ASP.Net
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
PHP
Python
SQL Server / T-SQL
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » Cache » ehcache » net.sf.ehcache.distribution 
net.sf.ehcache.distribution
This package is for cache replication.

Overview

Problems with Instance Caches in a Clustered Environment

Many production applications are deployed in clusters. If each application maintains its own cache, then updates made to one cache will not appear in the others. A workaround for web based applications is to use sticky sessions, so that a user, having established a session on one server, stays on that server for the rest of the session. A workaround for transaction processing systems using Hibernate is to do a session.refresh on each persistent object as part of the save. session.refresh explicitly reloads the object from the database, ignoring any cache values.

Replicated Cache

Another solution is to replicate data between the caches to keep them consistent. This is sometimes called cache coherency. Applicable operations include:
  1. put
  2. update (put which overwrites an existing entry)
  3. remove

Replicated Cache Terms

Replicated Cache - a cache instance that notifies others when its contents change
Notification - a mechanism to replicate changes
Topology - a layout for how replicated caches connect with and notify each other

Notification Strategies

The best way of notifying of put and update depends on the nature of the cache.

If the Element is not available anywhere else then the Element itself should form the payload of the notification. An example is a cached web page. This notification strategy is called copy.

Where the cached data is available in a database, there are two choices. Copy as before, or invalidate the data. By invalidating the data, the application tied to the other cache instance will be forced to refresh its cache from the database, preserving cache coherency. Only the Element key needs to be passed over the network.

ehcache supports notification through copy and invalidate, selectable per cache.

Topology Choices

Peer Cache Replicator

Each replicated cache instance notifies every other cache instance when its contents change. This requires n-1 notifications per change, where n is the number of cache instances in the cluster.

Centralised Cache Replicator

Each replicated cache instance notifies a master cache instance when its contents change. The master cache then notifies the other instances. This requires n-1 notifications per change, where n is the number of cache instances in the cluster.

ehcache uses a peer replication topology. It adds a twist with CachePeerProvider, an interface which supplies a list of cache instance peers, so as to handle peers entering and leaving the cluster. Some ideas for peer provider implementations are: configuration time list, multicast discovery, application specific cluster list.

Replication Drawbacks and Solutions in ehcache's implementation

Some potentially significant obstacles have to be overcome if replication is to provide a net benefit.

Chatty Protocol

n-1 notifications need to happen each time a a cache instance change occurs. A very large amount of network traffic can be generated.

ehcache will buffer changes to lower chattiness.

Redundant Notifications

The cache instance that initiated the change should not receive its own notifications. To do so would add additional overhead. Also, notifications should not endlessly go back and forth as each cache listener gets changes caused by a remote replication.

ehcache CachePeerProvider indentifies the local cache instance and excludes it from the notification list. Each Cache has a GUID. That GUID can be compared with list of cache peers and the local peer excluded.

Infinite notifications are prevented by having each CacheReplicatorListener call putQuiet and removeQuite methods on their decorated caches, so as not to nofify listeners.

Potential for Inconsisent Data

Timing scenarios, race conditions, delivery and reliability constraints, and concurrent updates to the same cached data can cause inconsistency (and thus a lack of coherency) across the cache instancies. Acknowledgement: Much of the material here was drawn from Data Access Patterns, by Clifton Nock.
Java Source File NameTypeComment
CacheManagerPeerListener.javaInterface A listener for updates, which controls remote cache peers.
CacheManagerPeerListenerFactory.javaClass An abstract factory for creating cache manager peer listeners.
CacheManagerPeerProvider.javaInterface Provides a discovery service to locate CachePeer RMI listener peers for a Cache.
CacheManagerPeerProviderFactory.javaClass An abstract factory for creating peers.
CachePeer.javaInterface An interface for a cache peer to which updates are made remotely.
CacheReplicator.javaInterface
ConfigurableRMIClientSocketFactory.javaClass Default socket timeouts are unlikely to be suitable for cache replication.
EventMessage.javaClass An Event Message, in respect of a particular cache.
EventMessageTest.javaClass
JVMUtil.javaClass
ManualRMICacheManagerPeerProvider.javaClass A provider of Peer RMI addresses based off manual configuration.
ManualRMIPeerProviderTest.javaClass
MulticastKeepaliveHeartbeatReceiver.javaClass Receives heartbeats from any MulticastKeepaliveHeartbeatSender s out there.
MulticastKeepaliveHeartbeatSender.javaClass Sends heartbeats to a multicast group containing a compressed list of URLs.
MulticastRMICacheManagerPeerProvider.javaClass A peer provider which discovers peers using Multicast.

Hosts can be in three different levels of conformance with the Multicast specification (RFC1112), according to the requirements they meet.

  1. Level 0 is the "no support for IP Multicasting" level.
MulticastRMIPeerProviderTest.javaClass Multicast tests.
PayloadUtil.javaClass This class provides utility methods for assembling and disassembling a heartbeat payload.
PayloadUtilTest.javaClass
RemoteCacheException.javaClass A Cache Exception in the distribution mechanism.
RemoteDebugger.javaClass A distributed testing tool for manual distributed testing of ehcache on cluster nodes.
RMIAsynchronousCacheReplicator.javaClass Listens to net.sf.ehcache.CacheManager and net.sf.ehcache.Cache events and propagates those to CachePeer peers of the Cache asynchronously.

Updates are guaranteed to be replicated in the order in which they are received.

While much faster in operation than RMISynchronousCacheReplicator , it does suffer from a number of problems.

RMIBootstrapCacheLoader.javaClass
RMIBootstrapCacheLoaderFactory.javaClass
RMIBootstrapCacheLoaderTest.javaClass
RMICacheManagerPeerListener.javaClass A cache server which exposes available cache operations remotely through RMI.

It acts as a Decorator to a Cache.

RMICacheManagerPeerListenerFactory.javaClass Builds a listener based on RMI.
RMICacheManagerPeerListenerTest.javaClass
RMICacheManagerPeerProvider.javaClass A provider of Peer RMI addresses.
RMICacheManagerPeerProviderFactory.javaClass
RMICacheManagerPeerTest.javaClass
RMICachePeer.javaClass An RMI based implementation of CachePeer.
RMICacheReplicatorFactory.javaClass Creates an RMICacheReplicator using properties.
RMICacheReplicatorTest.javaClass Tests replication of Cache events

Note these tests need a live network interface running in multicast mode to work

If running involving RMIAsynchronousCacheReplicator individually the test will fail because the VM will gobble up the SoftReferences rather than allocating more memory.

RMIDistributedCacheTest.javaClass
RMISynchronousCacheReplicator.javaClass Listens to net.sf.ehcache.CacheManager and net.sf.ehcache.Cache events and propagates those to CachePeer peers of the Cache.
www.java2java.com | Contact Us
Copyright 2010 - 2030 Java Source and Support. All rights reserved.
All other trademarks are property of their respective owners.