Python開發後端的速度很快,但是總有一天會為直譯語言的效能付出代價? 淺談Django高並發處理

更新於 發佈於 閱讀時間約 4 分鐘
你知道IG是用Django開發的嗎?
raw-image

正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的Go或Laravel。


Django基本部署架構圖

Django基本部署架構圖

由於 Django 是同步阻塞型框架,在基本部署架構下,同一時間只能處理一個請求。隨著使用者增加,系統確實必須考慮如何確保能夠有效處理同時到來的大量請求。

然而,解決高並發問題並不一定需要更換開發語言或框架作為首要方案。

提升高並發處理能力

  • 充分利用CPU與Memory - 增加Process/Thread
raw-image

透過uwsgi的workers參數,增加UWSGI的process數目。

uwsgi --workers 3 --socket :$UWSGI_PORT --module $UWSGI_MODULE_FILE --daemonize=/dev/null

除了增加process數目之外,還可以進一步增加thread數目,例如使用gevent。

uwsgi --workers 3 --gevent 100 --socket :$UWSGI_PORT --module $UWSGI_MODULE_FILE --daemonize /dev/null


  • 減少直接讀取資料庫 - 使用Cache
raw-image
# 安裝django redis
pip install django-redis
# 修改setting.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "your_redis_password", # 如果Redis服务器有設定密碼
}
}
}


  • 水平擴展 - WEB APP Server
raw-image

以部署在AWS為例,假如高並發的數量繼續增加,我們可以開始將NGINX、WEB APP Server(UWSGI+Django)、DB Server(Redis+Posgres or MySql)拆分至不同的EC2,並根據需求擴展WEB APP Server的數量。


  • 水平擴展 - DB Server

在一些需要同時處理大量用戶請求的場景下,如電商搶購疫苗預約,大量用戶可能會同時讀取和更新商品或疫苗庫存。為了保證不會發生超量銷售或預約,不僅需要資料庫的水平擴展來提升處理能力,同時還必須設計有效的庫存同步機制以確保數據的一致性。通常,只有資源充足的大公司才有能力完成這一設計。


語言成為效能瓶頸 - 密集運算

當服務需要進行密集的數據運算時,使用Go lang或是PHP雖然處理速度上優於Python,但是仍然難以跟C++或Java等語言相比,因此這類型的服務通常會選擇另外撰寫專門處理數據運算的外部程式。


結論

Instagram 是最著名的 Django 專案之一。儘管 Instagram 的開發團隊對 Django 的原生程式碼進行了多項修改,比如不使用 ORM 並引入了 GraphQL 來處理圖像和影片數據,但不可否認的是,Instagram 仍然基於 Django 框架處理了大量的業務邏輯。

通常來說,通過充分利用 CPU 和記憶體資源、減少對資料庫的直接讀取,就能顯著提高系統處理高並發的能力。如果系統不涉及到計算密集型的需求,大膽放心的使用自己喜歡的框架進行開發吧!

留言
avatar-img
留言分享你的想法!
avatar-img
再寫5分鐘
66會員
19內容數
探索自我實現的小角落。沒有高高在上的教條,只有真實的分享和心得。
再寫5分鐘的其他內容
2024/07/02
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
2024/07/02
在前一篇我們已經成功地建立簽核表單及簽核節點並關聯回請假表單,而本篇會接著介紹如何管理簽核節點狀態並同步更新簽核表單狀態。
Thumbnail
2024/07/02
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
2024/07/02
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
2024/06/15
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
Thumbnail
2024/06/15
《Future GPX Cyber Formula》閃電霹靂車是一部關於AI賽車的動漫作品,講述了主角與AI合作的故事。文章引述了動漫中的情節與角色,突出了AI協助駕駛者的功能。全文帶有熱血激情、深度思考和特殊概念。
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
打開 jupyter notebook 寫一段 python 程式,可以完成五花八門的工作,這是玩程式最簡便的方式,其中可以獲得很多快樂,在現今這種資訊發達的時代,幾乎沒有門檻,只要願意,人人可享用。 下一步,希望程式可以隨時待命聽我吩咐,不想每次都要開電腦,啟動開發環境,只為完成一個重複性高
Thumbnail
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
本文介紹瞭如何在後端系統開發時設計不同表單的簽核流程,包括請假表單和採購表單。以及如何動態生成簽核表單,並建立簽核節點。另外還介紹瞭如何利用繼承來簡化簽核流程的設定。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
什麼是Python python是電腦程式語言的一種,如同python官方網站上的介紹 "Python是一種程式語,可讓你更快速地工作並更有效的整合系統"。簡單地說,就是你可用python這個程式語言去告訴電腦你想要作什麼,讓電腦來幫你完成你要作的事情。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
Python是一種易學且功能強大的程式語言,具有直譯、動態語法等特性,並擁有豐富的標準庫。它在各領域如Web開發、數據科學和人工智慧等得到廣泛應用,並被許多大公司如Google和Facebook等使用。Python還有強大的框架、豐富的交互機能、和龐大的社區。
Thumbnail
你知道IG是用Django開發的嗎? 正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的GO或Laravel。
Thumbnail
你知道IG是用Django開發的嗎? 正在學習或使用Django、Flask框架開發後端的你,是否也常在享受Python語法的舒適之餘,仍然煩惱著是否該學習效率更好的GO或Laravel。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
今天來介紹python的函式 函式在python中是非常重要的一環,因為到了後期,程式會越來越複雜。 而函式可以想成是容易管理的小程式,當我們需要使用時,只需呼叫即可。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
Thumbnail
軟體系統的發展歷程大多相似,首重解決基本需求、提供操作介面,進而提升安全性、擴充功能、優化操作。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News