-
Notifications
You must be signed in to change notification settings - Fork 751
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[API Proposal]: Cache Synchronization for Hybrid Caching in Multi-Node Environments #5517
Comments
This would be a nice feature, but I'd prefer to use something like Redis pub/sub directly assuming that's what we are using for the L2 cache. |
But like this it would make every one coupled with Redis, I mean we could have it as an optional provider , but we need some default with no extra setup that's why I suggested web-hooks We could have multiple providers like but not limited to |
Hello , @mgravell could you please give us your invaluable input on this ? to be honest I'm eager to help |
@IbrahimMNada I think @rsalus meant here the message system, which would could be done in multiple ways like additional cache record type in pernament storage and readed as messages, or done as real messaging pattern, or message queue patter. there is a lot ways how it can be approached. Personally I dont think usage of webhooks is good approach here. |
@bielu I agree with you web hooks might not be optimal here , of course we ill have ad-ons like for example Redis pub/sub but we need some default for the ones whos not using. any Redis/Message queue in their applications. and by going to a shared storage every time we wanted to read from the in memory cache this negates the value of having in memory cache. so we might do a simple (file-system) based message broker will notify other node of a cache that need to be evicted |
|
pub/sub is pretty darn efficient and is the standard solution for a variety of implementations. see FusionCache for example. I doubt a file-system based broker would be feasible given the limitations imposed by IO. webhook might be doable but would be rather inefficient (not to mention the security implications). marc had this to say in another thread. |
Okay , lets agree on something here : Regardless of the method of cache invalidation you will choose , it should be decupled from hybrid cache itself, and it should be extendable as you guys always do, so I suggest for starter that we introduce what we could do is to introduce a new property in
and on the if you think this is a good place to start from please tell me , I'm ready to implement it. |
Background and motivation
In a multi-replica environment utilizing hybrid caching (in-memory and out-of-process), cache desynchronization between nodes can occur because there is no built-in mechanism to synchronize in-memory caches across nodes behind a load balancer. This results in inconsistent cache states, reducing the reliability of the system.
This proposal addresses the problem by introducing an event-driven mechanism to ensure cache synchronization across nodes.
Problem Context
Hybrid caching involves two main components:
When a cache is reset in one node, other nodes do not get notified, leading to cache desynchronization across the system.
Problem Statement
The current hybrid caching model does not offer a built-in mechanism to notify all nodes about an in-memory cache reset, resulting in inconsistent cache states between nodes in a multi-node environment.
API Proposal
Proposed Solution
Overview
Introduce a Publisher-Subscriber model using webhooks, event queues, or other notification mechanisms to propagate cache reset events to all nodes using the hybrid cache. This model will allow one node (the Publisher) to notify other nodes (Subscribers) when a cache reset happens, ensuring synchronization of the in-memory cache across all nodes.
Key Features
Webhook-based/Callback mechanism: Each node registers as a Subscriber to receive notifications when cache resets happen. The node initiating the reset acts as the Publisher.
Retry strategy: In case of a failure in notifying a node, the system retries the notification, ensuring robustness in cache synchronization.
Multi-provider support: While webhooks are the default, the design allows support for other messaging systems like
event queues
,SignalR
, etc.API Changes
Add a
CacheResetNotification
class:API Usage
Alternative Designs
Polling Mechanism: This was dismissed due to inefficiency and increased load on the nodes.
Risks
We need to consider network flooding or over requesting between nodes , so we can define a sync period between nodes/keys count thresh hold or something like this
The text was updated successfully, but these errors were encountered: