当前位置: 首页 > news >正文

【Netty源码解读和权威指南】第37篇:Netty流量整形——优雅控制客户端发送速率

上一篇【第36篇】Netty时间轮高级应用——10亿级定时任务的工程实践
下一篇【第38篇】Netty SSL TLS安全传输——HTTPS背后的Netty实现


一、为什么需要流量整形?

某支付系统,上游每天凌晨批量同步数据,带宽被占满,影响正常交易。

流量整形:平滑流量,避免突发压垮下游。


二、原理:令牌桶算法

令牌桶:容量10 每秒产生5个令牌 时刻0: [T][T][T][T][T][_][_][_][_][_] (5个令牌) 发送3个包 → [T][T][_][_][_][_][_][_][_][_] (剩2个令牌) 时刻1: [T][T][T][T][T][T][T][_][_][_] (补充5个,共7个) 发送6个包 → [T][_][_][_][_][_][_][_][_][_] (剩1个令牌) 发送4个包 → [T][_][_][_][_][_][_][_][_][_] ↑ 只有1个令牌,只发送1个,3个等待!

三、GlobalTrafficShapingHandler

// 全局流量整形:所有Channel共享带宽pipeline.addLast(newGlobalTrafficShapingHandler(eventExecutor,1024*1024,// writeLimit: 1MB/s 写速率1024*1024,// readLimit: 1MB/s 读速率1000// checkInterval: 1秒检查一次));// 源码核心:AbstractTrafficShapingHandler// 计算等待时间,延迟发送longwait=trafficCounter.readTimeToWait(size,limit,interval);if(wait>0){ctx.executor().schedule(()->{ctx.write(msg,promise);},wait,TimeUnit.MILLISECONDS);}

四、ChannelTrafficShapingHandler

// 每个Channel独立限速pipeline.addLast(newChannelTrafficShapingHandler(512*1024,// 每个连接512KB/s0// 不限读));

五、实战:防DDoS连接限流

publicclassAntiDdosHandlerextendsChannelInboundHandlerAdapter{privatefinalGlobalTrafficShapingHandlertrafficHandler;privatefinalAtomicIntegerconnections=newAtomicInteger();privatestaticfinalintMAX_CONNECTIONS=10000;publicAntiDdosHandler(EventExecutorexecutor){trafficHandler=newGlobalTrafficShapingHandler(executor,1024*1024,0);}@OverridepublicvoidchannelActive(ChannelHandlerContextctx){if(connections.incrementAndGet()>MAX_CONNECTIONS){System.out.println("连接数超限,拒绝新连接");ctx.close();}else{ctx.pipeline().addFirst(trafficHandler);ctx.fireChannelActive();}}@OverridepublicvoidchannelInactive(ChannelHandlerContextctx){connections.decrementAndGet();ctx.fireChannelInactive();}}

六、对比总结

Handler范围配置
GlobalTrafficShapingHandler所有Channel共享writeLimit=1MB/s
ChannelTrafficShapingHandler单个Channel独立writeLimit=512KB/s
GlobalChannelTrafficShapingHandler全局+单Channel双重控制灵活组合

上一篇【第36篇】Netty时间轮高级应用——10亿级定时任务的工程实践
下一篇【第38篇】Netty SSL TLS安全传输——HTTPS背后的Netty实现


http://www.jsqmd.com/news/1051171/

相关文章:

  • 2026年长沙高端全屋定制,究竟藏着哪些让人惊艳的设计秘诀? - 资讯速览
  • Faster-Whisper:如何实现4倍速语音转录的技术揭秘
  • 逻辑严谨吗?8款AI论文工具榜单,毕业论文轻松搞定!
  • K2.5:轻量多模态Agent工作流的开源实践指南
  • Theta性能优化实践:DataArray与内存管理的最佳实践指南
  • BetterNCM-Installer完整指南:3分钟解锁网易云音乐插件生态
  • 2026年中国出海展会展台设计搭建行业选购指南:全球各区域服务商选型参考 - 寻茫精选
  • 基于NXP SLN-VIZNAS-IOT的嵌入式人脸识别实战:从开箱到低功耗门锁应用
  • 固体力学交互式应用开发:从理论到可视化实践
  • Rizz 3D渲染工具详解:GLTF模型加载与调试原语使用
  • 2026年6月国内技术好的干法造粒机企业推荐,旋转式压片机/小型旋转式压片机/保健品粉末压片机,干法造粒机品牌推荐 - 品牌推荐师
  • Flux.1文生图实战指南:解决文本可读性与手部生成难题
  • Python孤立森林异常检测实战:零基础快速上手
  • Spring框架在Java面试中的重要性及常见问题剖析
  • 黄埔区专业搬家公司推荐 产业园区设备整体搬迁服务指南 - 从来都是英雄出少年
  • 嵌入式GUI字体系统实战:从emWin原理到多语言显示优化
  • 官方发布:合肥高科经济技工学校 2026 招生计划及志愿填报说明 - 教育为先
  • M.I.B.系统架构分析:从SD卡启动到GEM集成的完整工作流程
  • Clawdbot:面向国产软硬件的Ollama兼容推理引擎
  • CANN/asc-devkit Exp函数API
  • Binding库单元测试终极指南:如何编写可靠的绑定测试用例
  • 为什么这款柔和配色主题能成为Kitty用户的最爱?Catppuccin深度评测
  • MuJoCo物理仿真终极指南:7个专业技巧彻底解决物体滑动问题
  • 2026年中国出海展会展台设计搭建服务商选型指南 覆盖美洲欧洲东南亚非洲中东市场 - 寻茫精选
  • Audio Annotator:零基础音频标注终极指南,让声音数据为AI注入灵魂
  • 免费音乐制作新选择:LMMS完整入门指南与实战技巧
  • 嵌入式GUI皮肤系统:emWin控件外观定制与状态驱动绘制实战
  • Chroma部署指南:如何在服务器和集群上运行大规模蛋白质设计任务
  • 为什么选择OpenAPI Tool Servers?5个理由让你告别复杂协议集成
  • 2026找汕头代理记账公司,这5个关键点你必须知道! - 企业品牌