我正在研究使用芹菜作为后台任务的django应用程序。 这些任务解析用户上传,进行一些api调用,然后将结果写入postgres数据库。芹菜与20名工人一起运行。 有时,当用户上传较大的文件(如200k记录进行处理)时,主站点变得不可用,因为芹菜任务查询会使数据库过载。
你知道我怎么解决它?
一方面 - 我可以减少芹菜工人的数量并使解析速度变慢 - 另一方面 - 当没有很多人使用主站点时,利用免费资源会很棒。
我对postgres配置不太熟悉,所以我不确定是否需要修改postgres或芹菜配置,甚至修改任务。
请告诉我你将如何解决它,或者告诉我应该在哪个方向阅读文档。
谢谢
答案 0 :(得分:0)
需要更多信息才能提供更好的答案,但需要考虑的候选人包括:
关于第二点,您可以通过查询目录来获取列表:
select count(*) from pg_stat_activity;
select count(*) from pg_locks;
答案 1 :(得分:0)
拥有这么多工作人员没有意义,当所有工作人员都处于活动状态时,数据库会过载,所以除非你能找到另一个优化,否则减少工人数量是一个好主意。当很少有人使用该网站时,这不会使事情变慢,因为并非所有工作者都被使用(为了简化,否则,数据库会被重载)。
在配置工作人员时,也许可以将您的任务拆分为oder以获得更好的粒度。比方说,您可以将任务分为三个部分:
然后,您可以将Celery队列专用于每种任务类型,并在每个队列上配置不同数量的worker。例如,将更多的worker专用于I / O绑定的API调用,并且只使用一个或两个worker进行数据库更新。
如果瓶颈在db中,这可能无法解决您的问题,但至少您可以更好地查看问题,并且您将DB任务减少到可能的最小范围(因此,在此期间没有锁定)解析例子。)