在前兩篇文章中,我們探討了 FastAPI 內建的 BackgroundTasks
和 Thread Pool
機制。BackgroundTasks
簡單卻不可靠,而 Thread Pool
解決了阻塞問題,但任務的生命週期依然與 Web 應用程式綁在一起。
這些內建工具在許多情境下都已足夠,但當你的應用規模擴大,遇到以下挑戰時,它們就顯得力不從心了:
為了解決這些問題,我們需要引入一個更強大的架構模式:任務佇列 (Task Queue)。
任務佇列系統將「任務的發布者」與「任務的執行者」徹底分開。它主要由三個角色組成:
生產者 (Producer)
中間人 (Broker)
消費者 (Consumer / Worker)
(圖片來源)
這個架構帶來了巨大的好處:
在 Python 生態中,Celery 就是實現上述架構最知名、功能也最全面的分散式任務佇列框架。它扮演了生產者端的 Client 和消費者端的 Worker 角色,並能與 Redis 或 RabbitMQ 等 Broker 無縫協作。
從 BackgroundTasks
到 Thread Pool
,再到今天介紹的任務佇列,我們可以清楚地看到任務管理方案的演進軌跡:
任務佇列的核心價值在於將「任務發布」與「任務執行」徹底分離。透過 Producer、Broker、Consumer 三角架構,我們得到了一個既強壯又靈活的分散式任務處理系統。當你的應用面臨高負載、需要容錯機制、或者想要水平擴展背景任務處理能力時,任務佇列就是非常值得考慮的選擇。
在了解了「為什麼」需要任務佇列之後,下一篇文章,我們將親自動手,將 Celery 與 Redis 整合進我們的 FastAPI 專案中。