Google Cloud Storage + Function:大规模系统架构

问题描述

背景

我有一个包含 3 个步骤的处理链。我打算将我的应用程序设计为具有非常高的输出

进入细节

系统正在解决传入的任务。每个处理链(ABC)都有输入和输出

A 输入是要解决的任务。 A 输出是要解决的子任务列表。 A 为单个输入生成多个输出(均与同一任务相关)。

B 输入是要解决的任务。 B 输出是针对 C 的单个任务。

C 输入是消息列表,由“父任务”聚合。完成特定任务的所有项目后,C 将该任务标记为已完成。

示意图:

enter image description here

使用 Google Cloud 的一种可能架构是为每个新传入任务将 Google Cloud Storage 对象写入存储桶。为每个创建的新存储对象开启 Google Function 通知。该函数将执行A(来自处理链)的工作。输出将写入不同的存储桶,该存储桶将触发另一个函数通知 (B)。输出将写入第三个存储桶以处理 C

注意:当一个函数处理一个任务时,它也会在最后删除它。

假设在函数 B 上创建了 10 个要处理的特定任务。因此,在存储桶 C 中,您会在最后找到 10 个不同的对象。函数 C 的任务是检测特定任务的所有项目(A 输出)完全执行的确切时间。如果所有项目都执行了,C 必须将任务标记为已完成。

问题

听起来我们必须计算 A 有多少输出,并将其与 C 有多少输入进行比较。

这是否可以改变系统设计以防止“计数消息”的需要?

解决方法

我建议您看看 Cloud Workflows 产品。在您的设计中,

,

我不确定我是否了解所有上下文、要求和范围限制/复杂性,但我建议先阅读几个 StackOverflow 问题和一篇 Medium 文章。

How to combine multiple files in GCS bucket with Cloud Function trigger

How to concatenate sharded files on Google Cloud Storage automatically using Cloud Functions

Google Cloud Platform solution for serverless log ingestion (files downloading) from a SFTP server

我认为这些问题(和讨论)不会为您的问题提供完整的答案,但应该会揭示一些关于如何在云函数的幂等世界中支持“状态机”的想法。