5000并发的qps是多少_高并发架构设计
點擊藍(lán)字,關(guān)注我們
01
概述
????高并發(fā)(High Concurrency)是互聯(lián)網(wǎng)分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一,它通常是指,通過設(shè)計保證系統(tǒng)能夠同時并行處理很多請求。
????高并發(fā)一方面可以提高資源利用率,加快系統(tǒng)響應(yīng)速度,但是同時也會帶來安全性,分布式事務(wù)、死鎖等問題。
????并發(fā):一個處理器同時處理多個任務(wù)。
????并行:多個處理器或者是多核的處理器同時處理多個不同的任務(wù)。
02
度量指標(biāo)
????并發(fā)的指標(biāo)一般有QPS,TPS,IOPS,并發(fā)用戶數(shù),PV,響應(yīng)時間等。
????2.1?QPS
??? QPS:每秒響應(yīng)請求數(shù),是一臺服務(wù)器每秒能夠相應(yīng)的查詢次數(shù),是對一個特定的查詢服務(wù)器在規(guī)定時間內(nèi)所處理流量多少的衡量標(biāo)準(zhǔn), 即每秒的響應(yīng)請求數(shù),也即是最大吞吐能力。
????2.2 TPS?
????Transactions Per Second,也就是事務(wù)數(shù)/秒。一個事務(wù)是指一個客戶機向服務(wù)器發(fā)送請求然后服務(wù)器做出反應(yīng)的過程。客戶機在發(fā)送請求時開始計時,收到服務(wù)器響應(yīng)后結(jié)束計時,以此來計算使用的時間和完成的事務(wù)個數(shù)。
??? QPS基本類似于TPS,但是不同的是,對于一個頁面的一次訪問,形成一個TPS;但一次頁面請求,可能產(chǎn)生多次對服務(wù)器的請求,服務(wù)器對這些請求,就可計入“QPS”之中。
????2.3?并發(fā)用戶數(shù)
????并發(fā)用戶數(shù):同時承載正常使用系統(tǒng)功能的用戶數(shù)量。例如一個即時通訊系統(tǒng),同時在線量一定程度上代表了系統(tǒng)的并發(fā)用戶數(shù)。
????2.4?響應(yīng)時間
????響應(yīng)時間:系統(tǒng)對請求做出響應(yīng)的時間。例如系統(tǒng)處理一個HTTP請求需要200ms,這個200ms就是系統(tǒng)的響應(yīng)時間。一般而言,用戶感知友好的高并發(fā)系統(tǒng),時延應(yīng)該控制在250毫秒以內(nèi)。
????2.5?PV
??? PV(Page View):頁面訪問量,即頁面瀏覽量或點擊量,用戶每次刷新即被計算一次。可以統(tǒng)計服務(wù)一天的訪問日志得到。?
03
設(shè)計思路
????互聯(lián)網(wǎng)分布式架構(gòu)設(shè)計,提高系統(tǒng)并發(fā)能力的方式,方法論上主要有兩種:垂直擴展(Scale Up,也叫豎向擴展)與水平擴展(Scale Out,也叫橫向擴展)。
????1、垂直方向:提升單機能力
????提升單機處理能力又可分為硬件和軟件兩個方面:
????硬件方向,升級服務(wù)器硬件,購買多核高頻機器,大內(nèi)存,大容量磁盤等。
????軟件方向,包括用更快的數(shù)據(jù)結(jié)構(gòu)(編程語言級別的并發(fā)編程),改進(jìn)架構(gòu),應(yīng)用多線程、協(xié)程(select/poll/epoll等IO多路復(fù)用技術(shù)),以及上性能優(yōu)化各種手段,但是這種方式很容易出現(xiàn)瓶頸。
??? 2、水平方向:分布式集群
????為了解決分布式系統(tǒng)的復(fù)雜性問題,一般會用到架構(gòu)分層和服務(wù)拆分,通過分層做隔離,通過微服務(wù)解耦。
????這個理論上沒有上限,只要做好層次和服務(wù)劃分,加機器擴容就能滿足需求,但實際上并非如此,一方面分布式會增加系統(tǒng)復(fù)雜性,另一方面集群規(guī)模上去之后,也會引入一堆服務(wù)發(fā)現(xiàn)、服務(wù)治理的新問題。
????因為垂直向的限制,所以,我們通常更關(guān)注水平擴展,高并發(fā)系統(tǒng)的實施也主要圍繞水平方向展開。
04
集群化
????單機的硬件擴展成本較高,軟件優(yōu)化易出現(xiàn)性能瓶頸,因此利用集群解決高并發(fā)問題。負(fù)載均衡是常用的解決方案,即把前端流量分配到不同的服務(wù)節(jié)點上。
????在集群化的架構(gòu)下,可以采用池化(內(nèi)存池,連接池,線程池),分布式緩存,分布式消息隊列,流控技術(shù)(服務(wù)降級,應(yīng)用拆分,限流)和數(shù)據(jù)庫高并發(fā)(分庫分表,讀寫分離等)提高并發(fā)能力。
????負(fù)載均衡可以分為3種:
????1、DNS負(fù)載均衡,客戶端通過URL發(fā)起網(wǎng)絡(luò)服務(wù)請求的時候,會去DNS服務(wù)器做域名解釋,DNS會按一定的策略(比如就近策略)把URL轉(zhuǎn)換成IP地址,同一個URL會被解釋成不同的IP地址,這便是DNS負(fù)載均衡,它是一種粗粒度的負(fù)載均衡,它只用URL前半部分,因為DNS負(fù)載均衡一般采用就近原則,所以通常能降低時延,但DNS有cache,所以也會更新不及時的問題。
????2、硬件負(fù)載均衡,通過布置F5,A10等專門的負(fù)載均衡設(shè)備到機房做負(fù)載均衡,性能高,但是價格昂貴。
????3、軟件負(fù)載均衡,利用軟件實現(xiàn)四層負(fù)載均衡(LVS)和七層負(fù)載均衡(Nginx)。
05
池化技術(shù)
? ??5.1 內(nèi)存池????
? ??內(nèi)存池創(chuàng)建的方法:
????1、對于用戶申請的大塊內(nèi)存使用內(nèi)存映射
????2、對于小塊內(nèi)存從內(nèi)存池合適的鏈表中取出
????注:Linux本身有內(nèi)存管理方式,但是系統(tǒng)級別的內(nèi)存優(yōu)化技術(shù)遠(yuǎn)不能滿足實際需求,比較流行的內(nèi)存優(yōu)化技術(shù)包括tcmalloc、ptmalloc、jemalloc等。
????內(nèi)存池的作用:
????1、存放大塊數(shù)據(jù)
????2、存放數(shù)據(jù)緩存
????5.2 進(jìn)程/線程池
????進(jìn)程池和線程池的作用:
????1、?避免動態(tài)啟動的時間開銷
????2、?使得處理更加單一
????3、?充分利用硬件資源
????進(jìn)程池和線程池的注意事項:
????1、?典型的生產(chǎn)者消費者問題
????2、?注意訪問共享資源存在的競爭
? ? 5.3 連接池
????連接池是創(chuàng)建和管理一個連接的緩沖池的技術(shù),這些連接準(zhǔn)備好被任何需要它們的線程使用,比如數(shù)據(jù)庫連接池。
? ? 連接池創(chuàng)建的方法:
????1、?預(yù)先分配固定數(shù)據(jù)的連接
????2、?對每一個連接都分配相應(yīng)的資源
????連接池的作用:
????1、?為創(chuàng)建新連接提速
????2、?可用于集群內(nèi)部永久性連接
06
緩存
????緩存可以分為本地緩存和分布式緩存。
????本地緩存:編程實現(xiàn)(成員變量、局部變量、靜態(tài)變量)。
????分布式緩存:借助Redis、Memcache實現(xiàn)。
????一般系統(tǒng)的寫入請求遠(yuǎn)少于讀請求,針對寫少讀多的場景,很適合引入緩存集群。在寫數(shù)據(jù)庫的時候同時寫一份數(shù)據(jù)到緩存集群里,然后用緩存承載大部分的讀請求,當(dāng)緩存中不存在的時候才去數(shù)據(jù)庫查找,這樣通過緩存集群,就可以用更少的機器資源承載更高的并發(fā)。
????緩存的命中率一般能做到很高,而且速度很快,處理能力也強(單機很容易做到幾萬并發(fā)),是理想的解決方案。
????當(dāng)然,在使用分布式緩存的時候,需要格外注意處理一致性問題,緩存擊穿,緩存穿透,緩存雪崩等問題。
07
消息隊列
????7.1 概述??
????分布式緩存在讀多寫少的場景性能優(yōu)異,對于寫操作較多的場景可以采用消息隊列集群,它可以很好地做寫請求異步化處理,實現(xiàn)削峰填谷的效果。
????消息隊列能做解耦,在只需要最終一致性的場景下,很適合用來配合做流控。
????業(yè)界有很多著名的消息中間件,比如ZeroMQ,rabbitMQ,kafka等。
????7.2?特點
??? 1、業(yè)務(wù)耦合;
????2、最終一致性;
??? 3、廣播;
????4、錯峰與流控。
08
流控
????8.1 服務(wù)降級
????自動降級:超時、失敗次數(shù)、故障、限流
????人工降級:秒殺、雙11大促等
????服務(wù)降級要考慮的問題:
????1、核心服務(wù)、非核心服務(wù)
????2、是否支持降級,降級策略
????8.2 應(yīng)用拆分
????應(yīng)用拆分原則:
??? 1、業(yè)務(wù)優(yōu)先;
??? 2、循序漸進(jìn);
??? 3、兼顧技術(shù):重構(gòu)、分層;
????4、可靠性測試
????8.3 限流
????限流的常用處理手段有:計數(shù)器、滑動窗口、漏桶、令牌。
????1、計數(shù)器法
????計數(shù)器是一種比較簡單的限流算法,在一段時間內(nèi),進(jìn)行計數(shù),與閥值進(jìn)行比較,到了時間臨界點,將計數(shù)器清0。
????但是,計數(shù)器法存在一個時間臨界點的問題。比如,在11:50:00到11:59:59這段時間內(nèi)沒有用戶請求,然后在12:00:01這一瞬時發(fā)出1000個請求,12:00:59又出現(xiàn)1000個請求,在這個臨界點可能會承受惡意用戶的大量請求,甚至超出系統(tǒng)預(yù)期的承受。
????2、滑動窗口
????由于計數(shù)器存在臨界點缺陷,后來出現(xiàn)了滑動窗口算法來解決。
????滑動窗口的意思是說把固定時間片,進(jìn)行劃分,并且隨著時間的流逝,進(jìn)行移動,這樣就巧妙的避開了計數(shù)器的臨界點問題。也就是說這些固定數(shù)量的可以移動的格子,將會進(jìn)行計數(shù)判斷閥值,因此格子的數(shù)量影響著滑動窗口算法的精度。
? ? 3、漏桶算法
????雖然滑動窗口有效避免了時間臨界點的問題,但是依然有時間片的概念,而漏桶算法在這方面比滑動窗口而言,更加先進(jìn)。
????有一個固定的桶,進(jìn)水的速率是不確定的,但是出水的速率是恒定的,當(dāng)水滿的時候是會溢出的。
????4、令牌桶算法
????從某種意義上講,令牌桶算法是對漏桶算法的一種改進(jìn),桶算法能夠限制請求調(diào)用的速率,而令牌桶算法能夠在限制調(diào)用的平均速率的同時還允許一定程度的突發(fā)調(diào)用。
????在令牌桶算法中,存在一個桶,用來存放固定數(shù)量的令牌。算法中存在一種機制,以一定的速率往桶中放令牌。每次請求調(diào)用需要先獲取令牌,只有拿到令牌,才有機會繼續(xù)執(zhí)行,否則選擇選擇等待可用的令牌、或者直接拒絕。
09
數(shù)據(jù)庫高并發(fā)
????數(shù)據(jù)庫高并發(fā)分為單機高并發(fā)(主要是存儲引擎實現(xiàn))和集群高并發(fā):
????1、單機高并發(fā)
??? InnoDB存儲引擎采用多版本并發(fā)控制技術(shù)(MVCC)在不加鎖的情況下,實現(xiàn)并發(fā)讀寫,同時通過事務(wù)隔離級別控制并發(fā)效率。
????2、集群高并發(fā)
????數(shù)據(jù)庫集群高并發(fā)主要是通過分庫分表、主備讀寫分離等方法實現(xiàn)的。
你們點點“分享”,給我充點兒電吧~
總結(jié)
以上是生活随笔為你收集整理的5000并发的qps是多少_高并发架构设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux用命令行进行无线连接,linu
- 下一篇: 【Python基础知识-pycharm版