《分佈式技術原理與算法解析》總結一:分佈式技術總覽

1 分佈式體系

如下圖:
分佈式資源池化、分佈式通信、分佈式數據存儲與管理、分佈式計算四大體系的劃分符合業務架構設計的一般規律:“在一定資源上,進行一定通信,通過一定計算,完成一定數據的加工和處理,從而對外提供特定的服務”
而在分佈式環境下,無論是資源、通信、數據還是計算,都需要去解決協同、調度、追蹤高可用、部署的問題
在這裏插入圖片描述

2 什麼是分佈式

讓我們從最原始的架構開始演變

  • 單機模式:窮逼模式(窮逼:???老子就那麼點用戶,花那麼多錢幹啥?

概念:所有應用程序和數據均部署在一臺電腦或服務器上,由一臺計算機完成所有的處理

優點:功能、代碼和數據集中,便於維護、管理和執行

缺點:單個計算機的處理能力取決於CPU和內存等硬件,但硬件的發展速度和性能是有限的,而且升級硬件的性價比也是要考慮的,因此CPU和內存等硬件的性能將成爲單機模式的瓶頸;此外,將所有任務都交給一臺計算機,也會存在單點失效問題。

  • 數據並行/數據分佈式模式:爲解決單機模式的問題,並行計算得到了發展,進而出現了數據並行(數據分佈式)模式

概念:
並行計算採用消息共享模式使用多臺計算機並行運行或執行多項任務;
核心原理是每臺計算機上執行相同的程序,將數據進行拆分放到不同的計算機上進行計算;
首先需要把單機模式中的應用和數據分離,纔可能實現對數據的拆分,然後對同類型的數據進行拆分,比如不同服務器上的應用去不同的數據庫上獲取數據執行任務

好處:利用多臺計算機並行處理多個請求,可以在相同的時間內完成更多的請求處理,解決了單機模式的計算效率瓶頸問題

缺點:
1 相同的應用部署到不同的服務器上,當大量用戶請求過來時,如何能比較均衡地轉發到不同的應用服務器上?負載均衡器
2 當請求量較大時,對數據庫的頻繁讀寫操作,使得數據庫的 IO 訪問成爲瓶頸,怎麼解決這個問題?使用讀寫分離
3 當有些數據成爲熱點數據時,會導致數據庫訪問頻繁,壓力增大,怎麼解決這個問題?引入緩存機制,一方面可以減輕數據庫的壓力,另一方面也可以提升查詢效率
4 如果單個請求特別複雜,數據並行模式的整體計算效率還是不夠高,這個問題此模式沒有辦法解決,因此新模式需要解決此問題,也就是對提升單個任務的執行性能及降低時延無效

  • 任務並行/任務分佈式模式:提高單個任務的執行性能/縮短單個任務的執行時間

概念:
將單個複雜的任務拆分爲多個子任務,從而使得多個子任務可以在不同的計算機上並行執行,每個子任務可以在多臺計算機上運行
兩個核心步驟:將單任務拆分成多個子任務;讓多個子任務並行執行。

優點:你懂的

缺點:設計上覆雜了很多

  • 那分佈式到底是啥?

分佈式其實就是將相同或相關的程序運行在多臺計算機上,從而實現特定目標的一種計算方式
數據並行/數據分佈式模式和任務並行/任務分佈式模式都算是分佈式的一種實現,對於性能、可用性及可擴展性的要求產生了不同的分佈式實現

那到底啥時候採用數據並行/數據分佈式模式,啥時候採用任務並行/任務分佈式模式呢?
一個簡單的原則爲:
任務執行時間短,數據規模大、類型相同且無依賴,則可採用數據並行/數據分佈式模式;(別直接上任務並行/任務分佈式模式,有點難頂的)
如果任務複雜、執行時間長,且任務可拆分爲多個子任務,則考慮任務並行/任務分佈式模式;
在實際業務中,通常是這兩種模式並用

分佈式和並行計算的區別:
分佈式核心在於將任務拆分到不同的服務器上,強調數據、任務上的並行;
並行計算核心在於充分利用服務器CPU、內存等資源,可以將單個任務以多進程多線程方式來運行,強調單機上運算的並行;
分佈式中每臺服務器採用並行計算可以提高性能

#3 分佈式系統的指標

首先要明確,分佈式的目的是用更多的機器,處理更多的數據和更復雜的任務;因此性能資源可用性可擴展性是分佈式系統的重要指標

不同業務場景對指標的要求高低不同,需要根據業務來分析:
在這裏插入圖片描述

3.1 性能

性能用於衡量一個系統處理各種任務的能力

常見的性能指標(彼此可能互相沖突):吞吐量(Throughput)、響應時間(Response Time)、完成時間(Turnaround Time)

吞吐量:系統在一定時間內可以處理的任務數,這個指標可以非常直接地體現一個系統的性能

QPS,可確保某給定響應時間下的每秒到達的查詢數的上限(簡單理解:查詢數每秒,用於衡量一個系統每秒處理的查詢數);
這個指標通常用於讀操作,越高說明對讀操作的支持越好

TPS,即事務數每秒,用於衡量一個系統每秒處理的事務數;
這個指標通常對應於寫操作,越高說明對寫操作的支持越好

BPS,即比特數每秒,用於衡量一個系統每秒處理的數據量;
對於一些網絡系統、數據管理系統,不能簡單地按照請求數或事務數來衡量其性能,因爲請求與請求、事務與事務之間也存在着很大的差異,比方說,有的事務需要寫入更多的數據

響應時間:系統響應一個請求或輸入需要花費的時間,這個指標直接影響到用戶體驗

完成時間:系統真正完成一個請求或處理需要花費的時間,這個指標對於需要計算海量數據或大規模的任務比較重要

3.2 資源

資源指一個系統提供正常能力需要佔用的硬件資源,如 CPU、內存、硬盤等

一個系統在沒有任何負載時的資源佔用,叫做空載資源佔用,體現了這個系統自身的資源佔用情況。
對於同樣的功能,空載資源佔用越少,說明系統設計越優秀,越容易被用戶接受。

一個系統滿額負載時的資源佔用,叫做滿載資源佔用,體現了這個系統全力運行時佔用資源的情況,也體現了系統的處理能力。
同樣的硬件配置上,運行的業務越多,資源佔用越少,說明這個系統設計得越好。

3.3 可用性

可用性指系統在面對各種異常時可以正確提供服務的能力,可以用系統停止服務的時間與總的時間之比衡量,也可以用某功能的失敗次數與總的請求次數之比來衡量

注意與可靠性的區別:可靠性通常用來表示一個系統完全不出故障的概率,可用性則更多的是指在允許部分組件失效的情況下,一個系統對外仍能正常提供服務的概率

3.4 可擴展性

可擴展性指分佈式系統通過擴展集羣機器規模提高系統性能 (吞吐、響應時間、 完成時間)、存儲容量、計算能力的特性

常見指標是加速比(Speedup):一個系統進行擴展後相對擴展前的性能提升:

如果目標是爲了提高吞吐量,則可以用擴展後和擴展前的吞吐量之比進行衡量。
如果目標是爲了縮短完成時間,則可以用擴展前和擴展後的完成時間之比進行衡量。
如果目標是爲了縮短響應時間,則可以用擴展前和擴展後的響應時間之比進行衡量。

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