系統架構過程中常用到的術語

性能:Web系統的性能受多方面因素的影響,但大多數開發人員主要關心的是響應時間和可擴展性這兩方面。

n 響應時間:Web應用從收到請求到返回響應結果所花費的時間。而應用系統應該在可接受的時間範圍內返回響應結果,否則就不能算是一個性能良好的應用系統。

n 可擴展性:如果Web應用通過增加更多硬件可以使處理的請求數呈線性增長,那麼該應用是可擴展的。

在同一個應用中,響應時間和可擴展性並不總是能夠同時達到最好的效果。要麼應用程序有可接受的響應時間但是不能處理超過一定數量的請求;要麼應用程序可以處理大量請求,但是響應時間卻不盡如人意,甚至非常糟糕。因此,通常情況下我們需要在這兩個要素中尋求平衡點使我們的應用系統性能達到最佳狀態。

擴展的方式可以分爲縱向擴展和橫向擴展兩種。

n 縱向擴展(垂直擴展):爲單臺機器增加CPU或者提高單臺機器CPU性能。

n 橫向擴展(水平擴展):增加服務器數量

一般情況下水平擴展比垂直擴展更重要,主要是因爲普通硬件商品遠比需要特殊配置的硬件便宜(比如大型機);但是增強單個應用在一個硬件商品上處理的請求數同樣也是比較重要的。同時,一個應用系統在不降低響應時間的前提下,如果通過添加更多的資源能夠處理更多的請求,那麼這個系統表現良好。

容量規劃:需要我們根據產品期望的負載量來預估所需要的硬件數量。除了整體的預估外,這通常還包括使用更少硬件時系統的性能表現情況以及單臺機器下性能的測試及評估。

架構擴展:如果Web應用的每一層在多層架構體系中都是可擴展的,那麼該應用也具有可擴展性(橫向擴展)。例如,如下圖所示,我們就可以通過增加額外的資源來實現應用層和數據庫層的線性擴展。

負載均衡器擴展:可以通過將DNS指向多個IP以及使用DNS輪循查找IP地址的方式來實現負載均衡器的橫向擴展。或者可以使用多級負載均衡,使上一級負載均衡器來分發至下一級負載均衡器,但使用多個負載均衡器的情況比較少,主要是由於Web容器一般可以處理幾千併發請求,而使用Nginx或者HAProxy的單個負載均衡器可以處理超過20000的併發請求,因此單個負載均衡器完全可以代理多個web應用。

數據庫功能擴展:數據庫功能擴展是非常常用的方式,但是擴展數據庫功能(比如創建存儲過程或自定義函數)都會給數據層帶來額外開銷以及增加數據層的複雜性。

n 關係型數據庫:可以通過主從同步的模式實現擴展,主庫以寫入數據爲主,從庫只做讀操作。但是,如果業務量比較大時主從同步模式所提供的擴展能力非常有限,此外,開發人員還需要通過數據庫拆分技術來進一步滿足業務需求。

n NoSQL:CAP定理(譯者注:不熟悉的讀者可通過谷歌查閱)告訴我們一個應用不可能同時滿足一致性、可用性、分區容錯性三個要求。而NoSQL一般則是通過犧牲一定的一致性來獲得更高可用性以及更好的分區容錯性。

數據庫拆分可以垂直拆分和水平拆分:

n 垂直拆分(Partitioning):根據領域模型概念的基礎可以將數據庫拆分爲幾個鬆耦合的子庫。例如,拆分爲消費者數據庫、產品數據庫。另一種垂直拆分數據庫的方式是將一個實體的一部分字段拆分出來作爲一個新數據庫,另一部分字段作爲另一個數據庫。例如,將消費者數據拆分爲消費者聯繫信息和訂單數據兩部分。

n 水平拆分(Sharding):可以根據數據的離散屬性將數據進行水平分割。例如,消費者可以根據地域不同拆分爲美國消費者數據庫和歐洲消費者數據庫。

將數據庫從單個數據庫使用分區或者sharding拆分爲多個數據庫是一項非常有挑戰性的任務。

歡迎關注麥克叔叔每晚10點說,讓我們一起交流與學習。

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