【问题标题】:Hazel-cast Cache Key-Values availability on all nodes/MemberHazelcast Cache Key-Values 在所有节点/成员上的可用性
【发布时间】:2020-02-03 06:52:18
【问题描述】:

我正在使用 hazelCast 来缓存从 API 获取的数据。 API 的结构是这样的

Controller->Service->DAOLayer->DB

我将 @Cacheable 保留在存在 getData(int elementID) 方法的服务层。

在我的架构中,有两个 PaaS 节点(np3a、np4a)。 API 将部署在它们两者上,用户将通过 loadBalancer IP 访问它们,这会将它们重定向到任一节点。

因此,用户 X 请求的一次命中可能会转到 np3a,而同一用户请求的另一次命中可能会转到 np4a。

我希望在第一次命中时,我将在 np3a 上缓存响应,相同的缓存响应也可用于 np4a 的下一次命中。

我已经阅读了

  1. ReplicatedMaps:内存效率低
  2. NearCache : 当读>写时

我不确定该采取哪一种方法,或者您是否提出了完全不同的建议。

【问题讨论】:

    标签: spring-boot caching hazelcast


    【解决方案1】:

    如果您有 2 个节点,Hazelcast 会将数据分区,以便一半在节点 1 上,另一半在节点 2 上。这意味着用户有 50% 的机会会询问包含数据的节点。

    如果您想在所有情况下避免额外的网络请求来获取节点上不存在的数据,唯一的方法是每次都将数据复制到每个节点。这就是ReplicatedMap 的目标。这就是权衡:性能与内存消耗。

    NearCache 在“客户端”添加一个额外的缓存,如果您使用的是客户端-服务器架构(而不是嵌入式)。

    【讨论】:

    • 感谢@Nicolas;您能否为 ReplicatedMap 的实现推荐一个好的参考页面。
    • 我认为我们不能用@cacheable 用户复制地图?
    • 什么是 IMap?
    • 我认为ReplicatedMapdocs.hazelcast.org/docs/latest/manual/html-single/… 的官方文档非常详尽,我不确定@Cacheable 是否能够使用另一种机制IMap 是标准的分布式数据结构。它允许您对数据进行分区,这样您就不会使用太多内存,但如果所需的键/值未存储在节点上,则可能会产生额外的网络请求。
    • Hazelcast 提供了一个 Gitter 频道gitter.im/hazelcast/hazelcast 如果你有具体问题,我建议你写在这里。任何反馈表示赞赏
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2021-02-19
    相关资源
    最近更新 更多