google-app-engine - 发布/订阅推送返回 503 用于基本缩放
问题描述
我正在使用 Pub/Sub 推送订阅,确认截止日期设置为 10 分钟,push
端点使用basic
缩放托管在 AppEngine 中。在我的日志中,我看到一些 Pub/Sub(应该传递到启动实例)推送请求失败,并503
显示错误状态和Request was aborted after waiting too long to attempt to service your request.
日志消息。此请求的执行时间从 10 秒(对于大多数请求)到其中一些请求的 30 秒不等。根据这篇文章https://cloud.google.com/appengine/docs/standard/python/how-instances-are-managed#instance_scaling Deadlines
的 HTTP 请求是 24 小时,请求不应在 10 秒内中止。有没有办法避免这种异常?
解决方案
这些失败的请求很可能在Pending Request Queue 中超时,这意味着没有实例可以为它们提供服务。这通常发生在突发传递的 PubSub 消息高峰期间,并且 App Engine 无法快速扩展以应对它们。
缓解这种情况的一种选择是在 app.yaml 文件中将缩放选项切换为自动缩放。您可以调整min_pending_latency
andmax_pending_latency
以更好地适应您的场景。您还可以指定min_idle_instances
获取准备好处理额外负载的空闲实例(确保还启用和处理预热请求)
考虑到 PubSub 会自动重试传递失败的消息。它将根据您的系统行为调整交付率,如此处所述。因此,在生成新实例时,您可能会在消息高峰期间遇到一些错误,但您的消息最终会被处理(只要您的设置max_instances
足够高以处理负载)。
推荐阅读
- json - 需要帮助添加到 python3 中的 JSON 字典
- excel - Excel VBA - 组合多个工作表选择更改
- javascript - 在 javascript 中使用 OOP 启动和停止计时器
- nginx - 如何使用 NGINX 反向代理,并将端口和路径代理到上游 url?
- python - 这是在网络抓取中旋转代理的正确方法吗
- python - 如何根据孔的数量计算对象
- c# - 如何在启动时为 Windows 服务实现临时管理员权限窗口
- spring - MyBatis - 数据库连接失败,因为 PropertyPlacholderConfigurer 不解析占位符引用
- c++ - 在 unordered_map 中保存 shared_ptr - 立即调用析构函数
- python - 如何在 python IDLE 上使用表情符号模块?