尽管Netty的可靠性已经做得非常出色,但是在生产实践中还是发现了一些待优化点,本小节将进行简单说明。希望后续的版本中可以解决,当然用户也可以根据自己的实际需要决定自行优化。

1  发送队列容量上限控制

Netty的NIO消息发送队列ChannelOutboundBuffer并没有容量上限控制,它会随着消息的积压自动扩展,直到达到0x7fffffff。

如果网络对方处理速度比较慢,导致TCP滑窗长时间为0;或者消息发送方发送速度过快,或者一次批量发送消息量过大,都可能会导致ChannelOutboundBuffer的内存膨胀,这可能会导致系统的内存溢出。

建议优化方式如下:在启动客户端或者服务端的时候,通过启动项的ChannelOption设置发送队列的长度,或者通过-D启动参数配置该长度。

2  回推发送失败的消息

当网络发生故障的时候,Netty会关闭链路,然后循环释放待未发送的消息,最后通知监听listener。

这样的处理策略值得商榷,对于大多数用户而言,并不关心底层的网络I/O异常,他们希望链路恢复之后可以自动将尚未发送的消息重新发送给对方,而不是简单的销毁。

Netty销毁尚未发送的消息,用户可以通过监听器来得到消息发送异常通知,但是却无法获取原始待发送的消息。如果要实现重发,需要自己缓存消息,如果发送成功,自己删除,如果发送失败,重新发送。这对于大多数用户而言,非常麻烦,用户在开发业务代码的同时,还需要考虑网络I/O层的异常并为之做特殊的业务逻辑处理。

下面我们看下Mina的实现,当发生链路异常之后,Mina会将尚未发送的整包消息队列封装到异常对象中,然后推送给用户Handler,由用户来决定后续的处理策略。相比于Netty的“野蛮”销毁策略,Mina的策略更灵活和合理,由用户自己决定发送失败消息的后续处理策略。

大多数场景下,业务用户会使用RPC框架,他们通常不需要直接针对Netty编程,如果Netty提供了发送失败消息的回推功能,RPC框架就可以进行封装,提供不同的策略给业务用户使用,例如:

1.缓存重发策略:当链路发生异常之后,尚未发送成功的消息自动缓存,待链路恢复正常之后重发失败的消息;

2.失败删除策略:当链路发生异常之后,尚未发送成功的消息自动销毁,它可能是非重要消息,例如日志消息,也可能是由业务直接监听异常并做特殊处理;

3.其他策略.......

Netty高可靠性设计:优化建议相关推荐

  1. url动态追加参数_领高舆情优化:SEO网站URL优化的方法!

    摘要:领高舆情优化在前几篇文章当中,分享过很多关于网站收录的内容,今天我们就来说说网站URL优化的几点注意要点. 领高舆情优化:SEO网站URL优化的方法! 一.url目录层级不要太多 我们知道目录层 ...

  2. Linux 网络性能的 15 个优化建议【转自微信公众号菜鸟教程】

    Linux 网络在性能方面有哪些优化手段可用呢? 本文将给出一些开发或者运维中的 Linux 网络性能优化建议. 要注意的是,每一种性能优化方法都有它适用或者不适用的应用场景,应当根据当前的项目现状灵 ...

  3. MySQL · 性能优化· CloudDBA SQL优化建议之统计信息获取

    阿里云CloudDBA具有SQL优化建议功能,包括SQL重写建议和索引建议.SQL索引建议是帮助数据库优化器创造最佳执行路径,需要遵循数据库优化器的一系列规则来实现.CloudDBA需要首先计算表统计 ...

  4. .NET程序的性能要领和优化建议

    前几天在老赵的博客上看到,Bill Chiles (Roslyn 编译器的Program Manager)写了一篇文章叫做<Essential Performance Facts and .NE ...

  5. 从原理上理解MySQL的优化建议

    概述 自从学习 MySQL 以来,我们一直听到或者看到很多优化建议,比如说不要用 select * 查询,用什么字段就查什么字段:建议用自增主键来作为表的主键,等等.这些建议听得很多感觉都成了 MyS ...

  6. 8条关于Web前端性能的优化建议

    转载自 8条关于Web前端性能的优化建议 一般网站优化都是优化后台,如接口的响应时间.SQL优化.后台代码性能优化.服务器优化等.高并发情况下,对前端web优化也是非常重要的. 下面说说几种常见的优化 ...

  7. Windows Phone性能优化建议

    Windows Phone性能优化建议 原文:Windows Phone性能优化建议 使用background thread解码图片 在Windows Phone中支持的图片格式有jpg和png,微软 ...

  8. 笔记45 | 代码性能优化建议[转]

    地址 笔记45 | 代码性能优化建议[转] 目录 前言 避免创建不必要的对象 选择Static而不是Virtual 常量声明为Static Final 避免内部的Getters/Setters 使用增 ...

  9. ov5640帧率配置_逃离塔科夫怎么提升帧率 帧率优化建议_单机游戏_游戏攻略

    逃离塔科夫有着非常真实的游玩与画面表现,所以这类的多人游戏比较吃配置,那么帧率上不去会十分影响游戏体验,下面请看由"SIIYAM"带来的逃离塔科夫帧率优化建议,一起来看看吧. 帧率 ...

  10. Java架构-每秒上千订单场景下的分布式锁高并发优化实践!

    "上一篇文章我们聊了聊Redisson这个开源框架对Redis分布式锁的实现原理,如果有不了解的兄弟可以看一下:<拜托,面试请不要再问我Redis分布式锁实现原理>. 今天就给大 ...

最新文章

  1. 设置AFNetworking网络请求的超时时间
  2. linux支持中文文件名,CentOS安装中文支持(linux中文文件名乱码)
  3. [知识图谱实战篇] 四.HTML+D3+CSS绘制关系图谱
  4. java 18.9_Oracle: Java 11 (18.9 LTS) 正式上线!
  5. 我的家庭私有云计划-10
  6. SQL Server 阻止组件 xp_cmdshell
  7. 【论文笔记】NLP 预训练模型综述
  8. 不常用的SQL语句记录
  9. Android 用webService产生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive错误的解决 ....
  10. JavaScript数组去重的四种方法
  11. 终于明白为什么人人都爱Django了,Django果然天下第一
  12. 时间限制的命令(timeout)
  13. 由验证控件引起的IE的超级爆笑BUG
  14. 全国青少年编程等级考试python一级真题2021年3月(含题库答题软件账号)
  15. python中对字符串进行左、中、右对齐操作
  16. 二十四、从句_比较让步目的结果状语从句
  17. Android自定义控件三部曲文章索引
  18. Android 泽宇Glide和Picasso框架之间的区别与应用
  19. 云数据库技术行业动态:ClickHouse Cloud正式GA或有融资;openGauss社区引入新成员
  20. Uniswap V1 合约源码之保姆级解析

热门文章

  1. 自定义获取焦点的TextView
  2. HTML5的10大优势
  3. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre
  4. 类的数据成员的一些注意事项
  5. thinkphp建站-前后台文件配置
  6. Fiddler内置命令
  7. JavaScript基础---语言基础(4)
  8. ArchLinux安装配置
  9. 深入浅出SharePoint——站点的部署
  10. 分享我的iOS app 开发杂谈3