首页 > 解决方案 > 我的回调 webhook 超载 - 我该怎么办?

问题描述

我每晚都使用 API 将大量数据同步到我的应用程序。API 本身使用回调系统,所以我向他们的 API 发送请求(包括 webhook URL),当数据准备好时,他们会向我的 webhook 发送通知,告诉我再次查询 API 以获取数据。

问题是,这些回调以很高的速度(每分钟数千次)涌入我的 webhook,这给我的 Flask web 应用程序(托管在 Heroku dyno 上)带来了极大的压力,并导致最终用户出错。Webhook 本身已简化为将消息转发到 RabbitMQ 队列(在单独的 dyno 上运行),然后以自己的速度逐步处理它们。不幸的是,这似乎还不够。

我还能做些什么来管理这个负载吗?是否可以在与应用程序面向公众的部分不同的测功机上运行特定的 URL(或一组 URL)?即有两个网络测功机?

谢谢

标签: pythonflaskheroku

解决方案


您可以使用免费层在多个测功机上部署具有相同代码的应用程序。例如,您的应用程序名为 rob1 并托管在https://rob1.herokuapp.com,源代码可从https://git.heroku.com/rob1.git访问。您可以创建应用程序 rob2,可从 https://rob2.herokuapp.com访问,源代码托管在https://git.heroku.com/rob2.git

然后,您可以将代码推送到第二个应用程序。


$ cd projects/bob1
$ git remote add heroku2 https://git.heroku.com/rob2.git 
$ git push heroku2 master 

结果,您的机器上有一个 repo,并且有 2 个相同的 heroku 应用程序运行您的项目代码。可能,您需要将第一个应用程序的环境参数复制到第二个应用程序。

但无论如何,您将在免费套餐中拥有 2 个相同的应用程序。

稍后,如果您获得了域名,例如robsapp.example.org,您可以使其具有指向您的 Heroku 应用程序的 CNAME DNS 记录,以便像这样进行负载均衡

rob1.herokuapp.com
rob2.herokuapp.com

结果,您有可用的应用程序 webhook robsapp.example.org ,它会自动在 rob1 和 rob2 应用程序之间负载平衡请求


推荐阅读