看京東系統架構師如何讓笨重的架構變得靈巧

隨著業務的復雜性增大、系統吞吐量增長,所有功能統一部署難度加大,各個功能模塊相互影響,使系統變的笨重且脆弱;

因此需要對業務進行拆分、對系統進行解耦、對系統內部架構升級,來提升系統容量及健壯性。

接下來主要分兩部分介紹:系統拆分與結構演變;文章首發:公眾號java大牛愛好者

系統拆分

系統拆分從資源角度分為:應用拆分和數據庫拆分;

從采用的先后順序可分為:水平擴展、垂直拆分、業務拆分、水平拆分;

圖1 系統分解原則

1、水平擴展

水平擴展是最初始的解決的手段,也是系統遇到瓶頸的首選方案,主要從以下兩個方面擴展:

  • 應用加實例,搞集群,把系統吞吐量擴上去。

  • 數據庫利用主從進行讀寫分離,數據庫其實是系統最應該保護的資源。

2、垂直拆分

垂直拆分才是真正開始拆分系統,主要是從業務功能角度拆分。如拆出用戶系統、商品系統、交易系統等。

為了解決拆分后各個子系統之間相互依賴調用的問題,這時會引入服務調用治理。

系統復雜度有所加大,但系統基本解耦,穩定性相對提高,做好降級就能避免因其它系統功能異常導致系統崩潰。

業務對應的庫也會按照對應的業務進行拆分出用戶庫、商品庫、交易庫等。

3、業務拆分

業務拆分主要是針對應用層面按功能特點拆分,如交易拆分出:購物車、結算頁、訂單、秒殺等系統。然后根據業務的特點,針對性做處理,如秒殺系統,由于同時參加秒殺的商品有限,可以提前把商品信息加載到JVM緩存中,自身減少外部調用提高性能,同時商品系統也減輕壓力。

數據庫拆分也可以分為幾步:垂直分表、垂直分庫、水平分表、水平分庫分表;

垂直分表是指大表拆多張小表,可以根據字段更新或查詢頻次拆分;

圖2 商品表拆分

垂直分庫是指按業務拆庫,如拆出訂單庫、商品庫、用戶庫等

水平分表是解決數據量大,把一張表拆成多張表;

水平分庫分表是更進一步拆分表;

圖3 分庫分表

4、水平拆分

服務分層,系統服務積木化,拆分功能與非功能系統,以及業務組合的系統,如最近比較火的大中臺或前臺拆分;

中臺為積木組件,承擔服務功能輸出。前臺更多的是組合積木服務,及時響應業務發展,如在電商網站單品頁能看見主圖、價格、庫存、優惠券或推薦等信息,都是組合各積木組件呈現。

數據庫也可以進行冷熱數據分離;

過期或過季商品可以歸檔,比如諾基亞3210手機,早已經停產且沒有銷售;

用戶查看訂單時,更多的只是查看最近1、2年信息,2年前數據查看量少,在存儲設計時可以區別處理。

結構演變

結構演變主要是隨著系統復雜度增加及對性能要求提高而不得不做的系統內部架構升級;

早期系統基本是應用直聯數據庫,但在系統進行拆分后,功能本系統不能單獨完成,需要依賴其它系統,就出現遠程調用;

圖4 早期應用結構

隨著自身系統的業務發展,對性能要求高,而數據庫一定程度上成為瓶頸,就會引入緩存及索引,分別解決key-value及復雜檢索;

索引加緩存現在已經成為解決高并發的基本方案,但在實施過程會有所區別;

14年對3億熱數據的系統升級時,技術選型為solr+redis,考慮到數據量過大,數據在solr中只存index,而結果只存并返回主鍵id,再通過id從redis中讀取數據,redis也不存放全部數據,數據設置過期時間,若未命中redis,回源數據庫查詢并反寫redis;

主要考慮資源與性能的平衡,solr的存儲減少及IO性能提高,結果數據只在redis存放一份,redis的數據經過運行大部分是熱數據;

當然現在也流行ES+Hbase組合。

圖5 增加緩存及索引

對于頻繁使用的數據,從集中緩存讀取,不一定達到性能要求,可以考慮把數據入JVM緩存,如類目信息,類目是電商系統基本數據,數據量不多,調用量大;

個別情況下,使用ThreadLocal做線程內緩存也是種有效手段,但需要考慮數據清除及有效性;

在修改商品信息時,業務對商品信息的校驗有名稱長度、狀態、庫存及各業務模式等,而為了參數的統一校驗方法參數為商品編號,導致各校驗方法都需要讀取一次商品,使用線程緩存可以解決該問題,性能提高了盡20ms,讀取商品每分鐘減少近萬次;

圖6 增加本地緩存

有時所依賴系統性能不太穩定,避免出現因第三方系統影響系統,把依賴的服務進行數據閉環,與Dao一樣當成系統的數據源;

如商品系統強依賴商家系統的商家信息服務,若商家服務不穩定,商品系統一半服務都不穩定,采取對商家信息緩存一份,降低外部風險,把風險控制在自己手上;

圖7 遠程服務進化成數據源

用戶體驗最近越來越重視,系統響應時間性能要求也越來越高,異步化是很好的一種選擇:消息中間件;電商下單就是個很好的案例,在用戶點擊下單時,服務端不直接保存數據,給訂單系統發送消息,就直接返回支付頁面,在用戶支付過程中,訂單系統異步進行數據保存;

業務層、數據層的范圍越來越寬泛,業務層可以分為基礎服務與組合服務;數據層分為數據源與索引緩存;

依賴的技術或中間件需要有效的結合,用于解決系統所遇到各種問題。

圖8 復雜的結構

最后

系統結構慢慢變復雜,穩定性、健壯性逐漸提高;

技術選擇都需要結合業務痛點、技術儲備以及資源情況,否則就有些不切實際,泛泛而談;

以上是近幾年自己經歷的技術變革及升級的總結,后續可以針對個別點進行詳細分享。

作者:徐賢軍,京東系統架構師,從事架構設計與開發工作,熟悉各種開源軟件架構。在Web開發、架構優化上有較豐富實戰經歷。

感謝您的閱讀,如果你覺得我的公眾號還不錯,請關注!同時還請多幫我推薦給你的朋友,多謝了。

Java大牛愛好者:每天一篇java技術文章,不定時java干貨發送

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

推薦閱讀更多精彩內容

  • 作者:徐賢軍,京東系統架構師,從事架構設計與開發工作,熟悉各種開源軟件架構。在Web開發、架構優化上有較豐富實戰經...
    灰色程序閱讀 162評論 0 1
  • 關于Mongodb的全面總結 MongoDB的內部構造《MongoDB The Definitive Guide》...
    中v中閱讀 31,985評論 2 89
  • 風半盅,雨半盅。湖畔桃柳理妝容,櫻也醉花叢。 愁也濃,喜也濃。春入寒門鳳雍雍,悵望待歸鴻。
    小紅帽_8c52閱讀 271評論 0 1
  • 當, 離開城市的喧囂, 回, 到農村的家里, 坐, 在門前的老柿子樹下, 望這一湖秋色! 一湖秋色…… 湖里來了野...
    阿木洛克人閱讀 302評論 0 1
  • 1、基本使用 Volley適合輕量、高并發的網絡請求,但如果大數據量的操作,比如上傳下載文件,就不太適合了。使用V...
    i冰點閱讀 848評論 0 6