内容简介:smart-socket v1.5.13 版本除了一些细节优化,最大的亮点莫过于插件全家桶迎来了一位重磅级新成员:RateLimiterPlugin(流控插件)。 流控,在很多场景下是一项刚性需求。目前市面上所见的绝大多数流控方案都是 ...
smart-socket v1.5.13 版本除了一些细节优化,最大的亮点莫过于插件全家桶迎来了一位重磅级新成员:RateLimiterPlugin(流控插件)。
流控,在很多场景下是一项刚性需求。目前市面上所见的绝大多数流控方案都是 QPS 维度的,即限制单位时间内的请求/响应次数。
而 smart-socket 本次发布的流控插件却比较与众不同,我们提供的是针对字节码的流量控制能力,实现了网络上下行流量的限速。
产生出研发流控插件的想法缘于一次线上故障,当时某个业务的网络IO流量剧增,消耗了过多资源以致其他请求出现严重超时。由此使我意识到基于 QPS 限流策略的局限性,不仅仅是高并发会冲击系统的稳定性,低并发高流量也是个不容忽视的存在。尤其在分布式环境下,单节点的故障会引发一系列连锁反应。而要防止个别网络通道无节制的消耗IO 资源,则需要将流量限速在安全范围内。
流控功能的实现原理是通过代理技术拦截了 Java 通信对象 AsynchronousSocketChannel 的 read/write 方法,识别出超负荷的 IO 任务并延迟至一下个窗口期执行(具体实现参见仓库源码)。
启用该插件延续着 smart-socket 插件一贯的开箱即用的风格,只需在构造方法中指定 read 和 write 的流控值(单位:byte),输入 0 表示不限流。
processor.addPlugin(new RateLimiterPlugin<>(1024 * 1024, 1024 * 1024))
运行效果如下图:(10个客户端发送消息,每隔5秒钟打印一次)
完整示例代码 RateLimiterDemo 可从 smart-socket 仓库中获取。
更新内容
-
优化 WriteBuffer#write 算法。
-
调整底层IO调度线程名。
-
移除底层默认的 tcoNoDelay 设定。
-
新增流控插件:RateLimiterPlugin。
maven坐标
<dependency>
<groupId>org.smartboot.socketgroupId>
<artifactId>aio-coreartifactId>
<version>1.5.13version>
dependency>
最后
优化 WriteBuffer#write 算法。
调整底层IO调度线程名。
移除底层默认的 tcoNoDelay 设定。
新增流控插件:RateLimiterPlugin。
<dependency>
<groupId>org.smartboot.socketgroupId>
<artifactId>aio-coreartifactId>
<version>1.5.13version>
dependency>
最后
开源不易,若觉得该项目还不错,请为它点个 Star 。仓库地址:https://gitee.com/smartboot/smart-socket
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- vue全家桶
- 升级vue全家桶过程记录
- SpringBootBucket 1.0.0 发布,SprintBoot全家桶
- 免费获取 JetBrains 全家桶正版 License 教程
- 使用React全家桶搭建一个后台管理系统
- Windows 10四月更新恢复预装“全家桶”遭吐槽
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
深入浅出Rust
范长春 / 机械工业出版社 / 2018-8-21 / 89.00元
本书详细描述了Rust语言的基本语法,穿插讲解一部分高级使用技巧,并以更容易理解的方式解释其背后的设计思想。全书总共分五个部分。 第一部分介绍Rust基本语法,因为对任何程序设计语言来说,语法都是基础,学习这部分是理解其他部分的前提。 第二部分介绍属于Rust独一无二的内存管理方式。它设计了一组全新的机制,既保证了安全性,又保持了强大的内存布局控制力,而且没有额外性能损失。这部分是本书......一起来看看 《深入浅出Rust》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
RGB HSV 转换
RGB HSV 互转工具