一、什麼是分散式系統 分散式系統是建立在網路之上的系統。分散式系統背後是由一系列的電腦組成的,但用戶感知不到背後的邏輯,就像訪問單個電腦一樣。 特征: 最開始一臺伺服器上存儲著文件,數據,應用程式。隨著流量的增多,瓶頸出現,應用程式需要更快CPU,資料庫伺服器要更大記憶體(緩存)和硬碟,文件伺服器 ...
一、什麼是分散式系統
分散式系統是建立在網路之上的系統。分散式系統背後是由一系列的電腦組成的,但用戶感知不到背後的邏輯,就像訪問單個電腦一樣。
特征:
-
最開始一臺伺服器上存儲著文件,數據,應用程式。隨著流量的增多,瓶頸出現,應用程式需要更快CPU,資料庫伺服器要更大記憶體(緩存)和硬碟,文件伺服器要更大硬碟,便將三個功能分離到各自伺服器。
-
為了提高速度,將常用數據放到緩存中,緩存又分本地緩存和分散式緩存。
-
緩解伺服器壓力,採用集群,並通過負載均衡伺服器調度不同的應用伺服器。
-
除了緩存外仍有大量數據直接訪問資料庫伺服器,這時便採用讀寫分離。
-
使用CDN,反向代理加速網站響應,CDN可從距離自己最近的網路提供商機房獲取數據,如果反響代理中緩存著用戶請求的資源則直接返回給用戶。
-
分散式資料庫,是資料庫拆分的最後手段,按照不同業務拆分
-
業務越來越複雜採用分散式服務,傳統的SOA架構。
二、分散式架構的演進
1. 單體應用-All in one
特征:應用程式、資料庫、文件等所有的資源都在一臺伺服器上。
缺陷:發現隨著系統訪問量的再度增加,webserver機器的壓力在高峰期會上升到比較高,這個時候開始考慮增加一臺webserver。
2. 應用服務和數據服務分離
特征:應用程式、資料庫、文件分別部署在獨立的資源上。
3. 使用緩存改善性能
特征:資料庫中訪問較集中的一小部分數據存儲在緩存伺服器中,減少資料庫的訪問次數,降低資料庫的訪問壓力。
4. 使用應用伺服器集群
特征:通過Nginx的反向代理,通過負載均衡的調度,可以在一定程度上解決伺服器處理能力的瓶頸;
負載均衡的策略有:
輪詢:每一次來自網路的請求輪流分配給內部中的伺服器,從1至N然後重新開始。此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。實現簡單,但存在伺服器的處理能力不同的情況;
權重:根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。
例如:伺服器A的權值被設計 成1,B的權值是3,C的權值是6,則伺服器A、B、C將分別接受到10%、30%、60%的服務請求。
此種均衡演算法能確保高性能的伺服器得到更多的使用率,避免低性能的伺服器負載過重。考慮了伺服器處理能力的不足;
5. 資料庫讀寫分離
特征:資料庫讀寫分離。
6. 反向代理CDN加速
特征:採用CDN和反向代理加快系統的訪問速度。
7. 分散式文件系統和分散式資料庫
特征:資料庫採用分散式資料庫,文件系統採用分散式文件系統,加上遠程分散式緩存。
資料庫是系統資料庫拆分的最後方法,只有在單表數據規模非常龐大的時候才使用,更常用的資料庫拆分手段是業務分庫,將不同的業務資料庫部署在不同的物理伺服器上。
8. 使用Nosql和搜索引擎
特征:隨著業務越來越複雜,對數據存儲和檢索的需求也越來越複雜,系統需要採用一些非關係型資料庫如NoSQL和分資料庫查詢技術如搜索引擎。
9. 業務拆分
特征:系統上按照業務進行拆分改造,應用伺服器按照業務區分進行分別部署。
為了應對日益複雜的業務場景,通常使用分而治之的手段將整個系統業務分成不同的產品線,應用之間通過超鏈接建立關係,也可以通過消息隊列進行數據分發,
當然更多的還是通過訪問同一個數據存儲系統來構成一個關聯的完整系統。
10. 分散式服務SOA
特征:公共的應用模塊被提取出來,部署在分散式伺服器上供應用伺服器調用。
三、分散式存在的問題及微服務的引出
(1) 當服務越來越多時,服務URL配置管理變得非常困難,F5硬體負載均衡器的單點壓力也越來越大。
(2) 當進一步發展,服務間依賴關係變得錯蹤複雜,甚至分不清哪個應用要在哪個應用之前啟動,架構師都不能完整的描述應用的架構關係。
(3) 接著,服務的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?
(4) 服務多了,溝通成本也開始上升,調某個服務失敗該找誰?服務的參數都有什麼約定?
(5) 一個服務有多個業務消費者,如何確保服務質量?
(6) 隨著服務的不停升級,總有些意想不到的事發生,比如cache寫錯了導致記憶體溢出,故障不可避免,每次核心服務一掛,影響一大片,人心慌慌,如何控制故障的影響面?服務是否可以功能降級?或者資源劣化?
由於服務越來越多ESB服務匯流排維護起來越來越麻煩,微服務便由此發展而來!
由於業務間的邏輯越來越複雜,我們就不把這些業務全部雜糅在一起,每個業務都分開來做,這就是微服務。