分布式缓存以避免重复请求

时间:2016-06-14 18:29:01

标签: java distributed distributed-caching

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

当客户端发出请求时,ServiceA会查询数据是否在其数据库中可用,如果没有请求另一个ServiceB获取该数据并将其存储在其数据库中并返回它回到客户端。

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

2 个答案:

答案 0 :(得分:1)

两个添加到@norbert-van-nobelen所说的内容;

还有两种可能性。

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

由于您的服务描述对我来说非常抽象,您可以在serviceB中实现某些分布式锁定,或者为您执行分布式缓存。

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

答案 1 :(得分:0)

您可以做的是将哈希值应用于请求,并检查请求队列中是否已存在请求。

为了使其有效工作,您还需要知道在多个缓存服务器的情况下发送散列请求的位置:

  

假设你2缓存结束:你想要容错和高效。

     

高效:这可以通过简单的MODULUS来完成,其中模数决定了你说话的服务器

     

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