新聞資訊  快訊  焦點  財經  政策  社會
互 聯 網   電商  金融  數據  計算  技巧
生活百科  科技  職場  健康  法律  汽車
手機百科  知識  軟件  修理  測評  微信
軟件技術  應用  系統  圖像  視頻  經驗
硬件技術  知識  技術  測評  選購  維修
網絡技術  硬件  軟件  設置  安全  技術
程序開發  語言  移動  數據  開源  百科
安全防護  資訊  黑客  木馬  病毒  移動
站長技術  搜索  SEO  推廣  媒體  移動
財經百科  股票  知識  理財  財務  金融
教育考試  育兒  小學  高考  考研  留學
您當前的位置:首頁 > IT百科 > 站長技術 > 服務器

對高并發流量控制的一點思考

時間:2019-11-21 11:50:18  來源:  作者:

前言

在實際項目中,曾經遭遇過線上5W+Qps的峰值,也在壓測狀態下經歷過10W+QPS的大流量請求,本篇的話題主要就是自己對高并發流量控制的一點思考。

應對大流量的一些思路

首先,我們來說一下什么是大流量?

大流量,我們很可能會冒出:TPS(每秒事務量),QPS(每秒請求量),1W+,5W+,10W+,100W+...。其實并沒有一個絕對的數字,如果這個量造成了系統的壓力,影響了系統的性能,那么這個量就可以稱之為大流量了。

其次,應對大流量的一些常見手段是什么?

緩存:說白了,就是讓數據盡早進入緩存,離程序近一點,不要大量頻繁的訪問DB。

降級:如果不是核心鏈路,那么就把這個服務降級掉。打個比喻,現在的App都講究千人千面,拿到數據后,做個性化排序展示,如果在大流量下,這個排序就可以降級掉!

限流:大家都知道,北京地鐵早高峰,地鐵站都會做一件事情,就是限流了!想法很直接,就是想在一定時間內把請求限制在一定范圍內,保證系統不被沖垮,同時盡可能提升系統的吞吐量。

注意到,有些時候,緩存和降級是解決不了問題的,比如,電商的雙十一,用戶的購買,下單等行為,是涉及到大量寫操作,而且是核心鏈路,無法降級的,這個時候,限流就比較重要了。

那么接下來,我們重點說一下,限流。

限流的常用方式

限流的常用處理手段有:計數器、滑動窗口、漏桶、令牌。

計數器
 

計數器是一種比較簡單的限流算法,用途比較廣泛,在接口層面,很多地方使用這種方式限流。在一段時間內,進行計數,與閥值進行比較,到了時間臨界點,將計數器清0。

對高并發流量控制的一點思考

 


對高并發流量控制的一點思考

 

這里需要注意的是,存在一個時間臨界點的問題。舉個栗子,在12:01:00到12:01:58這段時間內沒有用戶請求,然后在12:01:59這一瞬時發出100個請求,OK,然后在12:02:00這一瞬時又發出了100個請求。這里你應該能感受到,在這個臨界點可能會承受惡意用戶的大量請求,甚至超出系統預期的承受。

滑動窗口
 

由于計數器存在臨界點缺陷,后來出現了滑動窗口算法來解決。

滑動窗口的意思是說把固定時間片,進行劃分,并且隨著時間的流逝,進行移動,這樣就巧妙的避開了計數器的臨界點問題。也就是說這些固定數量的可以移動的格子,將會進行計數判斷閥值,因此格子的數量影響著滑動窗口算法的精度。

漏桶
 

雖然滑動窗口有效避免了時間臨界點的問題,但是依然有時間片的概念,而漏桶算法在這方面比滑動窗口而言,更加先進。

有一個固定的桶,進水的速率是不確定的,但是出水的速率是恒定的,當水滿的時候是會溢出的。

對高并發流量控制的一點思考

 


對高并發流量控制的一點思考

 

令牌桶
 

注意到,漏桶的出水速度是恒定的,那么意味著如果瞬時大流量的話,將有大部分請求被丟棄掉(也就是所謂的溢出)。為了解決這個問題,令牌桶進行了算法改進。

