1. 程式人生 > 其它 >論網際網路三高架構

論網際網路三高架構

論網際網路三高架構

陳涵

(石家莊鐵道大學,河北省石家莊市 050043)

摘要:軟體開發通常會提到一個名詞 “三高”,即高併發、高效能、高可用。而這三高在網際網路分散式框架在網頁的設計及其他設計中起著關鍵性的作用。

關鍵詞:軟體開發;三高;網際網路分散式框架,關鍵性;

On the three high architectures of the Internet

Chen Han

(Shijiazhuang Railway University, Shijiazhuang City, Hebei Province 050043)

Abstract:Software development usually refers to a term "three highs", that is, high concurrency, high performance, and high availability. These three highs play a key role in the design of web pages and other designs in the distributed framework of the Internet.

Key words:Software development; three highs; Internet distributed framework, critical;

  軟體架構的三高是:高併發、高效能、高可用,一下我們分別從:定義以及如何提高兩個方面進行介紹分析:

1. 三高的解釋

①高併發

高併發(High Concurrency)是網際網路分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。

 

高併發相關常用的一些指標有響應時間(Response Time),吞吐量(Throughput),每秒查詢率QPS(Query Per Second),併發使用者數等。

 

響應時間:系統對請求做出響應的時間。例如系統處理一個HTTP請求需要200ms,這個200ms就是系統的響應時間。

吞吐量:單位時間內處理的請求數量。

QPS:每秒響應請求數。在網際網路領域,這個指標和吞吐量區分的沒有這麼明顯。

併發使用者數:同時承載正常使用系統功能的使用者數量。例如一個即時通訊系統,同時線上量一定程度上代表了系統的併發使用者數。

②高可用

高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。

假設系統一直能夠提供服務,我們說系統的可用性是100%。

如果系統每執行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%。

很多公司的高可用目標是4個9,也就是99.99%,這就意味著,系統的年停機時間為8.76個小時。

百度的搜尋首頁,是業內公認高可用保障非常出色的系統,甚至人們會通過www.baidu.com 能不能訪問來判斷“網路的連通性”,百度高可用的服務讓人留下啦“網路通暢,百度就能訪問”,“百度打不開,應該是網路連不上”的印象,這其實是對百度HA最高的褒獎。

高效能

 效能直接影響使用者的感官體驗,訪問一個系統,如果超過5秒沒有響應,絕大數使用者會選擇離開。

高效能快取

對一些熱點資料每次都從 DB 中讀取,會給 DB 帶來較大的壓力,導致效能大幅下降。所以,我們需要用快取來提升熱點資料的訪問效能,比如將活動資訊資料在瀏覽器的快取中儲存一段時間。

日誌優化,避免IO瓶頸

當系統處理大量磁碟 IO 操作的時候,由於 CPU 和記憶體的速度遠高於磁碟,可能導致 CPU 耗費太多時間等待磁碟返回處理的結果。對於這部分 CPU 在 IO 上的開銷,我們稱為 “iowait”。

2、如何提高三高

① 如何提升系統的併發能力

網際網路分散式架構設計,提高系統併發能力的方式,方法論上主要有兩種:垂直擴充套件(Scale Up)與水平擴充套件(Scale Out)。

垂直擴充套件:提升單機處理能力。垂直擴充套件的方式又有兩種:

1)增強單機硬體效能,例如:增加CPU核數如32核,升級更好的網絡卡如萬兆,升級更好的硬碟如SSD,擴充硬碟容量如2T,擴充系統記憶體如128G;

2)提升單機架構效能,例如:使用Cache來減少IO次數,使用非同步來增加單服務吞吐量,使用無鎖資料結構來減少響應時間;

在網際網路業務發展非常迅猛的早期,如果預算不是問題,強烈建議使用“增強單機硬體效能”的方式提升系統併發能力,因為這個階段,公司的戰略往往是發展業務搶時間,而“增強單機硬體效能”往往是最快的方法。

