相同 PODS 的副本之间同步通信的通用策略是什么?
What is common strategy for synchronized communication between replica's of same PODS?
假设我们有以下应用,
- API 应用程序:负责为用户请求提供服务。
- 后端应用程序:负责处理长 运行 任务的用户请求。它将进度更新到数据库 (postgres) 和分布式缓存 (Redis)。
这两个应用程序都是可扩展的服务。单个后端应用程序处理多个租户,例如此处有客户,但一位客户仅分配给单个后端应用程序。
我有一个用例,我需要 API 层来连接到处理该客户的特定副本。我们对此有共同的模式吗?
心中的几个策略
- Pub/Sub:问题是我们想要同步保证响应,可能使用 Redis
- gRPC : 使用 POD IP 连接到特定的 pod 不是标准方式
- 通过向副本添加标签并使用它们在运行时创建服务。 -- 看起来很有前途
如果有通用模式或示例架构或标准方法,请告诉我?
注:[以上为模拟生产用例,名称与实际用例有改动]
您的目标应该是让您的服务保持无状态,在 Kubernetes 环境中,无法判断一个 pod 何时会因工作节点维护而被另一个 pod 替换。
如果您有长时间的 运行 任务无法在为 pods 配置的宽限期内完成,以便在工作节点期间关闭 drain/evacuation 您需要实施某种持久性工作按照您在选项 1 中考虑的方式排队。我建议您查看 saga 模式。
另外一种我们常用的模式是让worker服务将job的当前状态写入数据库,让客户端每隔几秒拉取状态。然而,这确实需要一些方法来处理可能被 pods 放弃并被迫关闭的半完成作业。
假设我们有以下应用,
- API 应用程序:负责为用户请求提供服务。
- 后端应用程序:负责处理长 运行 任务的用户请求。它将进度更新到数据库 (postgres) 和分布式缓存 (Redis)。
这两个应用程序都是可扩展的服务。单个后端应用程序处理多个租户,例如此处有客户,但一位客户仅分配给单个后端应用程序。
我有一个用例,我需要 API 层来连接到处理该客户的特定副本。我们对此有共同的模式吗?
心中的几个策略
- Pub/Sub:问题是我们想要同步保证响应,可能使用 Redis
- gRPC : 使用 POD IP 连接到特定的 pod 不是标准方式
- 通过向副本添加标签并使用它们在运行时创建服务。 -- 看起来很有前途
如果有通用模式或示例架构或标准方法,请告诉我?
注:[以上为模拟生产用例,名称与实际用例有改动]
您的目标应该是让您的服务保持无状态,在 Kubernetes 环境中,无法判断一个 pod 何时会因工作节点维护而被另一个 pod 替换。
如果您有长时间的 运行 任务无法在为 pods 配置的宽限期内完成,以便在工作节点期间关闭 drain/evacuation 您需要实施某种持久性工作按照您在选项 1 中考虑的方式排队。我建议您查看 saga 模式。
另外一种我们常用的模式是让worker服务将job的当前状态写入数据库,让客户端每隔几秒拉取状态。然而,这确实需要一些方法来处理可能被 pods 放弃并被迫关闭的半完成作业。