node.js - Google App Engine 实例 - 我的代码可以确定实例数据吗?
问题描述
我有一个使用发送消息的 CRON 进程运行的 Node.JS GAE 服务。GAE 启动多个实例,从而导致发送多条消息。
理想情况下,我的代码可以“看到”它是一个额外的实例并抑制消息?我的代码有什么办法可以确定这一点吗?否则我将不得不通过某种外部资源(共享内存/数据库等)来协调实例......
解决方案
虽然可以获得有关正在运行的其他实例的信息(例如通过Admin APIapps.services.versions.instances.list
方法),但仅凭该信息不足以正确实现您寻求的逻辑 - 如果您的时间有多个实例正在运行依赖于实例的“CRON 进程”触发逻辑将在所有实例上产生相同的结果,您仍然需要一些协调来确定哪个正在运行的实例是应该发送消息的“主”实例,很可能基于一些外部资源。如果您考虑到实例随时死亡/启动的可能性,包括在 CRON 进程正在进行时,这并不是微不足道的。
我建议改用 GAE cron 服务(Scheduling
在您的特定运行时的文档页面的左侧导航栏中查找包含的部分名称),或者,如果您愿意,可以使用Cloud Tasks,这两者都不会增加工作量,具体取决于运行实例的数量,从而完全避免了这个问题。
请注意,如果处理 cron 请求失败,您仍然需要注意可能的重试,您的 cron 作业应该是幂等的。
推荐阅读
- caching - 当他们说它们已缓存时,为什么从我的服务器下载图像?
- python - 如何在 tkinter 树视图中使用 fill=BOTH?
- flutter - Flutter - Navigator.pop(context) 调用我们要离开的屏幕的方法
- python - ModelForm 没有指定模型类。[django]
- flutter - Flutter 中的泛型类
- rust - Rust:对生命周期的错误使用
- python - 使用 Elastic Beanstalk 部署 Flask 应用程序时遇到问题
- python - 在python中使用硒通过浏览器保存图像
- java - 更新 AWS Elastic Beanstalk 环境:javax/xml/bind/JAXBException
- c# - 使 RB 运动更平滑/弯曲。C#。统一