详解高并发,亿级并发流量控制,分布式场景下的系统限流实战

在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待、排队、降级、拒绝服务等。

一般解决高并发问题的时候有三种策略,缓存、降级和限流。

缓存比较简单,为了提高访问速度,因为从缓存中读取效率都比较高。比较常见场景就是后面挂一个mysql或者其他类型的db,然后中间嵌套一层redis缓存,有的甚至会加一层本地的二级缓存来进一步提高读写速度。缓存面临的问题是——数据一致性。

降级是为了保护更核心的服务,把一些没那么核心的服务停掉,等访问高峰期过了,或者相关系统问题解决之后再打开之前关闭的服务。

有些场景无法用上述两种手段来解决,比如稀缺资源——秒杀,抢购,比如写服务——评论,下单,频繁的复杂查询——评论的最后几页。解决上述类似问题可以采用限流的措施。

本文通过解读招行事业部King老师讲解的限流课程进行分享:

讲师简介:10余年Java行业经验。曾就职于招商银行互联网事业部、 58同城、互联网金融等行业,有丰富的大型项目设计与建设经验。 主要对分布式架构、微服务、数据安全等领域有深入的研究及改造经验。

一、什么是高并发?

高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。

高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。

响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。

吞吐量:单位时间内处理的请求数量。

QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。

并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。

二、高并发带来的问题

三、高并发系统架构图

四、高并发的优化方案

有这几种方案,本文着重从限流方向讲解

  • 扩容
  • 动静分离
  • 缓存
  • 服务降级
  • 限流

五、为什么要限流

六、限流

高并发系统常见的限流模式有这么几种。

  1. 限制总并发数
  2. 数据库连接池,线程池,redis连接池。如果总并发数超过了已有资源的数量,对于数据库或者redis会报拿不到连接的异常,线程池会reject。
  3. 限制瞬时并发数
  4. 限制时间窗口内的平均速度
  5. guava的RateLimiter,nginx的limit_req模块,限制每秒的平均速率。
  6. 其他(例如分布式场景下的限制)
  7. 限制远程接口调用速率,限制MQ的消费速度,根据网络连接数(httpclient设定的连接数),网络流量,CPU或者内存负载来限流。

七、限流算法


  1. 漏桶算法的概念
  2. 漏桶算法(Leaky Bucket):主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量
  3. 令牌桶算法(Token Bucket):是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。
  4. 计数器限流算法的概念
  5. 计数器限流算法也是比较常用的,主要用来限制总并发数,比如数据库连接池大小、线程池大小、程序访问并发数等都是使用计数器算法。
  6. 滑动窗口
  7. 一般用于网络数据传输时的流量控制,以避免拥塞的发生

限于篇幅原因,就分享到这里,喜欢的话,可以给我点个关注

【转发】+【关注】可以获取本节【详解高并发,亿级并发流量控制,分布式场景下的系统限流实战】的视频,记得转发关注之后私信我哦

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();