我最近将我的网站移到了Google Cloud Run。
问题是,我还需要移动几个cron作业,这些作业每天在容器内运行Django命令。如果我不想为始终运行节点实例的完整Kubernetes集群付费,那么首选的方法是什么?
我希望先运行任务,然后再降低服务器速度,就像Cloud Run在收到传入请求时所做的那样。我已经搜索了所有文档,但是在为不需要在Google Cloud中使用基础服务器的容器内的长期运行任务找到正确的解决方案时遇到了麻烦。
有人可以指出正确的方向吗?
Cloud Run请求超时限制为15分钟。
Cloud Functions函数超时限制为540秒。
对于长时间运行任务在需要时上下旋转计算实例是更可取的选择。
如何调度的示例,自动运行和停止计算实例的解释很好:Scheduling compute instances with Cloud Scheduler
总而言之:实际实例的启动/停止由Cloud Functions
执行。时间表上的Cloud Scheduler
将所需的任务发布到Cloud Pub/Sub
队列中,从而触发这些功能。您在主逻辑末尾的代码也可以将消息发布到Cloud Pub/Sub
以运行Stop this instance
任务。
如何在Django中处理任务?
可以是相同的django应用程序>]从wsgi服务器开始处理传入的请求(如常规django站点),但请求/响应/其他超时增加,wsgi工作者的寿命很长...-在这种情况下,任务是对Django视图的常规HTTP请求
它可能只是一个script
您可能还想为任务传递其他参数
Cloud Pub/Sub
任务和一个带有自定义参数的Start instance
任务发布到main logic
,并拉出您的代码从Pub/Sub
首先更多django-native-使用Celery并将芹菜工作者作为单独的Compute Instance
[一种可能的选择,仅使用一名Celery工作者,而没有其他所有部分(即,经纪人(没有官方内置的Cloud Pub / Sub支持)),以及将任务从Cloud Pub / Sub中拉出/推入)
@periodic_task
以运行,即每30秒运行一次Stop this instance
还有Cloud Tasks