微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将传入的任务批量处理为 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 举报,一经查实,本站将立刻删除。