首页 > 解决方案 > 如何制作容错数据处理 k8s pod?

问题描述

我们在 GKE 上有一个图像处理管道,它来自 GCP 主题,而 GCP 主题又由存储桶通知提供,即

image upload > bucket > notification > topic < pods consume files off topic.

这可以很好地扩展,但有时 pod 会死亡或缩小,并且它们会从它们消费的主题中获取数据。是否有容器设计模式来确保即使 pod 意外死亡也能处理文件?

(在处理数百万个图像文件时,整理遗漏的内容是一场噩梦)。

标签: kubernetesgoogle-kubernetes-engine

解决方案


是的,我想了很久,想出了一个 2 队列解决方案,我将称之为 Accountant pod/container(因为这个想法基于复式记账):

  1. 工作被发布到 2 个队列,Q1 和 Q2
  2. 工人处理 Q1 弹出项目直到它为空
  3. 当 Q1 为空时,会计 pod 会通过 Q2 检查每个工作的预期输出。如果缺少某些东西,则再次将其放回 Q1 和 Q2(在 Q2 耗尽后)。
  4. 重复,直到会计师没有将任何内容返回到队列中。

我称之为:复式/会计设计模式:)

我认为这可以应用于大多数数据处理队列系统。

我看到的唯一缺陷是会计师是否死了(但检查输入与输出应该是一项轻量级的工作)。我想那么你可以有 N-1 会计师的 N 队列,这取决于你想要的确定程度(但协调超过 1 名会计师可能会很棘手)


推荐阅读