【问题标题】:Microservices based architecture and individual cache for each node基于微服务的架构和每个节点的单独缓存
【发布时间】:2017-06-12 08:11:20
【问题描述】:

在分布式微服务应用程序中为每个节点使用单独的本地缓存是否被认为是不好的做法?我听说在单体应用程序中,可以使用本地 EHCache 作为 Hibernate 的二级缓存提供程序,但在分布式环境中,通常使用分布式缓存,例如 Memcached、Redis 或 Hazelcast。对每个节点使用单独的缓存会有什么后果?

【问题讨论】:

    标签: java hibernate caching architecture microservices


    【解决方案1】:

    “计算机科学只有两个难题:缓存失效和命名事物。”--Phil Karlton

    应用服务器中本地缓存的主要问题是它使缓存失效比以前更加困难。

    每次资源更改时,都必须在所有本地缓存​​上使其无效(并更新)。这将需要一个系统知道在任何时间点运行的所有缓存服务器。该系统必须被告知所有更新,以便它可以协调所有服务器上的数据失效。它还必须处理重试、处理失败的服务器等。

    如果您的应用程序服务器有自己的本地缓存,您将不得不使用单独的系统或在应用程序代码中自己解决这些问题。分布式缓存系统可以为您解决这些问题。您可以进行更新调用,并在成功时保证数据一致性(或最终一致性)。

    这是关注点分离。使用单独的缓存集群,缓存逻辑和相关问题在一个地方处理。同一个集群可以轻松地用于多个应用程序,而不是为您开发的每个应用程序重做相同的集群。

    另一个小缺点是,如果您不想降低性能,则每次生成新服务器时都必须预热缓存。这将导致生成服务器的时间更长。

    【讨论】:

      【解决方案2】:

      这里我们还可以做一件事,就是使用消息代理进行缓存失效。

      使用 kafka 或任何其他队列来捕获数据包并使它们无效。

      【讨论】:

      • 这没有回答主要问题“为每个节点使用单独的缓存有什么后果?”而是提供了一种跨集群同步缓存的解决方案。
      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 2017-10-15
      • 2020-07-22
      • 2014-10-25
      • 2020-02-25
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多