1. 程式人生 > 其它 >網際網路“三高”的簡述及其應用

網際網路“三高”的簡述及其應用

劉陽1

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

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

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

中圖分類號:TP393.092   文獻標誌碼:A


0  引言

網際網路應用系統開發肯定經常會看到高併發、高效能、高可用這三個詞,可謂是耳熟能詳,而具體的含義和關係真的如你所想的,真正的理解了嗎?

1  “三高”架構概述

高併發(High Concurrency)是網際網路分散式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時並行處理很多請求。 高併發相關常用的一些指標有響應時間(Response Time),吞吐量(Throughput),每秒查詢率QPS(Query Per Second),併發使用者數等

;高效能(High Performance)就是指程式處理速度快,所佔記憶體少,cpu佔用率低;高可用性(High Availability)通常來描述一個系統經過專門的設計,從而減少停工時間,而保持其服務的高度可用性(一直都能用)。

2  高併發

我們使用 QPS(Queries Per Second,每秒查詢率)來衡量系統承載能力。架構策略有哪些?

1、負載均衡

正所謂雙拳難敵四手,高併發撐場面的首選方案就是叢集化部署,一臺伺服器承載的QPS有限,多臺伺服器疊加效果就不一樣了。

如何將流量轉發到伺服器叢集,這裡面就要用到負載均衡,比如:LVS 和 Nginx。

常用的負載演算法有輪詢法、隨機法、源地址雜湊法、加權輪詢法、加權隨機法、最小連線數法等。

2、池化技術

複用單個連線無法承載高併發,如果每次請求都新建連線、關閉連線,考慮到TCP的三次握手、四次揮手,有時間開銷浪費。池化技術的核心是資源的“預分配”和“迴圈使用”,常用的池化技術有執行緒池、程序池、物件池、記憶體池、連線池、協程池。

3、流量漏斗

上面講的是正向方式提升系統QPS,我們也可以逆向思維,做減法,攔截非法請求,將核心能力留給正常業務!

網際網路高併發流量並不都是純淨的,也有很多惡意流量(比如黑客攻擊、惡意爬蟲、黃牛、秒殺器等),我們需要設計流量攔截器,將那些非法的、無資格的、優先順序低的流量過濾掉,減輕系統的併發壓力。

3  高效能

效能直接影響使用者的感官體驗,訪問一個系統,如果超過

5秒沒有響應,絕大數使用者會選擇離開。

那麼有哪些因素會影響系統的效能呢?

使用者網路環境

請求/響應的資料包大小

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

業務鏈路的長度

下游系統的效能

1、高效能快取

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

2、日誌優化,避免IO瓶頸

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

IO中斷過程中,如果此時有其他任務執行緒可排程,系統會直接排程其他執行緒,這樣 CPU 就相應顯示為 Usr 或 Sys;但是如果此時系統較空閒,無其他任務可以排程,CPU 就會顯示為 iowait(實際上與 idle 無本質區別)。

磁碟有個效能指標:IOPS,即每秒讀寫次數,效能較好的固態硬碟,IOPS 大概在 3 萬左右。對於秒殺系統,如果單節點QPS在10萬,每次請求產生3條日誌,那麼日誌的寫入QPS在 30W/s,磁碟根本扛不住。

Linux 有一種特殊的檔案系統:tmpfs(臨時檔案系統),它是一種基於記憶體的檔案系統,由作業系統管理。當我們寫磁碟的時候實際是寫到記憶體中,當日志文件達到我們的設定閾值,作業系統會將日誌寫到磁碟中,並將tmpfs中的日誌檔案刪除。

這種批量化、順序寫,大大提升了磁碟的吞吐效能!

4  高可用

網站設計初期遇到的問題還是資料庫的設計,當時並沒有特別確定資料庫建表該建什麼,後來經過在百度網站的多次搜尋查閱參考最終才確定了資料庫的基本結構;網站設計中期主要是應對一些輸入輸出的BUG,解決方案是應用junit進行反覆測試,然後不斷完善對輸入輸出格式的限定,最終算是大體上完成了系統。網站設計後期主要應對的問題是網站安全性維護,我們採用了定期備份網站和資料庫,有條件的話儘量在一個月或者一週備份一次,發現問題及時恢復。不輕易安裝不熟悉的外掛主題,不隨意新增有呼叫外部連結的程式碼,因為這些不管是外掛主題還是程式碼都有可能被留後門的嫌疑。最終完成了對網站安全性的維護。

高可用指標是指用來衡量一個系統可用性有多高。

MTBF(Mean Time Between Failure),系統可用時長

MTTR(Mean Time To Repair),系統從故障後到恢復正常所耗費的時間

SLA(Service-Level Agreement),服務等級協議,用於評估服務可用性等級。計算公式是 MTBF/(MTBF+MTTR)。

技術架構,高可用有哪些策略?

多雲架構、異地多活、異地備份

主備切換,如redis快取、mysql資料庫,主備節點會實時資料同步、備份。如果主節點不可用,自動切換到備用節點

微服務,無狀態化架構,業務叢集化部署,有心跳檢測,能最短時間檢測到不可用的服務。

通過熔斷、限流,解決流量過載問題,提供過載保護

重視web安全,解決攻擊和XSS問題

1、主備切換,縮減故障時間

當系統出現故障時,首要任務不是立馬查詢原因,考慮到故障的複雜樣,定位排查要花些時間,等問題修復好,SLA也降了好幾個檔。有沒有更快的方式解決這個問題?那就是故障轉移。

2、熔斷,提供過載保護

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

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

4  結束語

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

參考文獻:

[1]基於Nginx和Redis的高併發Web場景下快取的研究與設計[D]. 陳思.東華理工大學 2021

[2]基於負載均衡和服務流控的高併發訪問機制的研究[D]. 張金鵬.南昌大學 2021

[3]集中採購系統交易管理子系統設計與實現[D]. 李旭東.大連理工大學 2021

[4]面向物聯網系統的併發性優化研究與實現[D]. 張超超.北京郵電大學 2021

[5]面向異構系統的時序教育大資料視覺化平臺的設計與實現[D]. 楊啟航.中國科學院大學(中國科學院瀋陽計算技術研究所) 2021

[6]基於微服務技術架構的京淘商城系統重構研究[D]. 鄧秀輝.昆明理工大學 2021