生成令牌的速度是恒定的,而請求去拿令牌是沒有速度限制的。這意味,面對瞬時大流量,該算法可以在短時間內請求拿到大量令牌,而且拿令牌的過程并不是消耗很大的事情。(有一點生產令牌,消費令牌的意味)

不論是對于令牌桶拿不到令牌被拒絕,還是漏桶的水滿了溢出,都是為了保證大部分流量的正常使用,而犧牲掉了少部分流量,這是合理的,如果因為極少部分流量需要保證的話,那么就可能導致系統達到極限而掛掉,得不償失。

對高并發流量控制的一點思考

 

限流神器:Guava RateLimiter

Guava不僅僅在集合、緩存、異步回調等方面功能強大,而且還給我們封裝好了限流的API!

Guava RateLimiter基于令牌桶算法,我們只需要告訴RateLimiter系統限制的QPS是多少,那么RateLimiter將以這個速度往桶里面放入令牌,然后請求的時候,通過tryAcquire()方法向RateLimiter獲取許可(令牌)。

對高并發流量控制的一點思考

 

分布式場景下的限流

上面所說的限流的一些方式,都是針對單機而言的,其實大部分的場景,單機的限流已經足夠了。分布式下限流的手段常常需要多種技術相結合,比如Nginx+Lua,redis+Lua等去做。本文主要討論的是單機的限流,這里就不在詳細介紹分布式場景下的限流了。

一句話,讓系統的流量,先到隊列中排隊、限流,不要讓流量直接打到系統上。

來自51CTO博客作者zfz_linux_boy作品



