系統的可擴充套件性

2021-10-07 19:44:11 字數 1683 閱讀 4505

到底什麼是可擴充套件性?這年頭,作為軟體設計架構師如果系統沒有可擴充套件性對外交流時都不好意思。但是如何選擇可擴充套件性方案?水平擴充套件還是垂直擴充套件?是不是很矛盾呢,本文為你分析可擴充套件性的真實含義和實際專案中的取捨。

每每和別人提及可擴充套件性的含義時,很多人開始討論提高效能,實施高可用性,甚至談論特定的技術或協議。顯然這些並不是可擴充套件性。不要誤會,您當然需要了解關於速度,效能,可用性,應用平台,網路等相關的一切,但這並非可擴充套件性的定義。

簡單地說,可擴充套件性就是關於如何處理更大規模的業務。比如,web應用程式就是允許更多的人使用你的服務。如果你不能弄清楚如何提高效能的同時向外擴充套件,沒關係。只要你能處理更大規模的使用者,即使是存在多個單點故障也沒有問題。

在今天實踐中有兩個關鍵的縮放web應用程式的方式:垂直擴充套件和水平擴充套件(垂直增加容量-硬碟;水平增加伺服器-分布式)

「垂直擴充套件「 -在同乙個邏輯單位新增資源以增加容量。這樣的例子比比皆是,比如公升級伺服器的cpu,比如在raid/ san儲存裝置上增加硬碟。

「橫向擴充套件「- 增加多個邏輯單元資源並且使他們作為乙個整體在工作。大多數的集群解決方案,比如分布式檔案系統,負載均衡都是通過橫向擴充套件技術來進行的。

每乙個部件,無論它是處理器,伺服器,儲存驅動器或負載均衡有一定的管理上或者操作上的開銷。當您嘗試進行擴充套件時,很重要的一點是要了解實際的資源利用率,這種測量方法被稱為「可擴充套件性因子「法。如果每新增乙個cpu到系統,都會失去5%的處理器功率,那麼您的可擴充套件性係數為0.95。當可擴充套件係數為0.9時,意味著你將只能使用90%的資源。

以「可擴充套件性因子「為基礎,可擴充套件性可以進一步細化分類。

如果你的可擴充套件性係數保持不變,這就是所謂的「線性的可擴充套件性「。

但某些元件有可能無法像別人一樣可以擴充套件,該係數低於1.0的就是所謂「分線性可擴充套件性。「

雖然數量很少,但是加入更多的元件確實可能會獲得更好的效能(或者可伸縮性因子)(跨越多個磁碟的raid i / o效能確實會更好)。這就是所謂的「超線性的可擴充套件性。「

如果應用程式沒有可擴充套件性,當對其進行擴充套件時,得到了更加糟糕的結果。這就是所謂的「負可擴充套件性「。

另一方面,橫向擴充套件並不要求你購買更多昂貴的伺服器,這意味著應用普通的儲存和伺服器作為解決方案。但是,橫向擴充套件也不便宜,因為它需要應用程式進行重新設計,以執行在多個伺服器之上,但是對外要表現為乙個單一的應用程式。這其中不得不思考兩個有趣的問題:「腦裂「和」硬體故障「。

雖然無限的水平線性可擴充套件性是難以實現的,無限的垂直擴充套件性也是不可能的。如果你正在構建乙個基本預先可以確定使用者數量的系統,調查和應用垂直擴擴充套件可能是明智的選擇。但是,如果你正在建設乙個可用於數百萬使用者的web應用程式,垂直擴充套件可能要付出昂貴的代價。

可擴充套件性不僅是和cpu處理能力有關,對於乙個成功的具備可擴充套件性的web應用程式而言,所有層都是一樣的,這包括儲存層(集群檔案系統和s3等),資料庫層(分割槽,聯邦),應用層(memcached,橫向擴充套件,tc,tomcat集群等),網路層,負載平衡器,防火牆等等。例如如果沒有辦法實現多個負載平衡器來處理您未來的網路流量負載,這和您花多少錢和精力以使你的web層具備橫向擴充套件能力毫無關係,您的流量將限於負載平衡器的能力。

選擇合適的可擴充套件方法取決於你想要的規模和預算。事實上如果有人說有乙個「放之四海而皆準「的解決辦法,請不要相信他們。如果下次您參加聚會討論時,有人開始「可擴充套件性「這個話題,請首先問他們可擴充套件性的含義。

參考文章

CSS可擴充套件性

今日在寫pc官網的時候,一直對於html css的結構編寫完全按照自己的思維方式,今天把 交給老大的時候,被他指出很多編寫 的錯誤性,比如 結構,標籤的使用,語義化,css的可擴充套件性,由於 主要還是需要做seo優化,所以在標籤使用上也有些不合理之處,給了我一些建議,自己記錄以下 1 在html標...

Flume的可擴充套件性

flume的可擴充套件性 flume採用了三層架構,分別為agent,collector和storage,每一層均可以水平擴充套件。其中,所有agent和 collector由master統一管理,這使得系統容易監控和維護,且master允許有多個 使用zookeeper進行管理和負載均衡 這就避 ...

Flume的可擴充套件性

flume的可擴充套件性 flume採用了三層架構,分別為agent,collector和storage,每一層均可以水平擴充套件。其中,所有agent和 collector由master統一管理,這使得系統容易監控和維護,且master允許有多個 使用zookeeper進行管理和負載均衡 這就避 ...