系统限流实践 - 理论篇
来源:互联网 发布:cass软件下载 编辑:程序博客网 时间:2024/06/05 20:11
本文是根据开涛的博客 聊聊高并发系统之限流特技-1 整理而成,自学笔记
目录
1.系统限流实践 - 理论篇
2.系统限流实践 - 应用限流
3.系统限流实践 - 分布式限流
4.系统限流实践 - 接入层限流(上)
5.系统限流实践 - 接入层限流(下*完结)
开篇
在开发高并发系统的时候,有三种方法来保护我们的系统
- 缓存
缓存的目的是为了提升系统访问量,增大系统处理的容量
- 降级
降级是当服务出问题或者影响到核心流程的性能,暂时屏蔽掉服务,保证核心服务的正常
- 限流
限流是为了限制某些不能用缓存和降级来解决的场景,例如稀缺资源(秒杀、抢购)、写服务(评论、下单)、频繁的复杂查询(评论的最后几页),因此需要一种手段来限制这些场景的并发/请求量,即限流
限流的手段
- 应用级限流
- 分布式限流
- 接入层限流
限流算法
令牌桶算法
令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌
- 假设限制速率为2r/s,则按照500毫秒的速率往令牌桶添加令牌
- 令牌桶最多存放b个令牌,当桶满的时候,新的令牌会被抛弃或拒绝
- 当一个n个字节大小的数据包到达,将从桶中删除n个令牌,接着发送数据包到网络上
- 如果桶中的流量不足n个,则不会删除令牌,该数据将被限流(要么丢弃,要么缓存)
漏桶算法
漏桶算法是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法
- 一个固定容量的漏桶,按照常量固定速率流出水滴
- 如果桶是空的,则不需要流出水滴
- 可以以任意速率流入水滴到漏桶
- 如果流出水滴超出了桶的容量,则流入的水滴溢出(被丢弃),则漏桶的容量是不变的
令牌桶与漏桶算法的对比
- 令牌桶是按照固定速率往桶中添加令牌,请求是否被处理需要看桶中令牌是否足够,当令牌数减为零时则拒绝新的请求
- 漏桶则是按照常量固定速率流出请求,流入请求速率任意,当流入的请求数累积到漏桶容量时,则新流入的请求被拒绝
- 令牌桶限制的是平均流入速率(允许突发请求,只要有令牌就可以处理,支持一次拿3个令牌,4个令牌),并允许一定程度突发流量
- 漏桶限制的是常量流出速率(即流出速率是一个固定常量值,比如都是1的速率流出,而不能一次是1,下次又是2),从而平滑突发流入速率
- 令牌桶允许一定程度的突发,而漏桶主要目的是平滑流入速率
总结
开篇介绍了限流的一些基本知识,接下来会学习怎样对系统进行限流。
参考资料:
- 开涛的博客-聊聊高并发系统之限流特技-1-http://mp.weixin.qq.com/s?__biz=MzIwODA4NjMwNA==&mid=2652897781&idx=1&sn=ae121ce4c3c37b7158bc9f067fa024c0#rd
欢迎关注个人公众号
- 系统限流实践 - 理论篇
- 系统限流实践 - 应用限流
- 系统限流实践 - 分布式限流
- 系统限流实践
- 系统限流实践 - 接入层限流(上)
- 系统限流实践 - 接入层限流(下*完结)
- 接口限流实践
- 入侵检测系统:理论和实践
- 高并发系统限流
- 接口限流实践-令牌桶
- 从限流削峰到性能优化,谈1号店抽奖系统架构实践
- 大型网站系统架构分析 ——理论不懂就实践,实践不会就学理论!
- 从理论到实践,全方位认识DNS(理论篇)
- 从理论到实践,全方位认识DNS(理论篇)
- 从理论到实践,全方位认识DNS(理论篇)
- 从理论到实践,全方位认识DNS(理论篇)
- 高并发系统限流特技
- flex布局-理论与实践篇
- MySQL分库分表总结
- CMake学习笔记(4)——使用外部共享库和头文件
- swift json的序列化和反序列化
- 隐马尔可夫模型(六)——隐马尔可夫模型的评估问题(前向后向相结合算法)
- sklearn 中 make_blobs模块使用
- 系统限流实践 - 理论篇
- 静态局部变量
- Java的ClassLoader加载机制
- Android Studio获取SHA1
- kettle源码部署
- js去除数组重复元素
- 自定义SwipeLayout实现侧滑菜单
- 向数据库中插入多条数据
- 工具使用时timestamp默认当前时间和更新时间不能设置