python - 我的回调 webhook 超载 - 我该怎么办?
问题描述
我每晚都使用 API 将大量数据同步到我的应用程序。API 本身使用回调系统,所以我向他们的 API 发送请求(包括 webhook URL),当数据准备好时,他们会向我的 webhook 发送通知,告诉我再次查询 API 以获取数据。
问题是,这些回调以很高的速度(每分钟数千次)涌入我的 webhook,这给我的 Flask web 应用程序(托管在 Heroku dyno 上)带来了极大的压力,并导致最终用户出错。Webhook 本身已简化为将消息转发到 RabbitMQ 队列(在单独的 dyno 上运行),然后以自己的速度逐步处理它们。不幸的是,这似乎还不够。
我还能做些什么来管理这个负载吗?是否可以在与应用程序面向公众的部分不同的测功机上运行特定的 URL(或一组 URL)?即有两个网络测功机?
谢谢
解决方案
您可以使用免费层在多个测功机上部署具有相同代码的应用程序。例如,您的应用程序名为 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 应用程序之间负载平衡请求
推荐阅读
- chart.js - 是否可以为 Chart.js 图表中的每个数据集值定义数据属性?
- java - IST mapped to wrong ZoneId in java.time library
- mysql - Speed up SQL NOT IN query
- swift - 使用 alamofire 的 https 请求失败
- laravel - 设置到期日动态
- python - ANSI escape code wont work on python interpreter
- flutter - can't call dispose() method when app exit
- python - How to eval import in python?
- typescript - Getting a Bash related issue when compiling typescript code
- python-3.x - 如何比较python3中具有字符串值的两个嵌套字典列表