我有一个容器,我想每5秒运行一次。我第一次尝试的是《Cloud Run》,但它的关卡粒度非常小。谷歌有没有其他产品可以如此频繁地运行容器?
另一个值得拥有的优点是,我的容器支持在缓存文件中绑定,它可以在下次运行时使用,以避免进行一些调用。理想情况下,我也可以将其绑定。
似乎云跑不是一个很好的候选,因为它没有提供这些功能。
对我来说,我似乎有两个其他的选择:
- 使用一个计算实例,完全由我自己运行容器,自己调度它,例如使用systemd计时器/cron。
- GKE使用。我没怎么探索过这个选项,但感觉有点过头了。
关于这些选项或一些我没有考虑过的选项的任何建议将不胜感激。
如果这是您在GKE集群上唯一要做的事情,那么GKE标准是多余的。但是,如果系统的其他部分已经有了GKE集群,那么GKE就开始变得有吸引力了。所以我同意这对你来说可能有点过分。你可以看看GKE Autopilot,因为它消除了管理GKE集群的大部分复杂性。
另一个替代方案可以是Cloud Scheduler,它直接调用Cloud Run服务的HTTP端点或发送pubsub消息。云运行服务要么是发布/订阅触发,要么是基于HTTP的。您可以将缓存存储在内存存储(快速)或GCS(较慢)中。
实际上,没有解决方案可以调用低于分钟粒度的API(这是Cloud Scheduler的限制)。但是,您可以创建一个体系结构,使您能够实现
- 创建HTTP云任务队列
- 创建一个云功能(或云运行),在您的云任务队列中创建12个任务,并使用5秒延迟的ScheduleTime。HTTP目标是云运行服务。
- 创建一个云调度程序,每分钟调用一次您的云功能(或云运行)
就像这样,每5秒触发一个任务并调用Cloud Run服务。
根据您的配置,相同的Cloud Run实例可以每5秒调用一次。因为它是同一个实例,你可以保存在内存中(或者在文件中,也存储在Cloud Run实例内存中),所以缓存数据。
减少后续Cloud Run调用的延迟(在较长的冷启动之后,因为必须首先缓存数据)是一个很好的实践
云任务,云功能,云运行的组合;解决你的2个要求(在内存缓存也)。
注意:我正在努力也提供一个类似的解决方案与云工作流(而不是云任务),但我正在等待一个功能发布来测试它。请继续关注!