如何以编程方式扩展应用引擎?
Posted
技术标签:
【中文标题】如何以编程方式扩展应用引擎?【英文标题】:How to programmatically scale up app engine? 【发布时间】:2020-07-29 20:29:10 【问题描述】:我有一个使用应用引擎自动缩放的应用程序。它通常运行 0 个实例,除非某些授权用户使用它。
此应用程序需要通过键盘交互尽可能快地对数千人运行自动语音呼叫(不,这不是垃圾邮件,它是redcall!)。
从编程上讲,我们要求 Twilio 通过其语音 API 以 5 次/秒的速度初始化调用,它基本上通过 webhook 工作,至少 2 次,但大多数时候每次调用 4 次命中。因此,GAE 需要非常快速地扩展,并且当只有一个实例准备好时,一些请求会在触发器开始时丢失(这只是用户端的挂起)。
我想知道是否可以在运行此类触发器之前以编程方式扩展 App Engine(通过 an API?)以便在暴风雨来临前做好准备?
【问题讨论】:
这不是答案,但您是否查看过 App Engine 的架构?这甚至是需要非常快速扩展的正确服务吗?这是为成千上万的并发消费者提供的正确服务吗?查看此文档以设置minInstances
:cloud.google.com/appengine/docs/standard/python/config/… 和此文档关于缩放cloud.google.com/appengine/docs/standard/python/…
@JohnHanley,GAE 标准的特点之一是它能够非常快速地扩展到很多实例。我已经看到它迅速从 2 个实例扩展到 50 个实例,以无故障地处理流量高峰。
@gaefan - 同意。但快速扩展并不意味着“现在”。同样基于问题中的细节,我建议他审查他的架构和设计。
【参考方案1】:
我想你可能想试试warmup requests。因为他们在任何实时请求到达该实例之前将您的应用程序代码加载到新实例中。因此,当您的 GAE 实例缩小到零时,减少了回答所需的时间。
我与您共享的链接包括 php7 运行时,因为我看到您对它很熟悉。
我也同意 John Hanley 的观点,因为找到一个关于您有多少空闲实例可用的最佳位置,也有助于提高您的应用程序的性能。
【讨论】:
【参考方案2】:最后,解决方案是委托通过 Cloud Tasks 发送通信:
https://cloud.google.com/tasks/docs/creating-appengine-tasks
https://github.com/redcall-io/app/blob/master/symfony/src/Communication/Processor/QueueProcessor.php
任务可以在出现错误时再次尝试访问应用引擎,并在激增时让应用引擎弹出新实例。
【讨论】:
以上是关于如何以编程方式扩展应用引擎?的主要内容,如果未能解决你的问题,请参考以下文章