【问题标题】:Distributed Caching to avoid duplicate requests分布式缓存避免重复请求
【发布时间】:2016-10-15 15:08:53
【问题描述】:

同一个 ServiceA 的多个实例在不同的 jvm 上运行。但它们都共享来自数据库的相同后端数据

当有来自客户端的请求时,ServiceA 会在其 DB 中查找数据是否可用,如果没有,则请求另一个 ServiceB 获取该数据并将其存储在其 DB 中并将其返回给客户端。

如果两个客户端同时请求并且 ServiceA 的两个实例处理这些请求,则这两个实例都可以有效地调用 ServiceB 来获取该数据。我应该如何处理这种情况,以便只有一个对 SerivceB 的请求。

【问题讨论】:

    标签: java distributed distributed-caching


    【解决方案1】:

    两个补充@norbert-van-nobelen所说的;

    还有两种可能性。

    • 一个是让你的ServiceB决定处理哪个请求
    • 另一个选项是让您的 ServiceA 与您的 ServiceB 同步并处理竞争条件。

    由于您对服务的描述对我来说非常抽象,您可以在您的 serviceB 中实现一些分布式锁,或者合并一个分布式缓存来为您完成。

    一个例子; http://blogs.alachisoft.com/distributed-locking/

    【讨论】:

      【解决方案2】:

      您可以对请求应用哈希,如果请求已经存在,请检查请求队列。

      为了让它有效地工作,您还需要知道在多个缓存服务器的情况下发送哈希请求的位置:

      假设你有 2 个缓存后端:你想要容错和高效。

      高效:这可以通过一个简单的 MODULUS 来完成,该哈希值决定了您与哪个服务器通信

      容错必须是通信层的一部分,您可以在此确定您的缓存后端是否实际可用以及您确定如何回退。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2014-12-01
        • 1970-01-01
        • 2020-08-18
        • 2016-01-26
        相关资源
        最近更新 更多