redis 如何在GCP上部署RQ / Celery工作人员?

bvk5enib  于 9个月前  发布在  Redis
关注(0)|答案(1)|浏览(106)

我有一个Flask应用程序,已部署(使用Dockerfile)到Google Cloud Run。该应用程序的结构与Flask Mega Tutorial非常相似。它使用在Cloud SQL上运行的Postgres数据库。
应用程序需要处理后台任务。似乎CeleryRedis Queue是最常见的方法。我不想使用Cloud Tasks,因为它破坏了12-factor app范式中的dev/prod奇偶校验规则。
Redis队列很容易在我的本地机器上启动和运行,但我找不到关于如何在Cloud Run上运行Flask应用程序时使用Redis队列的最佳实践指南。
我决定为我的Redis示例使用Google的MyStore,但现在我不确定运行Redis worker的最佳方式是什么。我希望这些worker能够随着Flask服务器向Redis队列添加更多任务而扩展(当越来越多的HTTP请求发出时,Cloud Run会扩展示例)。现在,我正在考虑部署一个worker(我的Flask应用程序的任务函数副本)到App Engine,但这似乎不是正确的解决方案。
对于部署RQ / celery工作人员,人们有什么建议?我很乐意完全改变我的部署策略(和平台),以实现一个简单的、可伸缩的架构,可以在本地开发设置中轻松复制。

ef1yzkbh

ef1yzkbh1#

我已经在GCP上使用Flask应用程序实现了Redis队列。要做到这一点,你必须遵循几个步骤:
1.以一种可以在单个容器中运行多个CMD命令的方式更新docker文件。一个用于运行Flask(后端),另一个用于工作进程(如rq worker /python worker.py)。您应该将这两个命令放在run.sh文件中,并在docker中指定chmod命令以使文件可执行。然后在docker中的CMD行中放置文件名'CMD ["./run.sh”'。
1.允许CPU分配始终在GCP项目设置选项。您可以在cloud run中编辑构建或部署选项。默认情况下,当响应从后端(Flask)发送回来时,CPU会被释放,并且Redis队列操作在后台无法正常工作,主要是当它们需要互联网或需要任何数据库连接时。
1.如果Redis无法通过放入requirements.txt文件来使用,那么您也可以在docker文件中指定使用“apt-get install your-worker-package”。

相关问题