1. 程式人生 > >重構系統的套路-提高並發能力

重構系統的套路-提高並發能力

線程 容量 lock 異步 異步處理 活動 緩存 完全 簡單

提高系統並發能力,總結起來有三點:異步,緩存,並行。

異步

比如我們在某段業務邏輯中加了一個同步寫kafka的操作,tp99瞬間多了30毫秒,這樣在整個監控曲線看起來非常紮眼,於是我們需要將這個同步改成異步。
對於老系統需要在業務進行梳理,如果業務場景中不關心返回值,這樣完全可以做成異步。
如果業務關心返回值,比如訂單邏輯,很多下遊服務需要傳入本次主訂單ID與下遊服務進行連接,這樣寫主訂單就必須變成了一個同步邏輯,但是主要關心的還是這個OrderId,我們可以建立一個OrderId生成器,這樣單獨的一個OrderId服務性能更好,可以將整個業務邏輯串起來。

緩存

為了提升整個邏輯鏈路的響應時間,我們應該將數據離訪問更近,這樣響應更快。
有了緩存,我們可能產生某種依賴,將盡可能多的數據放入緩存,而沒有好好的進行梳理和分析。
這樣緩存數據可能越來越大,內存成本越來越高,當一段促銷造成的流量越來越大,如果沒有進行合理的擴容,則會造成想不到的問題。
比如我們的營銷活動放到redis做緩存,每個營銷活動其實是有很多聚合信息,並且每個活動有失效期的,這樣比較適合緩存場景的,但是某天產品同學的運營策略變了,在雙11我們需要提前做一些預熱,這樣用戶領取的優惠券的周期就變長了,如果簡單的是放到了redis,其實整體的活動信息在高峰來時,原有的redis容量就造成了一定的性能影響。

並行

下遊的服務我們通過建立線程池,進行異步處理,於是我們需要關心設置合理的線程池。
梳理系統的代碼,將很多同步的for,while的循環改成基於Future的同步模型,提升整體並行度,達到一定的性能提升。

重構系統的套路-提高並發能力