是否可以在像云 运行 这样的无服务器平台中进行微批处理?

Is it possible to do micro-batching in serverless platforms like cloud run?

我大量使用 Google 云 运行,原因有很多 - 原因之一是将每个请求视为无状态并单独处理的简单性。

不过我最近在想,对于我们拥有的一种服务,它只是将数据写入数据库,将一些请求批量处理而不是单独编写每个请求会非常方便。这可以通过无服务器平台实现吗 - 特别是云 运行?

我想你可以尝试一下这些博客,我已经阅读了一些内容,看起来你可以从中汲取一些好的想法。 Running a serverless batch workload on GCP with Cloud Scheduler, Cloud Functions, and Compute Engine

Batching Jobs in GCP Using the Cloud Scheduler and Functions

这是另一个 Whosebug 线程,显示了一些类似的方法。

因为云 运行 是无状态的,所以您不能堆叠请求(意味着保留它们,所以有状态)并在以后处理它们。你需要一个中间层。

我已经实施的好方法是在 PubSub 中发布请求(直接,或者您使用 CLoud Run/Cloud 函数获取请求并将其转换为 PubSub 消息)。

然后,您可以创建触发云 运行 服务的 Cloud Scheduler。这个 Cloud 运行 将拉取 PubSub 主题并阅读一堆消息(也许是全部)。然后,您拥有所有批处理的“请求”,您可以“在 Cloud Scheduler 请求中”处理它们(不要忘记您不能使用 Cloud 运行 在后台处理,您必须在请求上下文。-> 现在 ;) )