1. 程式人生 > 其它 >基於網際網路三高架構綜述:高併發、高效能、高可用

基於網際網路三高架構綜述:高併發、高效能、高可用

基於網際網路三高架構綜述:高併發、高效能、高可用

張子怡1

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

 面向網際網路的三高系統,最關注的軟體質量屬性是:效能、可用性、伸縮性、擴充套件性、安全性。而構建此類系統,最常見的架構模式有:橫向分層、縱向分割、分散式化、叢集化、使用快取、使用非同步模式、使用冗餘、自動化(釋出、部署、監控)。網際網路三高架構:高併發、高效能、高可用,簡稱三高(3H),隨著移動應用與網站等多種網際網路產品的業務和應用不斷壯大,訪問使用者不斷增大,一般的技術架構勢必無法承受大量使用者高併發訪問帶來的壓力。本文章對於網際網路架構的高併發、高效能、高可用進行了介紹以及分析。

關鍵詞:網際網路;高併發;高效能;高可用;網際網路分層架構;技術實踐

Overview of Internet-based three high architectures: high concurrency, high performance, and high availability

Zhang Ziyi1

(1.Shijiazhuang Railway University,Shijiazhuang City Hebei Province,050043

Abstract: For the Internet-oriented three-high system, the most concerned software quality attributes are: performance, usability, scalability, scalability, and security. To build such systems, the most common architectural patterns are: horizontal layering, vertical segmentation, distributed, clustered, using cache, using asynchronous mode, using redundancy, automation (release, deployment, monitoring). The three high architectures of the Internet: high concurrency, high performance, and high availability, referred to as three highs (3H). Unable to withstand the pressure of high concurrent access by a large number of users. This article introduces and analyzes the high concurrency, high performance, and high availability of the Internet architecture.

Key words:Internet;High concurrency;High performance;High availability;Internet Layered Architecture;Technical practice

 

 

0引言

隨著各網際網路大廠業務需求的井噴式增長,業務架構早已不是個新詞。企業業務的高速發展、業務體量的不斷增長,業務場景的日益複雜化與差異化,以及不斷持續變化的業務需求,都對平臺化的架構演進以及系統設計提出了更多的挑戰和更高的要求。架構師在進行系統設計時需兼顧業務功能的實現以及同時保證系統的高併發、高可用、高效能。

 

1 大型網站的特點

使用者多,分佈廣泛;大流量,高併發;海量資料,服務高可用;安全環境惡劣,易受網路攻擊;功能多,變更快,頻繁釋出;從小到大,漸進發展;以使用者為中心;免費服務,付費體驗

 

1.1大型網站架構目標

高效能:提供快速的訪問體驗。

高可用:網站服務一直可以正常訪問。

可伸縮:通過硬體增加/減少,提高/降低處理能力。

擴充套件性:方便地通過新增/移除方式,增加/減少新的功能/模組。

安全性:提供網站安全訪問和資料加密、安全儲存等策略。

敏捷性:隨需應變,快速響應。

                                                                              

 

1 大型網站架構目標

 

2 高併發

接下來將介紹在JavaEE架構程式設計中所參與分析與學習的專案例項JSP+Spring+SpringMVC+Hibernate實現的校園失物招領網站,系統沒有使用常用的SSM或者SSH框架,而是已Spring+SpringMVC+Hibernate三個框架結合來完成。

 

2.1 什麼是高併發

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

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

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

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

QPS:每秒響應請求數。在網際網路領域,這個指標和吞吐量區分的沒有這麼明顯。 併發使用者數:同時承載正常使用系統功能的使用者數量。例如一個即時通訊系統,同時線上量一定程度上代表了系統的併發使用者數。

 

2.2高併發的關心的問題

高併發是現在網際網路分散式框架設計必須要考慮的因素之一,它是可以保證系統能被同時並行處理很多請求,對於高併發來說,它的指標有:響應時間及吞吐量。

系統對進來的請求反應的時間,比如你開啟一個頁面需要1秒,那麼這1秒就是響應時間。吞吐量是指每秒能處理多少請求數量,好比你吃飯,每秒能吃下多少顆米飯。秒查詢率:秒查詢率是指每秒響應請求數,和吞吐量差不多。併發使用者數:同時承載正常使用系統功能的使用者數量。例如一個即時通訊系統,同時線上量一定程度上代表了系統的併發使用者數。

 

2.3高併發的巨集觀⽬標

高併發絕不意味著只追求⾼效能。從巨集觀角度看,⾼併發系統設計的⽬標有三個:⾼效能、⾼可⽤,以及⾼可擴充套件。就是所謂的“三⾼”,三⾼不是孤⽴的,⽽是相互⽀撐的。⾼效能:效能體現了系統的並⾏處理能⼒,在有限的硬體投⼊下,提⾼效能意味著節省成本。同時,效能也反映了⽤戶體驗,響應時間分別是100毫秒和1秒,給⽤戶的感受是完全不同的。⾼可⽤:表⽰系統可以正常服務的時間。另外,如果系統只能做到90%可⽤,也會⼤⼤拖累業務。⾼擴充套件:表⽰系統的擴充套件能⼒,流量⾼峰時能否在短時間內完成擴容,更平穩地承接峰值流量,⽐如雙11活動、明星離婚等熱點事件。

 

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

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

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

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

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

在網際網路業務發展非常迅猛的早期,如果預算不是問題,強烈建議使用“增強單機硬體效能”的方式提升系統併發能力,因為這個階段,公司的戰略往往是發展業務搶時間,而“增強單機硬體效能”往往是最快的方法。不管是提升單機硬體效能,還是提升單機架構效能,都有一個致命的不足:單機效能總是有極限的。所以網際網路分散式架構設計高併發終極解決方案還是水平擴充套件。水平擴充套件:只要增加伺服器數量,就能線性擴充系統性能。水平擴充套件對系統架構設計是有要求的,如何在架構各層進行可水平擴充套件的設計,以及網際網路公司架構各層常見的水平擴充套件實踐,是本文重點討論的內容。

 

3高效能架構

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

l 使用者網路環境

請求/響應的資料包大小

業務系統 CPU、記憶體、磁碟等效能

l 業務鏈路的長度

l 下游系統的效能

l 演算法實現是否高效

 

高效能的架構是以使用者為中心,提供快速的網頁訪問體驗,主要引數有較短的響應時間、較大的併發處理能力、較高的吞吐量與穩定的效能引數。可分為前端優化、瀏覽器優化、應用層優化、程式碼層優化與儲存層優化:

l 前端優化:網站業務邏輯之前的部分。

瀏覽器優化:減少 HTTP 請求數,使用瀏覽器快取,啟用壓縮,CSS JS 位置,JS 非同步,減少 Cookie 傳輸;CDN 加速,反向代理。

l 應用層優化:處理網站業務的伺服器。使用快取,非同步,叢集。

程式碼優化:合理的架構,多執行緒,資源複用(物件池,執行緒池等),良好的資料結構,JVM調優,單例,Cache 等。

儲存優化:快取、固態硬碟、光纖傳輸、優化讀寫、磁碟冗餘、分散式儲存(HDFS)、NoSQL 等。

 

 

4 高可用架構

大型網站應該在任何時候都可以正常訪問,正常提供對外服務。因為大型網站的複雜性,分散式,廉價伺服器,開源資料庫,作業系統等特點,要保證高可用是很困難的,也就是說網站的故障是不可避免的。如何提高可用性,就是需要迫切解決的問題。首先,需要從架構級別考慮,在規劃的時候,就考慮可用性。行業內一般用幾個 9 表示可用性指標,比如四個 9(99.99),一年內允許的不可用時間是 53 分鐘。不同層級使用的策略不同,一般採用冗餘備份和失效轉移解決高可用問題:

應用層:一般設計為無狀態的,對於每次請求,使用哪一臺伺服器處理是沒有影響的。一般使用負載均衡技術(需要解決 Session 同步問題)實現高可用。

l 服務層:負載均衡,分級管理,快速失敗(超時設定),非同步呼叫,服務降級,冪等設計等。

資料層:冗餘備份(冷,熱備[同步,非同步],溫備),失效轉移(確認,轉移,恢復)。資料高可用方面著名的理論基礎是 CAP 理論。(永續性,可用性,資料一致性[強一致,使用者一致,最終一致])

 

4.1熔斷,提供過載保護

所謂過載保護,是指負載超過系統的承載能力時,系統會自動採取保護措施,確保自身不被壓垮。

熔斷就是在系統瀕臨崩潰的時候,立即中斷服務,從而保障系統穩定避免崩潰。它類似於電器中的“保險絲”,當電流過大的時候,“保險絲”會先被燒掉,斷開電流,以免電路過熱燒燬電器引起火災。

 

4.2限流,提供過載保護

限流的原理跟熔斷有點類似,都是通過判斷某個條件來確定是否執行某個策略。但是又有所區別,熔斷觸發過載保護,該節點會暫停服務,直到恢復。限流,則是隻處理自己能力範圍之內的請求,超量的請求會被限流。限流演算法主要有:計數器限流、滑動視窗限流、令牌桶限流、漏桶限流。

 

 

5結語

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

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