高并发限流(一)——简介

本系列章节内容参考自聊聊高并发系统之限流特技-1

1.背景

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

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

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

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

2.常用场景

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

你可能感兴趣的:(限流)