问题描述:
产品使用Python3 + Django2 + gunicorn提供web服务,后台使用celery提供异步和定时任务,由于产品本身依赖了redis,为了让服务显得不那么臃肿,所以直接选择了redis作为celery的broker
但是在客户侧部署的时候突然被告知只能提供redis的cluster模式,不支持自己搭,且不支持rabbitmq,所以只能曲线救国
提示:官方的ISSUES明确说明不支持,虽然说在规划中,但是看上去遥遥无期
解决方案:
重新说明一下celery在产品中的作用:
- 异步任务(邮件通知、耗时计算)
- 定时任务(信息同步、计算)
替代方案:
- 异步任务:ASGI + Django3
- 定时任务:apscheduler
先说异步任务
由于之前产品设计websocket就切换到了asgi(利用channel),所以在切换的时候免去了一部分的弯路
首先要做的事情有两个:
安装:Django3(顺带djangorestframework等也可以升级一波,正常使用就行)、asg