首页 > 解决方案 > Google App Engine 实例 - 我的代码可以确定实例数据吗?

问题描述

我有一个使用发送消息的 CRON 进程运行的 Node.JS GAE 服务。GAE 启动多个实例,从而导致发送多条消息。

理想情况下,我的代码可以“看到”它是一个额外的实例并抑制消息?我的代码有什么办法可以确定这一点吗?否则我将不得不通过某种外部资源(共享内存/数据库等)来协调实例......

标签: node.jsgoogle-app-enginegoogle-cloud-platformcron

解决方案


虽然可以获得有关正在运行的其他实例的信息(例如通过Admin APIapps.services.versions.instances.list方法),但仅凭该信息不足以正确实现您寻求的逻辑 - 如果您的时间有多个实例正在运行依赖于实例的“CRON 进程”触发逻辑将在所有实例上产生相同的结果,您仍然需要一些协调来确定哪个正在运行的实例是应该发送消息的“主”实例,很可能基于一些外部资源。如果您考虑到实例随时死亡/启动的可能性,包括在 CRON 进程正在进行时,这并不是微不足道的。

我建议改用 GAE cron 服务(Scheduling在您的特定运行时的文档页面的左侧导航栏中查找包含的部分名称),或者,如果您愿意,可以使用Cloud Tasks,这两者都不会增加工作量,具体取决于运行实例的数量,从而完全避免了这个问题。

请注意,如果处理 cron 请求失败,您仍然需要注意可能的重试,您的 cron 作业应该是幂等的。


推荐阅读