一、什么是五高? 五高即: 高可用、高可擴展、高性能、高安全、高可管理 高可用(High Availability)即應用全年的停機時長要在標準范圍內。 2個9即99%是基本可用,全年不可用時間是87.6小時 3個9即99.9%是基本可用,全年不可用時間是8.76小時 4個9即99.99%是基本可用,全年不可用時間是52.56分鐘 5個9即99.999%是基本可用,全年不可用時間是5.256分鐘 經常說的高并發(fā)并不是五高之一,高并發(fā)即通過設計保證系統(tǒng)能夠同時并行處理很多請求 高并發(fā)相關常用的一些指標有響應時間(Response Time),吞吐量(Throughput),每秒查詢率QPS(Query Per Second),并發(fā)用戶數等。 響應時間:系統(tǒng)對請求做出響應的時間。例如系統(tǒng)處理一個HTTP請求需要200ms,這個200ms就是系統(tǒng)的響應時間。 吞吐量:單位時間內處理的請求數量。 QPS:每秒響應請求數。在互聯(lián)網領域,這個指標和吞吐量區(qū)分的沒有這么明顯。 并發(fā)用戶數:同時承載正常使用系統(tǒng)功能的用戶數量。例如一個即時通訊系統(tǒng),同時在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數。 二、如何保證高可用? 保證系統(tǒng)正常運行的規(guī)則就是:冗余,系統(tǒng)增加了冗余還不夠當然如果系統(tǒng)之間出現了故障,人工干預則需要耗時,為了保證高可用就需要自動故障轉移,即一個節(jié)點宕機立即自動切到另外一臺保證系統(tǒng)的高可用。 三、互聯(lián)網架構分層? 還記的大學時學習的計算機網絡這本書嗎,里面的OSI七層模型首先來回憶一下。 OSI七層模型: 第一層 物理層,第二層 數據鏈路層 ,第三層 網絡層,第四層 傳輸層,第五層 會話層,第六層 表示層 第七層 應用層
如上圖,是互聯(lián)網分布式架構分為: 客戶端層: 調用方是 應用APP或者PC瀏覽器 硬件負載均衡層: F5可以 匯聚鏈接,去除https的s, 負載請求 即典型的三明治結構。 是一種硬件的負載,而F5的探測機制:心跳 一問一答形式和發(fā)送多次,比如發(fā)送三次在多少時間內三次沒有應答就證明斷鏈。 而F5屬于溫備,即有多臺F5,備用機器啟動但是限流。 除了F5,還有 DNS和HA Proxy可以解決同樣的問題。 反向代理層:系統(tǒng)入口, 使用nginx進行反向代理,實現原理是: keep alived + virtual IP web應用層:實現核心應用邏輯,返回html或者json 服務層:如果實現了服務化,就有這一層 數據-緩存:緩存加速訪問存儲 數據-數據庫層:數據庫固化數據存儲 四、如何實現各個層級之間的擴展(即冗余)? 硬件負載均衡層: 硬負載均衡層的水平擴展,是通過三明治結構實現的。在這一層布三層F5實現水平擴展。F5的官方名稱叫本地流量管理器,可以做4-7層負載均衡,具有負載均衡,應用交換,會話交換,狀態(tài)監(jiān)控,智能網絡地址轉換,通用持續(xù)性,相應錯誤處理、高級路由,SSL加速,TCP優(yōu)化,IPV6網關,智能端口鏡像,SSL加速,智能HTTP壓縮,TCP優(yōu)化,第7層速率整形、內容緩沖、內容轉換、連接加速、連接加速、高速緩存、Cookie加密、選擇性內容加密、應用工具過濾、拒絕服務(Dos)攻擊、SYN FLood保護、防火墻----包過濾、包消毒等。 F5提供12種靈活的算法將所有流量均衡的分配到各個服務器,而面對用戶,只是一臺虛擬服務器。假如一臺服務器發(fā)生宕機,F5會檢查出來并將該服務器標識為宕機,從而不將用戶的訪問請求傳送到該臺發(fā)生故障的服務器上,一旦宕機恢復又F5查證后又將流量切到該恢復的服務器上。 反向代理層: 反向代理層水平擴展是通過 DNS輪詢實現,如上圖dns-server對于一個域名配置了多個解析IP,每次DNS解析請求來訪問dns-server,會輪詢這些ip, 當nginx成為瓶頸的時候,只要增加服務器數量,新增的nginx服務的部署,增加一個外網ip就能擴展反向代理層的性能,做到理論上的無限高并發(fā)。 web應用層(服務器節(jié)點): web應用層的水平擴展,即服務端節(jié)點,是通過nginx實現的,通過修改nginx.conf可以設置多個web后端 當web后端成為瓶頸的時候,只要增加服務器的數量部署,在nginx配置中配置新的web后端,就能擴展站點層的性能,做到理論上的無限高并發(fā)。 服務層: 服務層水平擴展是通過服務連接池實現的,站點通過RPC-客戶端調用下游的服務層RPC-服務端中的連接池會建立與下游服務多個連接,當服務成為瓶頸的時候,只要增加服務器數量,新增服務部署,在RPC-客戶端處建立新的下游服務連接,就能擴展服務層性能,做到理論上的無限高并發(fā),如果需要優(yōu)雅的進行服務層自動擴容,則需要zookeeper等注冊發(fā)現。 數據層的水平擴展: 即將一臺服務器上的數據(緩存和數據庫)水平拆分到不同服務器上去以達到擴充系統(tǒng)性能的目的 以數據庫為例,按照范圍水平拆分:
每一個數據服務,存儲一定范圍數據,上圖為例,user0庫存儲的范圍0-1kw,user1庫存儲的范圍1kw-2kw 優(yōu)點:1、規(guī)則簡單,service只需要判斷一下uid范圍就能路由到對應的存儲服務; 2、數據均衡性好; 3、比較容易擴展,可以隨時加一個uid[2kw到3kw]的數據服務 缺點:請求的負載不一定均衡,一般來說,新注冊的用戶會比老用戶更加活躍,大的排列服務請求壓力會更大。 以數據庫為例,按照哈希水平拆分:
每一個數據庫,存儲某個key值hash后的部分數據上圖為例 user0庫存儲偶數uid數據,user1庫存儲奇數uid數據 優(yōu)點: 1、規(guī)則簡單,service只需對uid進行hash能路由到對應得存儲服務; 2、數據均衡性好 3、請求均衡性好 缺點: 不容易擴展,擴展一個數據服務,與主從同步讀寫分離來擴充數據庫性能的方式有本質不同 通過水平擴展來擴充系統(tǒng)性能,與主從同步讀寫分離來擴充數據庫性能的方式有本質不同: 1、每個服務器上存儲的數據量是總量的1/n,所以單機的性能也會有提升; 2、n個服務器上的數據沒有交集,那個服務器上數據的并集是數據的全集; 3、數據水平拆分到了n個服務器上,理論上讀性能擴充了n倍多。 通過主從同步讀寫分離擴展數據庫性能: 1、每個服務器上存儲的數據量和總量相同; 2、n個服務器上的數據都一樣,都是全集; 3、理論上讀性能擴充了n倍,寫仍然是單點,寫性能不變;
|
|
來自: 火鳥課堂 > 《IT與互聯(lián)網》