我面临这个问题,我有一个python脚本,需要每天凌晨00:00在谷歌云上运行,可能使用谷歌云运行,我想知道的是一些非常具体的东西,我找不到一个很好的答案,事情是……哪一种方法在技术上是最好的?让云在特定的时间触发特定的脚本是不是更好?或者让一个始终运行的容器等待(使用锁)一天中的某个时间,然后运行一个函数。脚本面临的任务相当繁重,它扫描图片并试图从中获取纯文本(图片是从instagram页面下载的)。
因为我从来没有在云环境中实现过这样的东西,所以我需要知道的是:
"锁等待"可以有多重?脚本与云处理的调度程序(例如Google cloud scheduler),从经济上讲,在做像我的脚本这样繁重的任务时,它有什么关系吗?
我认为云调度程序可能是一个很好的第一个解决方案/方法。例如,它可以发出一些http请求,或者将消息推送到pubsub(它可以用作脚本的pull或push触发器)。
在脚本下,我理解任何所需的功能。它可以通过许多不同的方式实现——云功能(或一组不同的云功能一起工作以存档一个目标)、云运行或其他任何方式。
我通常的个人偏好是模式Cloud Scheduler =>PubSub Topic =>push Cloud功能。其他人可能更喜欢其他的变化。
解决方案的选择(包括"脚本");我认为,在你的情况下,这取决于功能性和非功能性需求、环境、范围、开发和维护解决方案的人员的技能和知识、时间、资本支出和运营支出预算等。
我不知道这在技术上是不是最好的,但是我会选择Cloud Run和Cloud Scheduler的组合(我们目前正在为我们的一个项目运行这个组合)。
Cloud Run,因为你的脚本似乎每天只运行一次,Cloud Run基本上会在没有服务请求时进入睡眠状态。这使得总体成本更低,即当它接收到请求时唤醒,执行请求并返回睡眠(当它处于睡眠状态时不收费)。
Cloud Scheduler在凌晨00:00触发Cloud Run上的url端点。顾名思义- Scheduler -调度作业在特定时间运行。
我还建议保护你的url端点(将部署在Cloud Run上的那个)。这确保只有你的云调度程序触发url(有人不能"错误地"通过互联网访问url并触发作业,除非他们有必要的特权)。我们有一篇关于如何做到这一点的博客文章。