相同 PODS 的副本之间同步通信的通用策略是什么?

What is common strategy for synchronized communication between replica's of same PODS?

假设我们有以下应用,

这两个应用程序都是可扩展的服务。单个后端应用程序处理多个租户,例如此处有客户,但一位客户仅分配给单个后端应用程序。

我有一个用例,我需要 API 层来连接到处理该客户的特定副本。我们对此有共同的模式吗?

心中的几个策略

  1. Pub/Sub:问题是我们想要同步保证响应,可能使用 Redis
  2. gRPC : 使用 POD IP 连接到特定的 pod 不是标准方式
  3. 通过向副本添加标签并使用它们在运行时创建服务。 -- 看起来很有前途

如果有通用模式或示例架构或标准方法,请告诉我?

注:[以上为模拟生产用例,名称与实际用例有改动]

您的目标应该是让您的服务保持无状态,在 Kubernetes 环境中,无法判断一个 pod 何时会因工作节点维护而被另一个 pod 替换。

如果您有长时间的 运行 任务无法在为 pods 配置的宽限期内完成,以便在工作节点期间关闭 drain/evacuation 您需要实施某种持久性工作按照您在选项 1 中考虑的方式排队。我建议您查看 saga 模式。

另外一种我们常用的模式是让worker服务将job的当前状态写入数据库,让客户端每隔几秒拉取状态。然而,这确实需要一些方法来处理可能被 pods 放弃并被迫关闭的半完成作业。