【问题标题】:Run default script without accepting request in App Engine Standard Environment在 App Engine 标准环境中运行默认脚本而不接受请求
【发布时间】:2020-01-26 12:10:57
【问题描述】:

我有一个 nodejs 脚本,它与第三方启动流并将传入的消息存储在 FireStore 中。

不需要传入请求。但是在我将脚本部署到 App Engine 之后,只有在调用云端点时脚本才会启动。之后,它继续运行(这是它应该做的)。

可能有一种方法可以在默认情况下启动进程,并且如果它崩溃,还可以构建类似自动重启的功能,但我找不到它或者我使用了错误的搜索词:-)

【问题讨论】:

    标签: google-app-engine google-cloud-platform


    【解决方案1】:

    AppEngine 是一个网络微服务平台。我的意思是所有部署的(微)服务都必须由 HTTP 请求触发。

    顺便说一句,您可以执行一个无限批处理来传输数据。

    但是,您可以设置一个调用 AppEngine 端点的Cloud Task。最长持续时间为 24 小时。将此链接到 Cloud Scheduler 以每天启动您的 24 小时任务。 (具体来说,你的云调度器必须触发像 Cloud Function 或 AppEngine 这样的端点。这个端点在 Cloud Task 中创建任务。Cloud Scheduler 不能直接在 Cloud Task 中创建任务

    【讨论】:

    • 您好纪尧姆,感谢您的快速回复。我熟悉云功能和调度程序,所以这会有所帮助。但对我来说,每 24 小时开始一个任务感觉有点奇怪,应该持续 24 小时。如果我运行“普通”服务器,则可以设置侦听器或与其他服务的流连接(例如 MQTT)。这将持续“永远”。或者如果它中断,它将尝试再次启动流。应用引擎不能做到这一点吗?只是“永远”启动服务?
    • 我从未测试过,但使用灵活的 AppEngine 应该是可能的。 AppEngine Flexible 最糟糕的一点是总是有 1 个实例启动(并计费)。但是,就您而言,这就是您想要的。它应该工作。告诉我
    【解决方案2】:

    正如 Guillaume 所提到的,GAE 并不是真正用于实现您想要的服务。

    但是,也可以做类似的事情,只需配置至少 1 个空闲实例:

    • GAE 会自动为服务启动一个空闲实例,无需等待触发请求
    • 当空闲实例意外死亡或因达到其允许的生命周期结束而终止时,GAE 将再次启动一个新的空闲实例
    • 当第一个请求进入时,GAE 会将其分派给空闲实例,从而使该实例变为活动状态(为后续请求提供服务),GAE 将立即启动一个新的空闲实例以使其处于待机状态
    • 当唯一的活动实例死亡时,GAE 不会立即启动新实例,它会等到新请求进来,这就像第一个请求一样
    • 当流量足够高时,GAE 将开始将其分派给处于待机状态的空闲实例,激活它并再次在待机状态下启动一个新的空闲实例。

    【讨论】:

    • 嗨,丹,非常感谢您的回复。现在我们正在取得进展。出于某种原因,我认为标准环境用于始终运行(最少 1 个)实例,而灵活 env 用于将实例从 0 扩展到 99 甚至更多...我做了这个更改:stackoverflow.com/questions/35398216/… 下一步是检查如何我完成了:App Engine 以空 GET 请求的形式自动向 /_ah/start 发送一个启动请求。
    • 我没有考虑手动缩放,但这也可能有效。为/_ah/start添加handler,回复成功码表示实例启动成功。
    • 嗨,丹,我还需要每 24 小时触发一次 /ah_start,还是有办法让它永远运行?问候,彼得
    • 这就是我没有考虑手动缩放的原因 - GAE 通过自动/基本缩放触发它。
    • 我确实已经将它设置为手动,它应该始终有 1 个实例。请参阅我 9 月 26 日 11:49 的回复。
    猜你喜欢
    • 1970-01-01
    • 2018-03-12
    • 2018-07-01
    • 2020-11-23
    • 2018-09-24
    • 1970-01-01
    • 2019-01-30
    • 2016-09-26
    • 1970-01-01
    相关资源
    最近更新 更多