作業系統之高併發

2021-10-09 14:26:32 字數 2711 閱讀 2695

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

高併發相關常用的一些指標有響應時間(response time),吞吐量(throughput),每秒查詢率qps(query per second),併發使用者數等。

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

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

網際網路分布式架構設計,提高系統併發能力的方式,方**上主要有兩種:垂直擴充套件(scale up)與水平擴充套件(scale out)

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

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

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

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

常見網際網路分布式架構如上,分為:

反向**層:系統入口,反向**

站點應用層:實現核心應用邏輯,返回html或者json

服務層:如果實現了服務化,就有這一層

資料-快取層:快取加速訪問儲存

資料-資料庫層:資料庫固化資料儲存

反向**層的水平擴充套件,是通過「dns輪詢」實現的:dns-server對於乙個網域名稱配置了多個解析ip,每次dns解析請求來訪問dns-server,會輪詢返回這些ip。

當nginx成為瓶頸的時候,只要增加伺服器數量,新增nginx服務的部署,增加乙個外網ip,就能擴充套件反向**層的效能,做到理論上的無限高併發。

站點層的水平擴充套件,是通過「nginx」實現的。通過修改nginx.conf,可以設定多個web後端。

當web後端成為瓶頸的時候,只要增加伺服器數量,新增web服務的部署,在nginx配置中配置上新的web後端,就能擴充套件站點層的效能,做到理論上的無限高併發。

服務層的水平擴充套件,是通過「服務連線池」實現的。

站點層通過rpc-client呼叫下游的服務層rpc-server時,rpc-client中的連線池會建立與下游服務多個連線,當服務成為瓶頸的時候,只要增加伺服器數量,新增服務部署,在rpc-client處建立新的下游服務連線,就能擴充套件服務層效能,做到理論上的無限高併發。如果需要優雅的進行服務層自動擴容,這裡可能需要配置中心裡服務自動發現功能的支援。

在資料量很大的情況下,資料層(快取,資料庫)涉及資料的水平擴充套件,將原本儲存在一台伺服器上的資料(快取,資料庫)水平拆分到不同伺服器上去,以達到擴充系統效能的目的。

網際網路資料層常見的水平拆分方式有這麼幾種,以資料庫為例:

按照範圍水平拆分

每乙個資料服務,儲存一定範圍的資料,上圖為例:

user0庫,儲存uid範圍1-1kw

user1庫,儲存uid範圍1kw-2kw

這個方案的好處是:

不足是:

按照雜湊水平拆分

每乙個資料庫,儲存某個key值hash後的部分資料,上圖為例:

user0庫,儲存偶數uid資料

user1庫,儲存奇數uid資料

這個方案的好處是:

不足是:

這裡需要注意的是,通過水平拆分來擴充系統效能,與主從同步讀寫分離來擴充資料庫效能的方式有本質的不同。

通過水平拆分擴充套件資料庫效能:

通過主從同步讀寫分離擴充套件資料庫效能:

快取層的水平拆分和資料庫層的水平拆分類似,也是以範圍拆分和雜湊拆分的方式居多,就不再展開。

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

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

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

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

《作業系統》併發

相關術語 程序的互動 根據程序相互之間知道對方的程度分類為如下幾個等級。互斥的要求 互斥的硬體支援 中斷禁用 專用機器指令 比較和交換指令,交換指令 互斥的軟體支援 訊號量看成乙個值為整數的變數。主要有三個操作 訊號量可以初始化為非負數 semwait操作使訊號量減一,若值為負數,則阻塞執行semw...

併發程式設計 作業系統

一 作業系統的發展史 1.手工操作 穿孔卡片 對應於程式和資料的已穿孔的紙帶 或卡片 裝入輸入機 啟動輸入機 把程式和資料輸入計算機記憶體 通過控制台開關啟動程式針對資料執行 計算完畢 印表機輸出計算結果 使用者取走結果並卸下紙帶 或卡片 缺點 使用者獨佔全機。不會出現因cpu資源已被其他使用者占用...

併發程式設計 作業系統 併發 簡介

1,作業系統介紹 現代的作業系統中有 分時技術 多道技術 實時技術.多道技術 可以在計算機中同時存在多個程式,當乙個程式在進行io操作的時候,另外乙個程式可以使用cpu 分時技術 在多道技術的基礎上 反而降低了cpu的利用率,但是提高了使用者體驗 特點 多路性.若干個使用者同時使用一台計算機.圍觀上...