如何将传入的任务批量处理为 celery 中的 10 个任务?

问题描述

App1:发送通信(例如:电子邮件

App2:获取 webhook 解析 JSON 并更新数据库记录

当我从 App1 触发例如 10k 通信时,我将收到基于 App2 上的事件的 webhook 到目前为止非常好......

现在,当我收到这些 webhooks 时,我想将这些请求合并为一个并一次性更新记录,而不是一个一个地更新,这会导致我的 App2 停机,同时也增加了我的 RDS 数据库实例的负载.

在接收 webhooks 时,我通过 celery 路由这些请求,并制定了一个工作流程来执行请求并相应地控制流出,这在一定程度上解决了问题,但我仍在逐个更新记录,所以这不是任何人想要做的对。因此,需要一些有关 celery 工作流程的建议,以了解如何将这些传入的 celery 任务分成一批(10 个请求/每批)并处理这 10 个任务并进行主查询并初始化一个新任务,该任务将采用此主查询并更新数据一次完成 10 条记录。

工作流程:

App1 ---> 发送通信

App2 --> 获取 webhooks --> 推送到 celery-service --> 另一个服务 更新数据库

解决办法: 我将在 celery-service 和 App2 之间放置一个中间件(任何存储数据结构,如:Redis 或 MongoDB),它批量存储请求数据(即 10 个请求数据的列表),并且有一个周期性的 celery 任务从中间件并将 10 个请求数据处理为一个,并进一步更新数据库记录。 解决方案的问题现在是我的中间件成为瓶颈这里

App2 --> 获取 webhooks --> 推送到 ->(中间件)-> celery-service 从中间件轮询 10 个请求批次 --> 批量更新到 Db

请提出建议以一次性批量处理这些传入的 webhook 并更新记录。 如果有什么令人困惑的地方,请随时询问。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)