不管是提升單機硬體效能,還是提升單機架構效能,都有一個致命的不足:單機效能總是有極限的。所以網際網路分散式架構設計高併發終極解決方案還是水平擴充套件。

水平擴充套件:只要增加伺服器數量,就能線性擴充系統性能。水平擴充套件對系統架構設計是有要求的,如何在架構各層進行可水平擴充套件的設計,以及網際網路公司架構各層常見的水平擴充套件實踐,是本文重點討論的內容。

高併發(High Concurrency)是網際網路分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。

提高系統併發能力的方式,方法論上主要有兩種:垂直擴充套件(Scale Up)與水平擴充套件(Scale Out)。前者垂直擴充套件可以通過提升單機硬體效能,或者提升單機架構效能,來提高併發性,但單機效能總是有極限的,網際網路分散式架構設計高併發終極解決方案還是後者:水平擴充套件。

網際網路分層架構中,各層次水平擴充套件的實踐又有所不同:

1)反向代理層可以通過“DNS輪詢”的方式來進行水平擴充套件;

2)站點層可以通過nginx來進行水平擴充套件;

3)服務層可以通過服務連線池來進行水平擴充套件;

4)資料庫可以按照資料範圍,或者資料雜湊的方式來進行水平擴充套件;

各層實施水平擴充套件後,能夠通過增加伺服器數量的方式來提升系統的效能,做到理論上的效能無限。

 

② 如何保障系統的高可用

我們都知道,單點是系統高可用的大敵,單點往往是系統高可用最大的風險和敵人,應該儘量在系統設計的過程中避免單點。方法論上,高可用保證的原則是“叢集化”,或者叫“冗餘”:只有一個單點,掛了服務會受影響;如果有冗餘備份,掛了還有其他backup能夠頂上。

保證系統高可用,架構設計的核心準則是:冗餘。

有了冗餘之後,還不夠,每次出現故障需要人工介入恢復勢必會增加系統的不可服務實踐。所以,又往往是通過“自動故障轉移”來實現系統的高可用。

③高可用性總結

高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。

方法論上,高可用是通過冗餘+自動故障轉移來實現的。

整個網際網路分層系統架構的高可用,又是通過每一層的冗餘+自動故障轉移來綜合實現的,具體的:

1)【客戶端層】到【反向代理層】的高可用,是通過反向代理層的冗餘實現的,常見實踐是keepalived + virtual IP自動故障轉移

2)【反向代理層】到【站點層】的高可用,是通過站點層的冗餘實現的,常見實踐是nginx與web-server之間的存活性探測與自動故障轉移

3)【站點層】到【服務層】的高可用,是通過服務層的冗餘實現的,常見實踐是通過service-connection-pool來保證自動故障轉移

4)【服務層】到【快取層】的高可用,是通過快取資料的冗餘實現的,常見實踐是快取客戶端雙讀雙寫,或者利用快取叢集的主從資料同步與sentinel保活與自動故障轉移;更多的業務場景,對快取沒有高可用要求,可以使用快取服務化來對呼叫方遮蔽底層複雜性

5)【服務層】到【資料庫“讀”】的高可用,是通過讀庫的冗餘實現的,常見實踐是通過db-connection-pool來保證自動故障轉移

6)【服務層】到【資料庫“寫”】的高可用,是通過寫庫的冗餘實現的,常見實踐是keepalived + virtual IP自動故障轉移

 

3、結語

併發量,是一個容量的概念,服務可以接受的最大任務數量,動態的看待它,還需要把效能考慮進去。效能,是一個速度的概念,單位時間內可以處理的任務數量。高併發和高效能是緊密相關的,提高應用的效能,是肯定可以提高系統的併發能力的。應用效能優化的時候,對於計算密集型和IO密集型還是有很大差別,需要分開來考慮。增加伺服器資源(CPU、記憶體、伺服器數量),絕大部分時候是可以提高應用的併發能力和效能(前提是應用能夠支援多工平行計算,多伺服器分散式計算才行),但也是要避免其中的一些問題,才可以更好的更有效率的利用伺服器資源。