可靠的集合缓存作为服务结构中的缓存
我的系统使用一堆微服务来处理一个项目,我打算创建一个有状态的MicroService来保存项目的最新状态。 在该服务中,我计划将所有项目状态存储在可靠的字典中,并且每当访问项目时都会更新项目的最后访问字段。
我的要求是,我只想将最近使用的项目存储在可靠的集合中,并且需要将不能长时间访问的项目移动到外部存储(如天蓝色表格存储),并且外部存储和可靠集合需要同步中。
这意味着所有的物品都应该放在外部存储器中,而最近使用的物品则放在可靠的收集器中
这是为了减少可靠收集的开销。
就像可靠的收集起到缓存的作用。
如上所述,实施我的解决方案是否是最佳做法? 枚举ReliableCollection是否是一个好习惯?
如果可靠字典是用来作为缓存的,那么我真的没有看到将未使用的项目卸载到Azure存储的重点。 如果它是一个缓存,我希望清除未使用的项目,并且调用者需要返回真实的来源以查找从缓存中过期的任何内容。 但是这听起来像你希望Reliable Dictionary成为最新的真相源。 所以我认为你必须首先决定是否实际构建了一个缓存,或者是真实数据存储的来源,这个数据存储可以将内存中的数据分页。 听起来更像后者。
无论是哪种情况,都可以按照您所描述的方式完成,但始终保持同步不会很容易,因为您没有跨Reliable Dictionary和外部存储进行事务处理。
枚举集合是好的,但是这是一个昂贵的操作,所以我不建议在热路径中的大量数据上执行它,例如用户请求路径。 可以按照计划的方式定期进行。
你需要将数据卸载到外部存储器吗? 你可以卸载到本地磁盘? Reliable Collections很快会自动将状态卸载到磁盘。
我会用一个演员。 给每个项目分配自己的演员并在那里存储状态。 当演员被垃圾收集后,你可以将状态保存在别的地方,或者干脆在演员定时器上做。
这样做意味着您不必复制大量的actor代码来管理大量实例。
警告
如果您的整体设计有意义,这是有道理的。 正如瓦茨拉夫在下面的评论所说的,由于演员的单线程模型,演员对通用缓存不太好。 但是如果你的设计有一个代表单个实体的actor,并且缓存与该实体(比如用户)有关,那么把这个actor当作缓存就可以很好地工作。
链接地址: http://www.djcxy.com/p/35451.html上一篇: Reliable Collection Caching as Cache in Service Fabric
下一篇: Drawing a rounded rectangle with opacity on a BufferedImage