代码之家  ›  专栏  ›  技术社区  ›  user2171669

将常用的微服务实体存储在Hazelcast缓存中?

  •  0
  • user2171669  · 技术社区  · 5 年前

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

    将User和Order实体缓存在Hazelcast分布式缓存中以供他人使用(以改善微服务之间的延迟)有意义吗?还是我应该只缓存在微服务级别和其他微服务的REST调用上?

    如果Cache适用于此,我如何禁用不拥有这些实体的微服务的缓存更新?

    谢谢。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Nicolas    5 年前

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

    正如你所看到的,很难说哪个更好,因为这在很大程度上取决于你的背景。

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

        2
  •  1
  •   wildnez    5 年前

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

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

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

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