【问题标题】:Store commonly used microservice entities in Hazelcast cache?在 Hazelcast 缓存中存储常用的微服务实体?
【发布时间】:2020-05-09 04:09:59
【问题描述】:

我们有用户和订单微服务。我们还有很多其他的,但在它们之间经常使用 User 和 Order。

在 Hazelcast 分布式缓存中缓存 User 和 Order 实体以供其他人使用(以改善微服务之间的延迟)是否有意义,或者我应该仅在微服务级别缓存和来自其他微服务的 REST 调用?

如果缓存对此没问题,我如何禁用不拥有这些实体的微服务的缓存更新?

谢谢。

【问题讨论】:

    标签: microservices hazelcast


    【解决方案1】:

    嗯,这是一个很好的问题,答案是:“视情况而定”。通过使用缓存,您需要进行权衡。在数据的正确性(或更准确地说是新鲜度)和获取数据的速度之间,您更喜欢速度。实际上,您现在更喜欢过时的数据,而不是以后的新数据。

    如您所见,很难说哪个更好,因为这在很大程度上取决于您的上下文。

    请注意,通过使用 Hazelcast,您还可以刷新缓存,这样陈旧的问题就不会那么严重了。有很多方法可以做到这一点,其中之一就是 Jet 工作。最好的方法同样是依赖于上下文的。

    【讨论】:

      【解决方案2】:

      我想说这更像是一个设计决定。这在很大程度上取决于您为微服务选择的隔离级别。您可以选择为您的所有微服务运行单个集群,并具有完全访问控制,其中可以允许服务根据您可以定义的授权级别访问缓存。因此,例如,创建 2 个缓存 - User 和 Order,让 User_ms(ms = 微服务)和 Order_ms 可以访问它们,并限制其他人的访问。

      对于访问集群的其他微服务,无论是用户和订单缓存还是同一集群中的其他缓存,您都可以控制和定义它们的访问级别。详细看这里:https://docs.hazelcast.org/docs/3.12.5/manual/html-single/index.html#security

      您还可以通过配置 NearCache 在微服务级别缓存数据,其中主数据的更新会立即使 NearCache 中的数据失效 - 所有这些都由 Hazelcast 在内部发生和管理。

      或者,在完全隔离模式下,您可以在微服务级别运行微集群 - 每个微服务的专用集群不被其他服务共享。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-19
        • 2011-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多