分佈式架構的常見概念與演進簡史

集羣mysql

  • 小飯店原來只有一個廚師,切菜洗備料炒全乾。
  • 兩個廚師能炒同樣的菜,這兩個廚師關係是集羣

分佈式web

  • 請了一個配菜師,配菜師和廚師的關係是分佈式
  • 倆配菜師的關係也是集羣

節點sql

  • 指能夠按照分佈式協議完成一組邏輯的獨立個體
    • 具體項目中,一個個體指操做系統中的一個進程

副本機制數據庫

  • 副本指,在分佈式系統中爲數據或服務提供的冗餘
    • 數據副本指在不一樣節點上保存同一份數據
      • 數據副本是分佈式系統中解決數據丟失的惟一手段
    • 服務副本
      • 多節點提供相同服務,經過主從關係實現高可用

中間件緩存

  • 位於操做系統提供的服務以外,也不屬於應用
  • 位於兩者之間爲開發者處理通訊和輸入輸出的一類軟件
  • 幫助用戶聚焦關心本身應用的部分

發展歷程:服務器

  • 階段一:單應用階段

  • 應用服務器和數據庫服務器分離

  • 三階段:應用服務器集羣

  • 出現問題,負載均衡器加入
  • 服務之間如何保持session 一致

  • 階段四:數據庫壓力大,讀寫分離
    • 主從數據庫數據同步(mysql自帶主從集羣模式)
    • 數據源選擇(採用第三方數據庫中間件,好比:mycat)

  • 階段五:使用搜索引擎緩解讀庫壓力

  • 階段六:引入緩存機制緩解數據庫壓力

  • 階段七:數據庫的水平/垂直拆分
    • 垂直拆分:把數據庫不一樣業務數據拆分到不一樣數據庫
      •     
    • 水平拆分:把同一張表中的數據拆分到兩個甚至更多的庫中
  • 階段八:應用拆分
    • 按照領域模型將系統拆分紅多個子系統

  • 這樣拆分之後,每一個系統都會有用戶查詢訪問等相關操做

  • 須要抽象出來,走服務化路線
  • 各個服務進程之間通訊,經過rpc技術:好比 webservice、hessian、http、RMI等

總結梳理session

分佈式系統難點負載均衡

  • 三態:非分佈式會出現調用成功和失敗,分佈式下還會出現超時狀態
  • 分佈式事務
    • 可採用分佈式鎖(增大系統複雜度和系統開銷)
    • 事務跨越的服務越多,複雜度越大、開銷越大,最好避免分佈式事務
    • 重試機制也是解決方案
      • 可是如何避免重複調用(冪等設計,屢次調用和單次調用效果同樣,好比設置惟一鍵等方法)
      • 也可能不管怎麼重試,都不會返回一個明確的結果,作到最終一致就好
  • 負載均衡
    • 每一個服務單獨部署,每一個服務至少兩臺機器(由於用的都是普通機、可靠性不高)
  • 一致性
    • 數據被複制到不一樣的機器上,如何保證一致性成爲難點
  • 故障的獨立性
    • 單個節點出現問題的狀況確定會出現,須要更加全面考慮
相關文章
相關標籤/搜索