[英]django-celery infrastructure over multiple servers, broker is redis
當前,我們在單個雲服務器上進行了所有設置,包括:
現在,我們正在考慮將主要組件分解為單獨的服務器,例如單獨的數據庫服務器,媒體文件的單獨存儲,負載均衡器后面的Web服務器。 原因是不必為一台重型服務器付費,而不必使用負載平衡器按需創建服務器,從而降低成本並提高整體速度。
我真的只是對芹菜感到困惑,有人在負載均衡器后面的多個生產服務器上使用過芹菜嗎? 任何指導將不勝感激。
考慮一個小用例,它是當前在單台服務器上的完成方式(混淆是當我們使用多台服務器時如何完成):
abc.pptx
文件->引用存儲在數據庫中->存儲在服務器磁盤上 docsplit
軟件將其轉換為pdf 考慮到上述用例,您如何設置多個可以執行相同功能的Web服務器?
可以從所有協作服務器訪問的共享存儲將極大地簡化您的處理。 通過這種設計,您可以將工作分配到更多服務器上,而不必擔心下一步處理將在哪個服務器上完成。
如果您可以使用某些雲存儲,例如AWS S3,請使用它。
如果您的服務器也運行在AWS上,則無需為同一區域內的流量付費,並且傳輸速度非常快。
主要優點是,您的數據可在同一存儲桶/密鑰名稱下從所有服務器獲得,因此您不必費心誰在處理哪個文件,因為所有文件都在S3上共享存儲。
注意:如果需要清除舊文件,甚至可以在Give bucket上設置一些策略文件,例如刪除1天或1周以上的文件。
還有更多選擇
對於小文件,您甚至可以使用Redis,但是由於種種原因,這種解決方案很少見。
Celery實際上使這變得非常簡單,因為您已經將任務放在隊列中了。 隨着更多工人的變化,所有工人都將接下隊列中的下一個任務,因此多個工人可以一次處理,每個人都在自己的計算機上進行處理。
這包括三個部分,您已經擁有其中之一。
設置方法如下:
def my_view(request): # ... deal with storing the file file_in_db = store_file(request) my_process_file_task.delay(file_in_db.id) # Use PK of DB record # do rest of view logic...
python manage.py celery worker --loglevel=INFO -Q default -E
然后,隨着添加更多計算機,您將擁有更多工人,並且工作將在它們之間分配。
需要確保的關鍵事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.