代碼改變世界

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

2018-06-28 10:29 春哥大魔王 閱讀(...) 評論(...) 編輯 收藏

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

異步

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

緩存

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

并行

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

四川金7乐历史开奖号码查询