大型分布式係統架構
本文主要是從軟件的質量屬性的角度,來分析大型分布式係統通常采用的架構方法。
1. 性能 (Performance)
性能是指係統的響應能力,性能測試經常要使用基準測試(Benchmark Test).
提高性能的辦法:
異步化 - 使用消息係統 和 batch處理
緩存 - 有多重緩存策略,本地緩存,分布式緩存同步,緩存服務器。
係統分割(水平和垂直分割)-
數據庫讀寫分離 -
性能測試的辦法:基準測試
2. 可靠性(Reliability)
是軟件係統在應用或係統錯誤麵前,在意外或錯誤使用的情況下維持軟件係統的功能特性的基本能力。
可靠性度量:
可靠性度量標準通常用於計算單個解決方案組件的故障概率。用於定義組件或係統可靠性的一個度量標準是平均故障間隔時間 (MTBF)。MTBF 是平均間隔時間,通常以千小時或萬小時(有時稱為“開機時間”或 POH)進行表示,即經過此間隔時間後組件出現故障並需要修複。MTBF 使用以下公式進行計算:
MTBF = (total elapsed time - sum of downtime)/number of failures
3. 可用性(Availability)
是係統能夠正常運行的時間比例。
可用性=係統運行時間/(係統運行時間+係統停機時間)
Percentage of availability = (total elapsed time - sum of downtime)/total elapsed time
可用性通常以“九”進行度量。例如,可用性級別為“三個九”的解決方案能夠在 99.9% 的時間內支持其預期功能,相當於在 24x7x365(每天 24 小時/每周七天/一年 365 天)的基礎上,每年 8.76 小時的年停機時間.
或者用公式可用度 = MTTF / MTBF
MTBF (Mean Time Between Failure) = MTTF (Mean Time To Failure) + MTTR ( Mean Time To Repaire)
平均失效間隔時間 = 平均失效等待時間 + 平均失效修複時間。
(Reference: https://book.51cto.com/art/200902/111142.htm)
提高可用性的設計技術:
可以能過分布式並行係統來提高係統的準確率,並行係統的好處當一個節點出現問題,另一個節點任然可以工作
4. 安全性(Security)
是指係統在向合法用戶提供服務的同時能夠阻止非授權用戶使用的企圖或拒絕服務的能力
8.互操作性(Inter-operation)
作為係統組成部分的軟件不是獨立存在的。經常與其他係統或自身環境相互作用。為了支持互操作性,軟件體係結構必須為外部可視的功能特性和數據結構提供精心設計的軟件入口。
9.可伸縮性(Scalability)
這個書上沒有提,但是在實際大型分布式係統架構中很重要,攸關生死,沒有可伸縮性,Taobao就沒辦法支撐雙11,而這裏的可伸縮性主要是指水平擴展的能力(scale out),就是隨著業務的增長,係統能夠提供平滑水平擴展以支撐業務的發展。
提高可伸縮性的辦法:
應用服務器集群 - 通過對集群加減機器來調整對服務的支持能力,涉及的技術有ESB,無狀態Session管理,分布式緩存等...
業務垂直分割 - 對相關業務進行切分,例如將listing, selling, checkout 分拆成獨立的係統
分表分庫 - 係統的瓶頸往往出現在數據庫端,因為應用服務器可以集群,通常會采用分表分庫的方法來水平擴展數據庫,選取合適的數據路由算法,因為分割後,不同的數據要知道去哪個表哪個庫能找到,常用的數據路由算法有Mod 和 lookup
更多可以參見eBay的scalability 最佳實踐: https://www.infoq.com/cn/articles/ebay-scalability-best-practices
10. 可監控性 (Monitorability )
這個是我自己想出來的,因為監控真的也是太重要了。沒有監控的係統,就像是一輛沒有儀表盤的汽車,你不知道車速,不知道油量,也不知道車況,車子也許也還能跑,但會跑的很不安心。這就是老大們總喜歡讓下麵的人開發各種各樣的dashboard,這樣有什麼問題就一目了然了,而下麵的人,如果你足夠聰明的話,在沒有人要求的情況下,就能發現那些值得監控的點,並做成dashboard,這樣老大們會對你刮目相看的。
關於具體的監控和日誌,請參看我另一篇博文: https://blog.csdn.net/significantfrank/article/details/25772801
最後更新:2017-04-03 08:26:11