高併發的實現(非同步化+快取+多執行緒)
阿新 • • 發佈:2018-11-20
一年前,本人有幸負責公司核心專案的優化。隨著公司業務的增長,專案處理量也越來越大。
一次818大促甚至導致一臺伺服器滿負荷運作。於是,高併發改造被提上行程。
乾貨開始:
技術實現上有三個重點:非同步化(一般使用mq)、快取(一般使用redis)、多執行緒
一個功能併發量上大的提升,是需要業務和技術上共同去努力實現的。重點在於業務上的解耦,技術上的非同步化。
假設一個核心繫統分為三個部分(前臺、中臺、後臺)
1、前臺負責所有外部系統的http請求,這裡只進行簡單的邏輯處理,儘量去繞過資料庫這些笨重的服務,然後將訊息存入mq,然後通知外部系統成功結果。
2、中臺負責處理前臺mq中訊息,操作資料庫,進行一些費時的操作,所以為了提升處理速度,一般使用多執行緒 + 快取。如果處理失敗,則需要記錄下來進行重試
3、後臺負責人工異常處理。
這樣設計部署的話,想要提高併發量,只需要前臺和中臺橫向擴充機器即可,所有的壓力壓在了負載均衡機器和mq中介軟體那裡。一般瓶頸都在於中介軟體那塊。
很多公司使用kafka來提升mq中介軟體的速度。但是kafka相對於其他的mq方案更加的不安全,除非你有額外的優化和宕機恢復措施。
專案改造半年之後,因為中介軟體的瓶頸,tps只卡在五萬左右,雖然沒有達到預期的十萬大關,不過大促倒也可以輕鬆應對了。