技術視頻觀后感之《淘寶應用架構升級——反應式架構的探索與實踐》

視頻地址:https://time.geekbang.org/dailylesson/detail/100033220

(給極客時間做個免費廣告:上面這個視頻來自極客時間的《每日一課》。最近一段時間開通極客時間企業賬號可以免費享受兩個月的《每日一課》服務)

這個技術視頻是介紹淘寶是如何落地全異步化技術,以及獲得的收益,還有關于自適應負載調節方面的內容。完整的 PPT 可以在這里(https://www.infoq.cn/article/P1S7UOYH-pQZWa53zSJL,文章末尾)下載。

一、內容大綱

下面是我總結的這個技術視頻的內容大綱:

  • 實施全異步化改造的效果
  • 全異步化改造的背景
  • 全異步化的技術選型
  • Reactive 技術的選型
  • Reactive 技術的落地難點及解決方案
  • 全異步化的延伸:負載自適應

二、具體內容

接下來大致介紹一下視頻的內容,其中會加入我的解釋、看法和思考。

1. 全異步化技術實施效果和背景

首先介紹的是淘寶在實施全異步化改造后的效果。最先看到的是 RT 的降低和 QPS 提升。全異步化在平時不會降低 RT、提高 QPS。但異步化有助于提升系統的兩大能力:Elastic 和 Resilient,前者反映了系統應對壓力的表現,后者反映了系統應對故障的表現。在大促時,系統會承受更大的壓力、遭受更多的故障。在這種情況下,全異步化的系統會表現出比傳統同步方式的系統有更低的 RT、更高的 QPS。

異步化效果

除了提高資源利用率和并發能力,全異步化還能實現鏈路上下游的故障隔離。

背景

2. 全異步化技術選型和落地

如何實現全異步化?Future、Callback 都是老技術,不完美。Future 在異步方面改變有限,Callback 在編排能力方面有 Callback Hell 這樣的嚴重短板。Project Loom 愿景很美好,但距離發布還有好幾年的時間(不能說跳票,畢竟也從來沒宣布什么時候發布)。目前實現全異步化最理想的技術就是 Reactive Streams(https://www.reactive-streams.org/)。

全異步化技術選型.png

淘寶選擇 RxJava 實現 Reactive。最大的原因我猜是 RxJava 技術出現較早。如果我現在選擇,會更傾向于 Project Reactor。畢竟最近兩年 Netflix 將很多開源技術停止了維護,所以選擇一個由成熟強大的開源社區維護的技術更有利于長遠發展。至于穩定性和普及性,這兩年隨著 Spring 5 和 Spring Boot 2 的成熟,以及整個 Spring 技術生態全面支持 Reactive,也不會是問題。

技術選型

但技術選型只是第一步,落地實施 Reactive 有非常多的困難。困難分兩部分:技術和推廣。

技術難點

先說技術方面,落地 Reactive 主要有如下幾個難點:

  1. 中間件改造:如何是 RPC、MQ、鏈路跟蹤、數據庫等中間件支持 Reactive 技術
  2. 線程模型:統一管理線程設置
  3. 防止線程阻塞:阻塞 Reactive 核心線程非常危險
  4. 上下文傳遞:ThreadLocal 不再有效

這四點中,我認為以1、3、4點最關鍵。

Reactive 技術關鍵點.png

第一點:中間件改造

目前 Spring 幫我們做了很多,如 Spring MVC、Spring Data、Spring Security 等都已支持 Reactive 技術。但是像 Dubbo、RocketMQ、MySQL 等技術對 Reactive 的成熟支持還需時日。因此,目前落地 Reactive 的項目對所采用的技術還是有所限制。

第三點:防止線程阻塞

Reactive 技術所使用的線程數一般只需要 CPU 核心數的兩倍,這也是默認配置。這樣,如果一旦這些線程被阻塞,那整個系統很快就會失去響應,后果很嚴重。所以,在采用 Reactive 技術之后,線程阻塞要徹底避免。但是這又是一件防不勝防的事情,自己的代碼尚且不容易完全避免引入阻塞,又如何避免其他人寫的組件和第三方類庫所引入的阻塞呢?

在線程阻塞檢查技術方面,主要有以下幾種:

阻塞檢測.png

最近 Project Reactor 提供了一個新解決方案:BlockHound 技術(https://github.com/reactor/BlockHound)。上面的表格中似乎沒有提到 BlockHound,后續我會跟進研究。

第四點:上下文傳遞

ThreadLocal 在 Java 技術中廣泛使用,緩存、事務、鏈路跟蹤,還有很多其它技術都采用了 ThreadLocal。但使用 Reactive 技術后,上下文信息就不能在 ThreadLocal 中傳遞了。這方面其實主要也是設計中間件技術的改造,但也有很多業務系統直接使用了 ThreadLocal,同樣需要改造。這部分工作成本不低。

推廣難點

技術難點主要是中間件團隊的工作,推廣部分主要是業務團隊的工作。要想推廣 Reactive 技術,首先要讓團隊從上至下認識到 Reactive 技術的好處。同時,還要讓直接參與改造的同學能從 Reactive 技術改造的工作中感到成就感。

這里我認為一個比較合適的切入點是全鏈路壓測和全鏈路故障演練。通過壓測和故障演練,我們能找到系統目前所存在的瓶頸和問題,針對這些瓶頸和問題,通過實施 Reactive 改造,讓大家看到收益。這樣可為 Reactive 技術改造鋪平道路。

思想上鋪平了道路,還有其它難點。其中最大的難點是 Reactive 技術對業務邏輯不友好。這方面在我之前的文章中有介紹。其中一個解決辦法就是引入 Kotlin Coroutine 技術。

3. 自適應負載調節

柔性架構

即便實施了 Reactive 技術改造,提升了系統的資源利用率和彈性,實現了上下游故障隔離,但在硬件條件不變的情況下,系統能力終歸是有限的。這便是我們為何要做全鏈路壓測的原因。在大促來臨之前,我們需要通過全鏈路壓測得知系統的瓶頸在哪里。但事事難料,大促實際流量總是很難估計準的,換言之就是不確定性。

自適應負載調節.png

這些不確定性綜合在一起,使得資源評估變成一個很難做好的事情。一個服務有多個接口,這些接口在大促期間流量是多少?這些接口流量的比例是多少?系統能力是多少?我應該為大促準備多少服務資源?這些服務所依賴的服務的這些情況又是如何?

上面這些問題綜合在一起,當系統和業務越來越復雜之后,便會變得不可解。所以,我們需要系統具備自適應負載的能力。

接下來視頻介紹的是如何實現負載自適應。

柔性架構后續展望.png

這里面最關鍵的是預測算法,預測算法參考了系統自動化控制相關技術,好壞可以從三個維度評估(這里照抄一下原文):

  • 穩定性:有壓力時,經過一段時間,CPU 最終趨于某個值附近穩定,而不是發散的
  • 準確性:處于穩定狀態時,CPU 的穩定性值與目標值的誤差越小越好
  • 響應性:有壓力時,從一個穩定狀態過渡到另一個穩定狀態的抖動服務和時間越小越好

負載自適應,簡單說就是將過去容量評估的工作變為自動化、智能化,再結合系統自動伸縮、Reactive 技術的背壓、系統自動化配置等技術,使得系統對大流量活動的支持更輕松、更穩定。

如果想進一步了解負載自適應,可閱讀這篇文章:淘寶如何保障業務穩定性——諾亞(Noah)自適應流控 https://mp.weixin.qq.com/s/ePWqUiZcEy52mUHb4WbcSA

三、后記:后續思考

阿里的這個分享可以說是干貨滿滿。From Reactive, More Than Reactive。互聯網公司在面對業務的快速變化、流量壓力的難以預測、故障的突如其來等種種挑戰時,簡單增加集群規模,配置靜態的限流熔斷,是無法滿足業務發展要求的。這就是全異步化和負載自適應的用武之地。

回到我目前所負責的工作,Reactive 技術和負載自適應這兩方面,對于前者,計劃在上半年對一個業務接口進行 Reactive 技術改造。而對于負載自適應,會進行初步的思考和探索。但因為要補的課還有很多,所以具體實施計劃尚不確定。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容