作者:张丰哲

https://www.jianshu.com/p/d9504fc0af4d

先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的是,楚枫在刚刚踏入核心地带时,明明只是灵武七重,而在这两个月不到的时间,连跳两重修为,又跳过一个大境界,踏入了元武一重,这般进步速度,简直堪称变态啊。

“这楚枫不简单,原来是一位天才,若是让他继续成长下去,绝对能成为一号人物,不过可惜,他太狂妄了,竟与龚师兄定下生死约战,一年时间,他再厉害也无法战胜龚师兄。”有人认识到楚枫的潜力后,为楚枫感到惋惜。

“哼,何须一年,此子今日就必败,巫九与龚师兄关系甚好,早就看他不顺眼了,如今他竟敢登上生死台挑战巫九,巫九岂会放过他?”但也有人认为,楚枫今日就已是在劫难逃。

“何人挑战老子?”就在这时,又是一声爆喝响起,而后一道身影自人群之中掠出,最后稳稳的落在了比斗台上。

这位身材瘦弱,身高平平,长得那叫一个猥琐,金钩鼻子蛤蟆眼,嘴巴一张牙带色儿,说话臭气能传三十米,他若是当面对谁哈口气,都能让那人跪在地上狂呕不止。

不过别看这位长得不咋地,他在核心地带可是鼎鼎有名,剑道盟创建者,青龙榜第九名,正是巫九是也。

“你就是巫九?”楚枫眼前一亮,第一次发现,世间还有长得如此奇葩的人。

巫九鼻孔一张,大嘴一咧,拍着那干瘪的肚子,得意洋洋的道:“老子就是巫九,你挑战老子?”

“不是挑战你,是要宰了你。”楚枫冷声笑道。

“好,老子满足你这个心愿,长老,拿张生死状来,老子今日在这里了解了这小子。”巫九扯开嗓子,对着下方吼了一声。

如果他对内门长老这么说话,也就算了,但是敢这么跟核心长老说话的,他可真是算作胆肥的,就连许多核心弟子,都是倒吸了一口凉气,心想这楚枫够狂,想不到这巫九更狂。

不过最让人无言的就是,巫九话音落下不久,真有一位核心长老自人群走出,缓缓得来到了比斗台上,左手端着笔墨,右手拿着生死状,来到了巫九的身前。

“我去,这巫九什么身份,竟能这般使唤核心长老?”有人吃惊不已,那长老修为不低,乃是元武七重,比巫九还要高两个层次,但却这般听巫九的话,着实让人吃惊不已。

“这你就不知道了吧,巫九在前些时日,拜了钟离长老为师尊,已正式得到钟离长老的亲传。”有人解释道。

“钟离长老?可是那位性情古怪的钟离一护?”

“没错,就是他。”

“天哪,巫九竟然拜入了他的门下?”

人们再次大吃一惊,那钟离一护在青龙宗可是赫赫有名,若要是论其个人实力,在青龙宗内绝对能够排入前三,连护宗六老单打独斗都不会是他的对手。

只不过那钟离一护,如同诸葛青云一样,也是一位客卿长老,所以在青龙宗内只是挂个头衔,什么事都不管,更别说传授宗内弟子技艺了,如今巫九竟然能拜入他老人家门下,着实让人羡慕不已。

“恩怨生死台,的确可以决斗生死,但必须要有所恩怨,你们两个人,可有恩怨?”那位长老开口询问道。

前言:

在实际项目中,曾经遭遇过线上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不仅仅在集合、缓存、异步回调等方面功能强大(可以参考博主的《使用Google Guava快乐编程》),而且还给我们封装好了限流的API!

Guava RateLimiter基于令牌桶算法,我们只需要告诉RateLimiter系统限制的QPS是多少,那么RateLimiter将以这个速度往桶里面放入令牌,然后请求的时候,通过tryAcquire()方法向RateLimiter获取许可(令牌)。

代码示例

分布式场景下的限流

上面所说的限流的一些方式,都是针对单机而言的,其实大部分的场景,单机的限流已经足够了。分布式下限流的手段常常需要多种技术相结合,比如Nginx+Lua,Redis+Lua等去做。

本文主要讨论的是单机的限流,这里就不在详细介绍分布式场景下的限流了。

一句话,让系统的流量,先到队列中排队、限流,不要让流量直接打到系统上。

长按订阅更多精彩▼

如有收获,点个在看,诚挚感谢

