【发布时间】:2020-05-09 04:09:59
【问题描述】:
我们有用户和订单微服务。我们还有很多其他的,但在它们之间经常使用 User 和 Order。
在 Hazelcast 分布式缓存中缓存 User 和 Order 实体以供其他人使用(以改善微服务之间的延迟)是否有意义,或者我应该仅在微服务级别缓存和来自其他微服务的 REST 调用?
如果缓存对此没问题,我如何禁用不拥有这些实体的微服务的缓存更新?
谢谢。
【问题讨论】:
我们有用户和订单微服务。我们还有很多其他的,但在它们之间经常使用 User 和 Order。
在 Hazelcast 分布式缓存中缓存 User 和 Order 实体以供其他人使用(以改善微服务之间的延迟)是否有意义,或者我应该仅在微服务级别缓存和来自其他微服务的 REST 调用?
如果缓存对此没问题,我如何禁用不拥有这些实体的微服务的缓存更新?
谢谢。
【问题讨论】:
嗯,这是一个很好的问题,答案是:“视情况而定”。通过使用缓存,您需要进行权衡。在数据的正确性(或更准确地说是新鲜度)和获取数据的速度之间,您更喜欢速度。实际上,您现在更喜欢过时的数据,而不是以后的新数据。
如您所见,很难说哪个更好,因为这在很大程度上取决于您的上下文。
请注意,通过使用 Hazelcast,您还可以刷新缓存,这样陈旧的问题就不会那么严重了。有很多方法可以做到这一点,其中之一就是 Jet 工作。最好的方法同样是依赖于上下文的。
【讨论】:
我想说这更像是一个设计决定。这在很大程度上取决于您为微服务选择的隔离级别。您可以选择为您的所有微服务运行单个集群,并具有完全访问控制,其中可以允许服务根据您可以定义的授权级别访问缓存。因此,例如,创建 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 在内部发生和管理。
或者,在完全隔离模式下,您可以在微服务级别运行微集群 - 每个微服务的专用集群不被其他服务共享。
【讨论】: