程序化防止Google App Engine配额耗尽

5 投票
1 回答
537 浏览
提问于 2025-04-16 11:26

我正在用Python开发一个Google App Engine的应用。这个应用涉及到一些众包的数据收集,用户在全国各地提交的数据会被用到。现在,我使用的是默认的免费配额,但我面临一个问题,就是要确保我的应用至少有99%的正常运行时间。

问题在于,一旦你用完了分配的配额,谷歌就会阻止任何进一步的请求被发送到你的应用。在最近的一次测试中,有人用自动化脚本快速耗尽了CPU的配额——之后,应用只会返回HTTP 403 Forbidden状态码,而不是调用请求处理程序。现在,我已经修补了系统,不允许自动发布,但我该如何确保人类用户在生产时不会造成类似的“停摆”呢?

我知道有配额API,但我觉得它只能给我应用的使用情况信息。我想要一种方法来减缓请求的速度(比如每分钟的请求数量),而不是让用户看到错误页面或造成停摆。

有什么建议吗?

1 个回答

5

解决这个问题的一个常见方法是把任务交给一个有速率限制的任务队列来处理。

举个例子:

queue:
- name: mail-throttle
  rate: 2000/d
  bucket_size: 10
- name: background-processing-throttle
  rate: 5/s

通过这种方式,你可以控制应用程序各个部分的使用情况,确保它们都在可用配额的范围内。

有几点需要注意:
1. 队列会尽量按照先进先出的顺序来处理任务
2. 将任务放入队列或执行任务都会消耗一些配额

撰写回答