如何解决Google Cloud Storage + Function:大规模系统架构
背景
我有一个包含 3 个步骤的处理链。我打算将我的应用程序设计为具有非常高的输出。
进入细节
系统正在解决传入的任务。每个处理链(A
、B
和 C
)都有输入和输出:
A
输入是要解决的任务。 A
输出是要解决的子任务列表。 A
为单个输入生成多个输出(均与同一任务相关)。
C
输入是消息列表,由“父任务”聚合。完成特定任务的所有项目后,C
将该任务标记为已完成。
使用 Google Cloud 的一种可能架构是为每个新传入任务将 Google Cloud Storage 对象写入存储桶。为每个创建的新存储对象开启 Google Function 通知。该函数将执行A
(来自处理链)的工作。输出将写入不同的存储桶,该存储桶将触发另一个函数通知 (B
)。输出将写入第三个存储桶以处理 C
。
假设在函数 B
上创建了 10 个要处理的特定任务。因此,在存储桶 C
中,您会在最后找到 10 个不同的对象。函数 C
的任务是检测特定任务的所有项目(A
输出)完全执行的确切时间。如果所有项目都执行了,C
必须将任务标记为已完成。
问题
听起来我们必须计算 A
有多少输出,并将其与 C
有多少输入进行比较。
这是否可以改变系统设计以防止“计数消息”的需要?
解决方法
我建议您看看 Cloud Workflows 产品。在您的设计中,
- 保留函数 A 但更新它以发送要运行的 B 任务的 JSON 列表。
- 然后,iterate over the A JSON array response 并使用并行执行器并行运行 B 任务。我写了an article on this
- 当所有 B 任务都完成后,C 函数可以被 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
我认为这些问题(和讨论)不会为您的问题提供完整的答案,但应该会揭示一些关于如何在云函数的幂等世界中支持“状态机”的想法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。