架構師之路(十八)Dubbo與Zookeeper、SpringMVC整合和使用(負載均衡、容錯)

架構師之路(十八)

作爲一名軟件開發人員,成爲架構師是追求之一。系統架構師的能力不僅僅體現在書寫業務代碼上,更重要的是系統的結構和性能,是否具有可拓展性、高併發性和穩定性。


 垂直拆分
  垂直拆分就是要把表按模塊劃分到不同數據庫 表中(當然原則還是不破壞第三範式),這種拆分在大型網站的演變過程中是很常見的。當一個網站還在很小的時候,只有小量的人來開發和維護,各模塊和表都在一起,當網站不斷豐富和壯大的時候,也會變成多個子系統來支撐,這時就有按模塊和功能把表劃分出來的需求。其實,相對於垂直切分更進一步的是服務化改造,說得簡單就是要把原來強耦合的系統拆分成多個弱耦合的服務,通過服務間的調用來滿足業務需求看,因此表拆出來後要通過服務的形式暴露出去,而不是直接調用不同模塊的表,淘寶在架構不斷演變過程,最重要的一環就是服務化改造,把用戶、交易、店鋪、寶貝這些核心的概念抽取成獨立的服務,也非常有利於進行局部的優化和治理,保障核心模塊的穩定性
  垂直拆分:單表大數據量依然存在性能瓶頸
  水平拆分
  上面談到垂直切分只是把表按模塊劃分到不同數據庫,但沒有解決單表大數據量的問題,而水平切分就是要把一個表按照某種規則把數據劃分到不同表或數據庫裏。例如像計費系統,通過按時間來劃分表就比較合適,因爲系統都是處理某一時間段的數據。而像SaaS應用,通過按用戶維度來劃分數據比較合適,因爲用戶與用戶之間的隔離的,一般不存在處理多個用戶數據的情況,簡單的按user_id範圍來水平切分
  通俗理解:水平拆分行,行數據拆分到不同表中, 垂直拆分列,表數據拆分到不同表中
  垂直與水平聯合切分
  由上面可知垂直切分能更清晰化模塊劃分,區分治理,水平切分能解決大數據量性能瓶頸問題,因此常常就會把兩者結合使用,這在大型網站裏是種常見的策略
  案例:
  以mysql爲例,簡單購物系統暫設涉及如下表:
  1.產品表(數據量10w,穩定)
  2.訂單表(數據量200w,且有增長趨勢)
  3.用戶表 (數據量100w,且有增長趨勢)
  以mysql爲例講述下水平拆分和垂直拆分,mysql能容忍的數量級在百萬靜態數據可以到千萬
  垂直拆分:
  解決問題:
  表與表之間的io競爭
  不解決問題:
  單表中數據量增長出現的壓力
  方案:
  把產品表和用戶表放到一個server 
  訂單表單獨放到一個server上
  水平拆分:
  解決問題:
  單表中數據量增長出現的壓力
  不解決問題:
  表與表之間的io爭奪
  方案:
  用戶表通過性別拆分爲男用戶表和女用戶表
  訂單表通過已完成和完成中拆分爲已完成訂單和未完成訂單
  產品表 未完成訂單放一個server上
  已完成訂單表和男用戶表放一個server上
  女用戶表放一個server上(女的愛購物)





個人總結:
             數據庫的垂直切分,也就是按模塊、功能進行數據庫的切分。根據功能模塊,比如說權限模塊、產品模塊、用戶模塊、監控模塊、綁定模塊等等,這些可以放在不同的數據庫server裏面,這樣的優勢是之前的表和表之間存在io競爭,現在放在不同的數據庫裏面,這樣可以對錶數據進行解耦,提高數據庫的訪問速度,解決表與表之間的io競爭。
              數據庫的水平切分,表示同一個模塊,會根據同一張表裏面的數據,按照表邏輯規則,進行拆分,比如說按照訂單號的單雙來進行分庫。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章