1. 程式人生 > >高併發的實現(非同步化+快取+多執行緒)

高併發的實現(非同步化+快取+多執行緒)

一年前,本人有幸負責公司核心專案的優化。隨著公司業務的增長,專案處理量也越來越大。
一次818大促甚至導致一臺伺服器滿負荷運作。於是,高併發改造被提上行程。

乾貨開始:
技術實現上有三個重點:非同步化(一般使用mq)、快取(一般使用redis)、多執行緒

一個功能併發量上大的提升,是需要業務技術上共同去努力實現的。重點在於業務上的解耦,技術上的非同步化。
假設一個核心繫統分為三個部分(前臺、中臺、後臺
1、前臺負責所有外部系統的http請求,這裡只進行簡單的邏輯處理,儘量去繞過資料庫這些笨重的服務,然後將訊息存入mq,然後通知外部系統成功結果。
2、中臺負責處理前臺mq中訊息,操作資料庫,進行一些費時的操作,所以為了提升處理速度,一般使用多執行緒 + 快取。如果處理失敗,則需要記錄下來進行重試

,重試一定次數依然失敗,則需要在後臺中顯示進行人工操作。
3、後臺負責人工異常處理

這樣設計部署的話,想要提高併發量,只需要前臺和中臺橫向擴充機器即可,所有的壓力壓在了負載均衡機器和mq中介軟體那裡。一般瓶頸都在於中介軟體那塊。
很多公司使用kafka來提升mq中介軟體的速度。但是kafka相對於其他的mq方案更加的不安全,除非你有額外的優化和宕機恢復措施

 

專案改造半年之後,因為中介軟體的瓶頸,tps只卡在五萬左右,雖然沒有達到預期的十萬大關,不過大促倒也可以輕鬆應對了。