<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          架構(gòu)拆分:如何讓笨重的系統(tǒng)架構(gòu)變靈巧?

          共 4357字,需瀏覽 9分鐘

           ·

          2021-01-05 17:06



          隨著業(yè)務(wù)的復(fù)雜性增大、系統(tǒng)吞吐量增長,所有功能統(tǒng)一部署難度加大,各個功能模塊相互影響使系統(tǒng)變的笨重且脆弱,因此需要對業(yè)務(wù)進行拆分、對系統(tǒng)進行解耦、對系統(tǒng)內(nèi)部架構(gòu)升級,以此來提升系統(tǒng)容量及健壯性。接下來主要分系統(tǒng)拆分結(jié)構(gòu)演變兩部分介紹:

          一、系統(tǒng)拆分

          系統(tǒng)拆分從資源角度分為應(yīng)用拆分和數(shù)據(jù)庫拆分,而從采用的先后順序則可分為: 水平擴展、垂直拆分、業(yè)務(wù)拆分和水平拆分。

          圖1 系統(tǒng)分解原則

          1、水平擴展

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

          • 應(yīng)用加實例,搞集群,把系統(tǒng)吞吐量擴上去;
          • 數(shù)據(jù)庫利用主從進行讀寫分離,數(shù)據(jù)庫其實是系統(tǒng)最應(yīng)該保護的資源。

          2、垂直拆分

          垂直拆分才是真正開始拆分系統(tǒng),主要是從業(yè)務(wù)功能角度拆分。如拆出用戶系統(tǒng)、商品系統(tǒng)、交易系統(tǒng)等。

          為了解決拆分后各個子系統(tǒng)之間相互依賴調(diào)用的問題,這時會引入服務(wù)調(diào)用治理。雖然系統(tǒng)復(fù)雜度有所加大,但系統(tǒng)基本解耦,穩(wěn)定性相對提高,做好降級就能避免因其它系統(tǒng)功能異常導(dǎo)致系統(tǒng)崩潰問題。

          業(yè)務(wù)對應(yīng)的庫也會按照對應(yīng)的業(yè)務(wù)拆分出用戶庫、商品庫、交易庫等。

          3、業(yè)務(wù)拆分

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

          數(shù)據(jù)庫拆分也可以分為幾步:垂直分表、垂直分庫、水平分表、水平分庫分表,

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


          圖2 商品表拆分

          • 垂直分庫是指按業(yè)務(wù)拆庫,如拆出訂單庫、商品庫、用戶庫等
          • 水平分表是解決數(shù)據(jù)量大,把一張表拆成多張表;
          • 水平分庫分表是更進一步拆分表。

          圖3 分庫分表

          4、水平拆分

          服務(wù)分層,系統(tǒng)服務(wù)積木化,拆分功能與非功能系統(tǒng)、業(yè)務(wù)組合的系統(tǒng),如最近比較火的大中臺或前臺拆分,中臺為積木組件,承擔(dān)服務(wù)功能輸出;前臺更多的是組合積木服務(wù),及時響應(yīng)業(yè)務(wù)發(fā)展,如在電商網(wǎng)站單品頁能看見主圖、價格、庫存、優(yōu)惠券或推薦等信息,都是組合各積木組件呈現(xiàn)。

          數(shù)據(jù)庫也可以進行冷熱數(shù)據(jù)分離,過期或過季商品可以歸檔,比如諾基亞3210手機,早已經(jīng)停產(chǎn)且沒有銷售;用戶查看訂單時,更多的只是查看最近1、2年信息,2年前數(shù)據(jù)查看量少,在存儲設(shè)計時可以區(qū)別處理。

          二、結(jié)構(gòu)演變

          結(jié)構(gòu)演變主要是隨著系統(tǒng)復(fù)雜度增加及對性能要求提高而不得不做的系統(tǒng)內(nèi)部架構(gòu)升級。早期系統(tǒng)基本是應(yīng)用直聯(lián)數(shù)據(jù)庫,但在系統(tǒng)進行拆分后,功能本系統(tǒng)不能單獨完成,需要依賴其它系統(tǒng),就出現(xiàn)遠程調(diào)用。

          圖4 早期應(yīng)用結(jié)構(gòu)

          隨著自身系統(tǒng)的業(yè)務(wù)發(fā)展,對性能要求高,而數(shù)據(jù)庫一定程度上成為瓶頸,就會引入緩存及索引,分別解決key-value及復(fù)雜檢索。索引加緩存現(xiàn)在已經(jīng)成為解決高并發(fā)的基本方案,但在實施過程會有所區(qū)別。

          14年對3億熱數(shù)據(jù)的系統(tǒng)升級時,技術(shù)選型為Solr+Redis,考慮到數(shù)據(jù)量過大,數(shù)據(jù)在Solr中只存index,而結(jié)果只存并返回主鍵ID,再通過ID從Redis中讀取數(shù)據(jù),Redis也不存放全部數(shù)據(jù),數(shù)據(jù)設(shè)置過期時間,若未命中Redis,回源數(shù)據(jù)庫查詢并反寫Redis。主要考慮資源與性能的平衡,Solr的存儲減少及IO性能提高,結(jié)果數(shù)據(jù)只在Redis存放一份,Redis的數(shù)據(jù)經(jīng)過運行大部分是熱數(shù)據(jù)。當(dāng)然現(xiàn)在也流行ES+Hbase組合。

          圖5 增加緩存及索引

          對于頻繁使用的數(shù)據(jù),從集中緩存讀取,不一定達到性能要求,可以考慮把數(shù)據(jù)入JVM緩存。如類目信息,類目是電商系統(tǒng)基本數(shù)據(jù),數(shù)據(jù)量不多,調(diào)用量大。個別情況下,使用ThreadLocal做線程內(nèi)緩存也是種有效手段,但需要考慮數(shù)據(jù)清除及有效性。

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

          圖6 增加本地緩存

          有時所依賴的系統(tǒng)性能不太穩(wěn)定,為避免出現(xiàn)因第三方系統(tǒng)影響系統(tǒng)的情況,把依賴的服務(wù)進行數(shù)據(jù)閉環(huán),與Dao一樣當(dāng)成系統(tǒng)的數(shù)據(jù)源。如商品系統(tǒng)強依賴商家系統(tǒng)的商家信息服務(wù),若商家服務(wù)不穩(wěn)定,商品系統(tǒng)一半服務(wù)都不穩(wěn)定,采取對商家信息緩存一份,降低外部風(fēng)險,把風(fēng)險控制在自己手上。

          圖7 遠程服務(wù)進化成數(shù)據(jù)源

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

          業(yè)務(wù)層、數(shù)據(jù)層的范圍越來越寬泛,業(yè)務(wù)層可以分為基礎(chǔ)服務(wù)與組合服務(wù);數(shù)據(jù)層分為數(shù)據(jù)源與索引緩存;依賴的技術(shù)或中間件需要有效的結(jié)合,用于解決系統(tǒng)所遇到各種問題。

          圖8 復(fù)雜的結(jié)構(gòu)

          三、最后

          系統(tǒng)結(jié)構(gòu)慢慢變復(fù)雜,穩(wěn)定性、健壯性逐漸提高;技術(shù)選擇都需要結(jié)合業(yè)務(wù)痛點、技術(shù)儲備以及資源情況,否則就有些不切實際,泛泛而談。

          以上是近幾年自己經(jīng)歷的技術(shù)變革及升級的總結(jié),后續(xù)可以針對個別點進行詳細分享。系統(tǒng)拆分的最后是微服務(wù),結(jié)構(gòu)的演變是技術(shù)的升級。

          • 作者:徐賢軍

          • 來源:京東技術(shù)訂閱號


          推薦閱讀:城商行外部數(shù)據(jù)平臺架構(gòu)設(shè)計



          轉(zhuǎn)載申明:轉(zhuǎn)載本號文章請注明作者來源,本號發(fā)布文章若存在版權(quán)等問題,請留言聯(lián)系處理,謝謝。


          推薦閱讀

          更多架構(gòu)相關(guān)技術(shù)知識總結(jié)請參考“架構(gòu)師技術(shù)全聯(lián)盟書店”相關(guān)電子書(35本技術(shù)資料打包匯總詳情可通過“閱讀原文”獲取)。

          全店內(nèi)容持續(xù)更新,現(xiàn)下單“架構(gòu)師技術(shù)全店打包匯總(全)”,后續(xù)可享全店內(nèi)容更新“免費”贈閱,價格僅收188元(原總價290元)。



          溫馨提示:

          掃描二維碼關(guān)注公眾號,點擊閱讀原文鏈接獲取架構(gòu)師技術(shù)全店資料打包匯總(全)電子書資料詳情。


          瀏覽 30
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩动态图 | 亚洲成人免费无码视频 | 无码国产69精品久久久久 | 污污成人免费网站 | 久爱青草视频 |