成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大神總結:應對大流量的一些思路

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

前言

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

[[249406]]

應對大流量的一些思路

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

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

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

  • 緩存:說白了,就是讓數據盡早進入緩存,離程序近一點,不要大量頻繁的訪問DB。
  • 降級:如果不是核心鏈路,那么就把這個服務降級掉。打個比喻,現在的APP都講究千人千面,拿到數據后,做個性化排序展示,如果在大流量下,這個排序就可以降級掉!
  • 限流:大家都知道,北京地鐵早高峰,地鐵站都會做一件事情,就是限流了!想法很直接,就是想在一定時間內把請求限制在一定范圍內,保證系統不被沖垮,同時盡可能提升系統的吞吐量。

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

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

限流的常用方式

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

1. 計數器

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

代碼實例:

這里需要注意的是,存在一個時間臨界點的問題。舉個栗子,在12:01:00到12:01:58這段時間內沒有用戶請求,然后在12:01:59這一瞬時發出100個請求,OK,然后在12:02:00這一瞬時又發出了100個請求。

這里你應該能感受到,在這個臨界點可能會承受惡意用戶的大量請求,甚至超出系統預期的承受。

2. 滑動窗口

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

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

3. 漏桶

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

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

代碼實現:

4. 令牌桶

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

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

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

代碼實現:

限流神器:Guava RateLimiter

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

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

代碼示例:

分布式場景下的限流

上面所說的限流的一些方式,都是針對單機而言的,其實大部分的場景,單機的限流已經足夠了。分布式下限流的手段常常需要多種技術相結合,比如Nginx+Lua,Redis+Lua等去做。

本文主要討論的是單機的限流,這里就不在詳細介紹分布式場景下的限流了。

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

責任編輯:趙寧寧 來源: 天下數據
相關推薦

2009-09-27 11:09:42

API設計

2015-12-08 09:05:41

Java內部類

2009-06-22 15:36:00

如何學好java

2011-07-12 09:47:53

WebService

2011-11-28 15:57:26

MySQL數據庫主從配置

2019-09-11 09:30:44

2018-09-28 04:46:19

負載均衡JavaLVS

2011-07-29 09:33:21

iPhone 設計

2009-07-15 16:16:22

JDBC下載

2020-04-10 08:50:37

Shell腳本循環

2020-05-19 14:35:42

Shell腳本循環

2012-07-03 13:55:00

ASP.NET

2013-12-24 14:50:39

Ember.js框架

2020-09-28 06:45:42

故障復盤修復

2009-11-26 10:32:57

PHP代碼優化

2021-07-30 20:59:21

MySQL內存.參數

2017-11-07 09:06:32

2015-11-18 10:53:28

2012-01-09 16:02:19

JavaJVM

2020-10-19 19:25:32

Python爬蟲代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91视频a| www视频在线观看 | 亚洲成人高清 | 亚洲精品国产成人 | 色av一区| 久久久久久久久久久久久9999 | a级大毛片| 国产性网| 男人的天堂中文字幕 | 成人欧美一区二区三区黑人孕妇 | 日本在线看片 | 一区| 亚洲国产一区二区三区在线观看 | 成人精品在线观看 | 久久久性 | 久久成人精品视频 | 国产成人免费视频网站视频社区 | 97caoporn国产免费人人 | 日韩中文字幕av | 欧美精品1区2区3区 免费黄篇 | 天天干在线播放 | 国产精品一区久久久久 | 欧美极品在线 | 夜夜爽99久久国产综合精品女不卡 | 色婷婷婷婷色 | 欧美成人不卡 | 亚洲成av人片在线观看 | 黄久久久 | 久久69精品久久久久久久电影好 | 久久一区二区三区四区 | 国产 日韩 欧美 在线 | 欧美精品久久久久 | 9久久精品 | 成人av播放 | 午夜影院在线观看视频 | av黄色在线 | 久久精品成人 | 成人免费看黄网站在线观看 | 手机看黄av免费网址 | 在线观看日韩av | 99福利|