【问题标题】:My callback webhook is overloaded - what can I do?我的回调 webhook 超载 - 我该怎么办?
【发布时间】:2021-02-11 09:54:30
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 我已经通过 HireFire 为我的应用设置了自动缩放功能,但是对于本质上是工作任务的 Web dyno 进行缩放感觉并不理想。

标签: python flask heroku


【解决方案1】:

您可以使用免费层在多个测功机上部署具有相同代码的应用程序。例如,您的应用程序名为 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,你可以让它必须CNAME DNS记录指向你的heroku应用来做这样的负载均衡

rob1.herokuapp.com
rob2.herokuapp.com

因此,您可以在 robsapp.example.org 上使用应用程序 webhook,它会自动在 rob1 和 rob2 应用程序之间负载平衡请求

【讨论】:

    猜你喜欢
    • 2021-10-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-21
    • 2014-03-07
    相关资源
    最近更新 更多