python 高併發的解決方案

2021-10-05 20:36:24 字數 1481 閱讀 5283

mysql是持久化儲存,存放在磁碟裡面,檢索的話,會涉及到一定的io,為了解決這個瓶頸,於是出現了快取,比如現在常用的 redis。首先,使用者訪問快取,如果未命中,就去訪問mysql,之後將mysql中的資料複製到快取中。

redis是快取,並且是駐留在記憶體中執行的,這大大提公升了高資料量web訪問的訪問速度。redis提供了大量的資料結構,比如string、list、set、hashset、sorted set這些,之後使用者的訪問就能直接從redis的記憶體中去取資料了,那記憶體的讀取速度遠遠大於硬碟

1.sql的優化

2.索引的優化

3.分庫分表

4.讀寫分離

例如:django+uwsgi+nginx

詳細部署內容這裡

celery:就是乙個分布式非同步的解決方案

這裡詳細的celery解釋

例如:在一些併發量更多的地方,該用golang語言編寫

參考**

檢視cpu利用率;如果接近100%,說明cpu是瓶頸,需要增加資源。如果cpu看起來很空閒而依然存在請求超時等問題,可以top1檢視各個cpu的使用情況,如果知識其中的乙個cpu跑滿了,說明可以通過多程序去處理一下

檢視磁碟top命令顯示,32.0 wa;**中有對大檔案的讀取,

優化方式:

公升級,換機械盤/磁碟為固態盤/ssd hdd --> ssd

使用磁碟陣列(raid) ,硬體raid卡:連線多個磁碟

2.1 raid 0

| 2.1.1 兩個以上磁碟併聯

2.1.2 速度快

2.1.3 無容錯能力

2.2 raid 1

2.2.1 兩組以上磁碟相互做映象

2.2.2 理論上速度等於硬碟倍數

2.2.3 容錯能力強

2.3 raid 5

2.3.1 至少需要3個盤

2.3.2 資料及相對應奇偶校驗資訊,儲存到各磁碟上

2.3.3 速度快

2.3.4 可容錯

redis等建立快取

3.1 快取穿透

3.1.1 解決的問題:快取和資料庫都找不到key1

3.1.2 解決方式:db查詢為空也寫快取;提前過濾

3.2 快取失效(快取雪崩)

3.2.1 解決:設定隨機失效時間;控制讀db執行緒

檢視網路命令:iftop tx:傳送的流量,sx:接收的流量

檢視: sysctl -a # 檢視目前的引數

修改:/etc/sysctl.conf 執行 sysctl -p

集群能力

rr(round robin) 輪詢演算法

lc(least conections) 最小連線數

源位址hash : hash(客戶端ip) --> 伺服器列表取模 --> 選擇伺服器

請求波動大

峰值請求

python高併發的解決方案

簡單說就是把靜態資源放到別人伺服器上 全稱 content delivery network或content ddistribute network,即內容分發網路 基本思路 盡可能避開網際網路上有可能影響資料傳輸速度和穩定性的瓶頸和環節,使內容傳輸的更快 更穩定。通過在網路各處放置節點伺服器所構成...

高併發解決方案

時常看到高併發的問題,但高併發其實是最不需要考慮的東西。為何,他虛無縹緲,很少有 真的需要這些東西,而且其中很多技術,其實你已經在用了。有這個意識就夠了,不需要時刻盯著這個問題。只有很少的 真的能達到高併發。簡單做乙個歸納,從低成本 高效能和高擴張性的角度來說有如下處理方案 1 html靜態化 2 ...

高併發解決方案

將靜態資源分離到靜態站,對靜態資源的請求打到靜態站,增加動態站的請求處理量 頁面靜態化是將程式生成的頁面儲存起來,使用模板技術如freemarker和velocity生成靜態頁面 nginx快取頁面資訊,再次請求時直接從快取中獲取,不需要重新生成,頁面快取記憶體中,提高訪問速度 具有相同處理功能的伺...