来!说说你在流量控制方面的经验!相关推荐

  1. 计算机网络:TCP滑动窗口的流量控制和拥塞控制

    1. 前言 最近在研究网络通信底层通信原理,所以不得不复习一波计算机网络传输控制协议.那么对于程序开发人员,了解底层网络通信原理,对于我们理解BIO.NIO网络通信十分重要.所以对于程序开发人员来说, ...

  2. 千万级规模高性能、高并发的网络架构经验分享--转

    原文地址:http://mp.weixin.qq.com/s?__biz=MzA3MzYwNjQ3NA==&mid=401628413&idx=1&sn=91abfbad4c7 ...

  3. mips汇编计算开方_清华考研辅导班-2020清华大学912计算机专业基础综合考研经验真题参考书目...

    清华大学912计算机专业基础综合考试科目,2020年初试时间安排为12月22日下午14:00-17:00业务课二进行笔试,清华大学自主命题,考试时间3小时. 一.适用院系及专业 清华大学计算机科学与技 ...

  4. 对高并发流量控制的一点思考 推荐

    前言 在实际项目中,曾经遭遇过线上5W+QPS的峰值,也在压测状态下经历过10W+QPS的大流量请求,本篇博客的话题主要就是自己对高并发流量控制的一点思考. 应对大流量的一些思路 首先,我们来说一下什 ...

  5. 【工作经验分享】java图片转文字

    前言 又到一年金九银十之际. Java作为目前用户最多,使用范围最广的软件开发技术之一. Java的技术体系主要由支撑Java程序运行的虚拟机,提供各开发领域接口支持的Java,Java编程语言及许多 ...

  6. Linux 高级流量控制

    原文链接:https://www.ibm.com/developerworks/cn/linux/1412_xiehy_tc/index.html Linux 高级流量控制 本篇主要讲用 TC 对 L ...

  7. 经验分享:正则表达式生成器java

    01 Mysql 1. 数据库三范式及判断.E-R图 2. innodb和myisam存储引擎的区别 3. 索引分类(主键.唯一索引.全文索引.覆盖索引等等),最左前缀原则,哪些条件无法使用索引 4. ...

  8. 软工专硕考研_你可能需要了解--2018年北京大学软微软件工程专硕考研 经验分享...

    原标题:你可能需要了解--2018年北京大学软微软件工程专硕考研 经验分享 北京大学软件与微电子学院软件工程考研资讯 一.招生目录(2018年官网新款) 二.历年招生情况 年份 录取人数 复试基本分数 ...

  9. ABTest流量分发和业界的一些经验

    流量为王的时代,如何精准的利用用户的流量进行分析和产品的迭代?ABTest就是其中不可缺少的一环,那么ABTest是什么呢?下面来一层一层揭开它神秘的面纱. 0.流量分发 在互联网流量的分发模式中,主 ...

最新文章

  1. protobuf repeated类型的使用
  2. 华为商城手机抢购软件_近10万人抢购华为高端5G手机!P40 Pro+开卖,北京多家店无现货...
  3. ORA-39095: Dump file space has been exhausted: Unable to allocate 8192 bytes
  4. C# 系统应用之透明罩MyOpaqueLayer实现360界面阴影效果
  5. yum安装最新的 LNMP
  6. [链接].VGA信号时序
  7. eclipse没有java web,Eclipse Juno在Dynamic Web Project中没有JSP(但其他一切都很好)
  8. Ansible 系统概述与部署(1)
  9. insertRole attempted to return null from a method with a primitive return type
  10. linux源码包与RPM包的区别
  11. Nokia最新PC套件下载 Nokia PC Suite 6.86.9.0 手机型号和PC套件对应表最新7.1
  12. c语言delay函数的作用,delay函数 delay() c语言延迟函数
  13. Tensorflow教程之语音识别
  14. 《Excel大神上分攻略》学习笔记2——定位、查找、排序、筛选
  15. SYZOJ - sxy的书包(背包)
  16. Django项目于之在线教育平台网站的实战开发(一)
  17. 【配置】Pycharm远程连接服务器、配置SSH、配置py环境
  18. 【概率题汇总】互联网公司概率面试题整理
  19. Unity3d 坦克AI_自动寻怪,自动追击脚本参考
  20. 那些让人“上瘾”的产品,是如何铺设流量陷阱的?

热门文章

  1. POJ2492 A Bug s Life 题解
  2. android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...
  3. p6安装后怎么连接oracle的数据库,p6-oraclexe数据库连接不上处理方法内部版20151012.doc...
  4. python转csv_python脚本如何将Excel文件转为csv文件(代码)
  5. 《繁凡的论文精读》(一)CVPR 2019 基于决策的高效人脸识别黑盒对抗攻击(清华朱军)
  6. 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)
  7. P1781 宇宙总统
  8. php 中find,Linux中find命令的用法汇总
  9. 如何设置文字的位置html5,怎么设置文字在表格中的位置
  10. mysql-mybatis 8.0版本配置====解决could not create connection to database server.