减少多实例服务的不必要工作

时间:2017-06-28 08:23:47

标签: architecture message-queue microservices distributed-system

我有一个小服务连接到第三方Web服务,获取一些信息并将其保存到mongo集合中。这项服务感兴趣的数据是非常静态的,但它可以在特殊情况下改变(这是足球时间表,顺便说一句)。要获得有关更改的通知,服务会每3-6小时检查一次,以查看是否已取消或重新安排任何匹配。新条目最终在数据库中,旧条目被丢弃(因为它们已经在集合中)。

该服务还公开了一个用户连接的GET端点。

现在,当我运行单个服务实例时,这很好,但是当我有多个实例时却不太好(可能对于所有实例来说,每三个小时查询一次数据服务并丢弃大部分实例都没有意义结果)。

我有以下想法如何解决这个问题:

  • 使用某种领导者选举算法,只有领导者应该查询第三方服务
  • 将服务分成两部分:一个较小的服务将查询数据(对于多个实例仍然存在问题),将结果放在消息队列中,以确保只有一个消费者接受并处理结果
  • 结合前两个想法:查询服务的领导者选举,消费数据的消息队列
  • 使用某种分布式锁(我知道Redis / Jedis的解决方案),因此只有一个服务进行查询。然而,这感觉有点过分;添加Redis仅用于锁定就像... meh ...
  • 在这种情况下常用的更好的其他想法: - )

如果有解决此类问题的首选方法,请您告诉我吗?

1 个答案:

答案 0 :(得分:2)

我会保持简单,避免过于复杂。 只需在再次调用WS之前保持WS响应时间和每个实例,应检查DB自上次调用以来经过了多长时间。