如何处理多副本下的状态管理?

2021-06-08 14:29:42 +08:00
 arjen

我有服务 A 和服务 B 。服务 A 在请求服务 B 时,服务 B 会将请求作为一个任务,并将其状态(执行中,成功,失败等)存放在 Redis 中执行。现在所有服务都在 K8S 上并每个服务有多个副本,

  1. 服务 B 的一个副本失败重启后,由于无法区分哪些任务是属于该失败的节点,所以会将 Redis 中所有任务置为失败。如何只取消该失败节点对应的任务?
  2. 服务 A 想取消任务,如何确定取消请求发送到哪个 B 服务的节点上?

现在的想法是在 Redis 中用副本的 name 作为前缀来区分副本,但是副本重启后该 name 会变化。在不引入新组件的情况下,有什么方案可以解决这些问题吗?

831 次点击
所在节点    程序员
1 条回复
jones2000
2021-06-08 22:18:26 +08:00
A,B 有任务关系, 直接 A,B 创建一个路链接, 不就行了, 状态控制都通过这路链接来完成.
再加一个总控系统, A 向总控发出请求需要一个 B 服务的任务,总控从空闲的机器中选出一个机器 B, A 直接向 B 发出来链接让 B 执行任务, 如果 B 执行失败, A 向总控重新发请求换一个机器链接执行.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/782154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX