分佈式架構的常見概念與演進簡史
集羣mysql
- 小飯店原來只有一個廚師,切菜洗備料炒全乾。
- 兩個廚師能炒同樣的菜,這兩個廚師關係是集羣
分佈式web
- 請了一個配菜師,配菜師和廚師的關係是分佈式
- 倆配菜師的關係也是集羣
節點sql
副本機制數據庫
中間件緩存
- 位於操做系統提供的服務以外,也不屬於應用
- 位於兩者之間爲開發者處理通訊和輸入輸出的一類軟件
- 幫助用戶聚焦關心本身應用的部分
發展歷程:服務器
- 出現問題,負載均衡器加入
- 服務之間如何保持session 一致
- 階段四:數據庫壓力大,讀寫分離
- 主從數據庫數據同步(mysql自帶主從集羣模式)
- 數據源選擇(採用第三方數據庫中間件,好比:mycat)
- 階段七:數據庫的水平/垂直拆分
- 垂直拆分:把數據庫不一樣業務數據拆分到不一樣數據庫
- 水平拆分:把同一張表中的數據拆分到兩個甚至更多的庫中
- 階段八:應用拆分
- 這樣拆分之後,每一個系統都會有用戶查詢訪問等相關操做
- 須要抽象出來,走服務化路線
- 各個服務進程之間通訊,經過rpc技術:好比 webservice、hessian、http、RMI等
總結梳理session
分佈式系統難點負載均衡
- 三態:非分佈式會出現調用成功和失敗,分佈式下還會出現超時狀態
- 分佈式事務
- 可採用分佈式鎖(增大系統複雜度和系統開銷)
- 事務跨越的服務越多,複雜度越大、開銷越大,最好避免分佈式事務
- 重試機制也是解決方案
- 可是如何避免重複調用(冪等設計,屢次調用和單次調用效果同樣,好比設置惟一鍵等方法)
- 也可能不管怎麼重試,都不會返回一個明確的結果,作到最終一致就好
- 負載均衡
- 每一個服務單獨部署,每一個服務至少兩臺機器(由於用的都是普通機、可靠性不高)
- 一致性
- 數據被複制到不一樣的機器上,如何保證一致性成爲難點
- 故障的獨立性
- 單個節點出現問題的狀況確定會出現,須要更加全面考慮
歡迎關注本站公眾號,獲取更多信息