可靠的集合缓存作为服务结构中的缓存

本文关键字:缓存 服务 结构 集合 | 更新日期: 2023-09-27 17:59:20

我的系统使用一堆微服务来处理项目,我计划创建一个保存项目最新状态的Stateful MicroService。在该服务中,我计划将所有项目状态存储在一个可靠的字典中,并且每当访问某个项目时,都会更新该项目的"上次访问"字段。

我的要求是,我只想将最近使用的项目存储在可靠的集合中,并需要将长期未访问的项目移动到外部存储,如azure表存储,外部存储和可靠集合需要同步。

这意味着所有物品都应存放在外部,最近使用的物品应可靠收集。

这是为了减少可靠收集的开销。

就像可靠的集合充当缓存一样。

实现上述解决方案是最佳实践吗?列举一个可靠集合是一种好的做法吗?

可靠的集合缓存作为服务结构中的缓存

如果Reliable Dictionary旨在充当缓存,那么我真的不认为将未使用的项目卸载到Azure Storage有什么意义。若它是一个缓存,我希望未使用的项被清除,调用方需要返回到缓存中过期的任何内容的真相来源。但听起来你想让《可靠词典》成为最新的真相来源。所以我认为你必须首先决定你是否真的在构建一个缓存,或者一个可以从内存中分页数据的真实数据源存储。听起来更像后者。

在任何一种情况下,都可以按照您所描述的进行,但保持它们的一致同步并不容易,因为您没有跨可靠字典和外部存储的事务。

枚举集合很好,但这是一项昂贵的操作,因此我不建议对热路径(如用户请求路径)中的大量数据执行此操作。按计划定期做是可以的。

是否需要将数据卸载到外部存储?你能卸载到本地磁盘吗?Reliable Collections将很快自动将状态卸载到磁盘。

SoCreate团队刚刚发布了一个名为Service Fabric Distributed Cache的开源项目,该项目可能会帮助您或其他使用Service Fabric并需要缓存的人。我们构建了这个,这样我们就不需要在Service Fabric中作为guest exe运行Redis或类似的东西。这为您提供了一种将缓存作为服务结构可靠服务来运行、监控和管理的方法。你可以在这里了解更多信息:

http://service-fabric-distributed-cache.socreate.it/

或在GitHub上点击:https://github.com/SoCreate/service-fabric-distributed-cache

我会使用一个actor。为每个项目指定它自己的参与者,并将状态存储在那里。当actor被垃圾收集时,您可以将状态保存到其他地方,或者只需在actor计时器上执行此操作。

这样做意味着您不必复制大量actor代码来管理大量实例。

CAVEAT

如果你的整体设计有意义,这是有意义的。正如瓦茨拉夫在下面的评论所说,由于演员的单线程模型,演员不适合用于通用缓存。但是,如果您的设计有一个表示单个实体的参与者,并且缓存与该实体(例如用户)相关,那么将该参与者视为缓存可以很好地工作。