Tags:高并發   點擊:()  評論:()
聲明:本站部分內容來自互聯網,內容觀點僅代表作者本人,如有任何版權侵犯請與我們聯系,我們將立即刪除。
▌相關評論
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
▌相關推薦
Nginx現在是非常火爆的web服務器,她使用更少的資源,支持更多的并發連接數,實現了linux的epoll模型。Nginx采用的是多進程單線程和多路IO復用模型。使用了I/O多路復用技術的Ng...【詳細內容】
2019-11-26   高并發  點擊:(3)  評論:(0)  加入收藏
前言在實際項目中,曾經遭遇過線上5W+QPS的峰值,也在壓測狀態下經歷過10W+QPS的大流量請求,本篇的話題主要就是自己對高并發流量控制的一點思考。應對大流量的一些思路首先,我們...【詳細內容】
2019-11-21   高并發  點擊:(4)  評論:(0)  加入收藏
一、傳統并發模型的缺點基于線程的并發 特點: 每任務一線程 直線式的編程 使用資源昂高, context切換代價高,競爭鎖昂貴 太多線程可能導致吞吐量下降,響應時間暴漲。基于事件的...【詳細內容】
2019-11-20   高并發  點擊:(5)  評論:(0)  加入收藏
有很多“奇技淫巧”的高并發,但基礎知識的掌握程度決定了我們所寫代碼的并發程度,對基礎足夠了解才能寫出并發性能更高的程序,所以本文先總結一些基礎,然后再看一些具體例子。這個總結不是從頭開始的詳細介紹,另外影響并發...【詳細內容】
2019-11-11   高并發  點擊:(13)  評論:(0)  加入收藏
寫在前面最近在進行服務器的優化,正好在看nginx相關的知識,所以把一些知識整理一下。參考資料為《Nginx高性能web服務器詳解》,建議大家都去讀讀這本書。我的機器為四核CPU,16G...【詳細內容】
2019-10-30   高并發  點擊:(11)  評論:(0)  加入收藏
網站訪問數據的特點大多數呈現為“二八定律”:80%的業務訪問集中在20%的數據上。例如:在某一段時間內百度的搜索熱詞可能集中在少部分的熱門詞匯上;新浪微博某一時期也可能大家廣泛關注的主題也是少部分事件。...【詳細內容】
2019-10-29   高并發  點擊:(27)  評論:(0)  加入收藏
一、大型網站系統的特點高并發,大流量: 需要面對高并發用戶,大流量訪問,Google日均PV數為35億,日均IP訪問數為3億,2011年騰訊QQ最大用戶在線數1.4億,淘寶2012年雙11活動一天交易額...【詳細內容】
2019-10-22   高并發  點擊:(5)  評論:(0)  加入收藏
Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景本文介紹阿里開源限流熔斷方案Sentinel功能、原理、架構、快速入門以及相關框架比較基本介紹1 名詞解釋 服務...【詳細內容】
2019-10-15   高并發  點擊:(81)  評論:(0)  加入收藏
php 高并發解決思路解決方案,如何應對網站大流量高并發情況。本文為大家總結了常用的處理方式,但不是細節,后續一系列細節教程給出。希望大家喜歡。一 高并發的概念在互聯網時...【詳細內容】
2019-10-08   高并發  點擊:(22)  評論:(0)  加入收藏
什么是高并發?高并發(High Concurrency)是互聯網分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計保證系統能夠同時并行處理很多請求。高并發相關的常見指標有哪些? ...【詳細內容】
2019-10-08   高并發  點擊:(13)  評論:(0)  加入收藏
一般一個網站剛開始建立的時候,用戶量是很少的,大概可能就幾萬或者幾十萬的用戶量,每天活躍的用戶可能就幾百或者幾千個。...【詳細內容】
2019-09-20   高并發  點擊:(32)  評論:(0)  加入收藏
這是一篇很短的文章,但是我覺這幾個概念很重要,需要有清晰的理解。這篇文章也講述的比較清楚,所以就轉發了。持續分享和撰寫互聯網相關的知識點,歡迎關注我。當提起這三個詞的時...【詳細內容】
2019-09-17   高并發  點擊:(30)  評論:(0)  加入收藏
前言高并發經常會發生在有大活躍用戶量,用戶高聚集的業務場景中,如:秒殺活動,定時領取紅包等。為了讓業務可以流暢的運行并且給用戶一個好的交互體驗,我們需要根據業務場景預估達...【詳細內容】
2019-09-11   高并發  點擊:(19)  評論:(0)  加入收藏
前言一般來說,現在的互聯網應用網站或者APP,它的整體流程可以用我們這個圖里展示的來表示,用戶請求開始,從這個界面是最里面的瀏覽器和APP,到網絡轉發,再到應用服務,最后到存儲,這純...【詳細內容】
2019-09-05   高并發  點擊:(35)  評論:(0)  加入收藏
一直再說高并發,多少QPS才算高并發?業務系統服務,單機,集群分別是多少呢?高并發的四個角度只說并發不提高可用就是耍流氓。可以從四個角度討論這個問題。 首先是無狀態前端機器不...【詳細內容】
2019-09-02   高并發  點擊:(419)  評論:(0)  加入收藏
高并發下的數據安全我們知道在多線程寫入同一個文件的時候,會存現“線程安全”的問題(多個線程同時運行同一段代碼,如果每次運行結果和單線程運行的結果是一樣的,結果和預期相同...【詳細內容】
2019-08-20   高并發  點擊:(152)  評論:(0)  加入收藏
概述對于高并發架構,毫無疑問緩存是最重要的一環,對于大量的高并發,可以采用三層緩存架構來實現,nginx+redis+ehcache,下面對這每個環節做一下介紹。nginx對于中間件nginx常用來...【詳細內容】
2019-08-19   高并發  點擊:(128)  評論:(0)  加入收藏
1:配置executor屬性打開/conf/server.xml文件,在Connector之前配置一個線程池:<Executor name="tomcatThreadPool" namePrefix="tomcatThreadPool-" maxThreads="1000" max...【詳細內容】
2019-08-08   高并發  點擊:(236)  評論:(0)  加入收藏
其實所謂的高并發,如果你要理解這個問題呢,其實就得從高并發的根源出發,為啥會有高并發?為啥高并發就很牛逼?我說的淺顯一點,很簡單,就是因為剛開始系統都是連接數據庫的,但是要知...【詳細內容】
2019-07-31   高并發  點擊:(55)  評論:(0)  加入收藏
本文是通過watch(監控)+mutil(事務)實現應用于在分布式高并發處理等相關場景。下邊先通過redis-cli.exe來測試多個線程修改時,遇到問題及解決問題。高并發下修改同一個key遇到的...【詳細內容】
2019-07-19   高并發  點擊:(39)  評論:(0)  加入收藏
最新更新
欄目熱門
欄目頭條
31选7开奖11185