分布式缓存:清除所有者丢失的条目 (Apache Ignite)
Distributed Cache: Clearing entries on owner loss (Apache Ignite)
我有许多节点,每个节点都拥有大量物理资源的一个子集。每个节点只处理它自己的资源,但需要根据池中所有资源的状态来处理。
一个节点只更新它自己资源的状态,但会监听所有其他节点的状态变化。
当一个节点死亡(进程终止、崩溃、断电......)时,这些物理资源随之死亡,其他节点必须尽快丢弃它们。
现在我会用分布式复制缓存来做到这一点(因此节点可以读取本地副本以提高性能),但是如何"clear" 减少条目(拥有节点不能这样做)。
标准答案似乎是 Expiry policy = map entry gets X seconds to live without update,然后就消失了。问题是,如果您考虑 100.000 个资源范围和 100 个节点,那么为了不改变状态,需要向各处发送大量更新。更不用说在超时之前更新每个条目并在其他节点中丢弃这些更新的工作。
有更好的方法吗?
- 通过
IgniteEvents
订阅EVT_NODE_LEFT
- 通过
SqlQuery
或 ScanQuery
查找相关条目并删除它们
我有许多节点,每个节点都拥有大量物理资源的一个子集。每个节点只处理它自己的资源,但需要根据池中所有资源的状态来处理。 一个节点只更新它自己资源的状态,但会监听所有其他节点的状态变化。 当一个节点死亡(进程终止、崩溃、断电......)时,这些物理资源随之死亡,其他节点必须尽快丢弃它们。
现在我会用分布式复制缓存来做到这一点(因此节点可以读取本地副本以提高性能),但是如何"clear" 减少条目(拥有节点不能这样做)。 标准答案似乎是 Expiry policy = map entry gets X seconds to live without update,然后就消失了。问题是,如果您考虑 100.000 个资源范围和 100 个节点,那么为了不改变状态,需要向各处发送大量更新。更不用说在超时之前更新每个条目并在其他节点中丢弃这些更新的工作。
有更好的方法吗?
- 通过
IgniteEvents
订阅 - 通过
SqlQuery
或ScanQuery
查找相关条目并删除它们
EVT_NODE_LEFT