中国电子标准协会培训中心

  
培训课程筛选
 首页 >> 资讯中心 >> 正文

基于Netty的通信框架可靠性设计

作者:不详 ; 发布时间:2018-12-7 8:12:01 ; 来源:互联网  点击:

在客户端和服务端进行网络通信时,网络闪断、网络超时、通信对端宕机等故障时有发生,为了保证异常场景下系统的可用性,通信框架必须具有很高的可靠性。

1.链路有效性检测

从技术层面来看,要解决链路的可靠性问题,必须周期性的对链路进行有效性检测。目前最流行和通用的做法就是心跳检测。

心跳检测机制分为三个层面:

TCP层面的心跳检测,即TCP的Keep-Alive机制,他的作用域是整个TCP协议栈

协议层的心跳检测,主要存在于长连接协议中,例如SMPP协议

应用层的心跳检测,他主要由各业务产品通过约定方式定时给对方发送心跳消息实现

心跳检测的目的就是确认当前链路可用,对方或者并且能够正常接收和发送消息。作为高可靠的NIO框架,Netty也提供了心跳检测机制。

不同的协议,心跳检测机制也存在差异,归纳起来主要分为两类:

Ping-Pong型心跳:由通信一方定时发送Ping消息,对方接收到Ping消息之后,立即返回Pong应答消息给对方,属于请求-响应型心跳。

Ping-Ping型心跳:不区分心跳请求和应答,由通信双方按照约定定时向对方发送心跳Ping消息,它属于双向心跳。

心跳检测策略如下:

联系N次心跳检测都没有收到对方的Pong应答消息或Ping请求消息,则认为链路已经发生逻辑失效,这杯称作心跳超时。

读取和发送心跳消息的时候如果直接发生了IO异常,说明链路已经失效,这被称为心跳失败。

无论发生心跳超时还是心跳失败,都需要关闭链路,由客户端发起重连操作,保证链路能够恢复正常。

Netty的心跳检测实际上是利用了链路空闲检测机制实现的,他的空闲检测机制分为三种:

读空闲,链路持续时间t没有读取到任何消息

写空闲,链路持续时间t没有发送任何消息

读写空闲,链路持续时间t没有接收或者发送任何消息

2.断连重连机制

当发生如下异常时,客户端需要释放资源,重新发起连接:

服务端因为某种原因,主动关闭连接,客户端检测到链路被正常关闭

服务端因为宕机等故障,强制关闭连接,客户端检测到链路被Reset掉

心跳检测超时,客户端主动关闭连接

客户端因为其他原因,强制关闭连接

网络类故障,例如网络丢包、超时、单通等,导致链路中断

客户端检测到链路中断后,等到INTERVAL时机,由客户端发起重连操作,如果重连失败,间隔周期INTERVAL后再次发起重连,直到重连成功。

为了保证服务端能够有充足的时间释放句柄资源在首次断连时客户端需要等到INTERVAL时机之后再发起重连,而不是失败后就立即重连。

为了保证句柄资源能够及时释放,无论什么场景下的重连失败,客户端都必须保证自身资源被及时释放,包括但不限于SocketChannel、Socket等。重连失败后,需要打印异常堆栈信息,方便后续的问题定位。

3.消息缓存重发

当我们调用消息发送接口的时候,消息并没有真正被写入到Socket中,而是先放入NIO通信框架的消息发送队列中,由Reactor线程扫描待发送的消息队列,异步发送给通信对端。假设消息队列中积压了部分消息,此时链路中断,这回导致部分消息并没有真正发送给通信对端。

发生此故障时,我们希望NIO框架能够自动实现消息缓存和重新发送,遗憾的是作为基础的NIO通信框架,无论是Mina还是Netty,都没有提供该功能,需要通信框架自己封装实现,基于Netty的实现策略如下:

调用Netty ChannelHandlerContext的write()方法时,返回ChannelFuture对象,我们在ChannelFuture中注册发送结果监听Listener。

在Listener的operationComplete方法中判断操作结果,如果操作不成功,将之前发送的消息对象添加到重发队列中。

链路重连成功后,根据策略,将缓存队列中的消息重新发送给通信对端。

4.资源优雅释放

Java的优雅停机通常通过注册JDK的ShutdownHook实现,当系统接收到退出指令后,首先标记系统处于退出状态,不再接收新的消息,然后将积压的消息处理完,最后调用资源回收接口将资源销毁,最后各线程退出执行。

通常优雅退出有个时间限制,例如30s,如果到达执行时间仍然没有完成退出前的操作,则由监控脚本直接kill -9 pid,强制退出。

Netty提供了完善的优雅停机接口shutdownGracefully,通过调用相关接口,可以实现线程池、消息队列、Socket句柄、多路复用器等的资源释放。

 
推荐公开课
[江苏回流焊和通孔回流焊(THD)的SMT
[广东NPI新产品导入
[江苏PCBA的可制造性设计(DFM)实施
[广东光学镜头测试培训
[广东在软件开发流程中构筑软件质量-软件测
[广东嵌入式软件可靠性设计培训
[广东电路设计中器件选型及工程计算培训课程
[上海面向可制造性的设计与工艺优化
[江苏ESD检验员职业资格(防静电系统高级
[广东硬件测试管理
推荐内训课
[广东SMT核心工艺技术、质量控制与案例解
[广东“倒装焊器件(BGA\WLP\QFN
[广东照相模组的设计工艺、组装技术和失效分
[河北硬件测试技术及信号完整性分析
[山西电子产品实用可靠性设计和试验技术高级
[广东SMT组装中的实用可制造性(DFM)
[上海电磁兼容设计与整改对策及经典案例分析
[广东板级电磁兼容设计与整改对策分析培训
[广东非财务经理的财务管理必修课
[广东电路设计中器件选型及工程计算
资讯中心
·用户对云计算服务可靠性的怀疑正在加剧
·苹果重整系统可靠性:iOS 12可能延期
·汽车核心零部件寿命及可靠性检测
·英特尔携5G、AI最新技术亮相中移动大会
·医疗机器人需求强劲 未来会是一门好生意
·华为将推搭载索尼传感器的3D摄像头手机
·Waymo One的6大关键点
·三星电子发力体育营销 签约苏宁足球俱乐部
·苹果表示高通禁令超出了专利权范围
·IEEE标准协会公布加密货币交易国际标准
·2019年全球机器人系统和无人机支出预告
·西雅特再次冲进中国市场 “三进宫”能否华

 

中国电子标准协会培训中心专业提供可靠性设计、热设计、SMT工艺、电路设计、架构设计、硬件测试、研发管理、嵌入式软件测试、EMC培训、软件技术等课程及服务。
欢迎来电来函咨询:
0755-26506757 13798472936
martin@ways.org.cn
http://www.ways.org.cn

中国电子标准协会培训中心(深圳市威硕企业管理咨询有限公司)成立于2006年,经过十多年的发展,在国内外业界技术顾问及广大客户的支持下,我培训中心已成为一家专业的电子技术、研发、管理、企业资格及电子标准培训服务提供商,致力为各企业提供成熟的企业技术、管理及标准培训服务。借鉴国际先进的电子技术应用与管理理念,让协会整合以“技术”为核心的企业资源体系,解决企业运营过程中的技术难题,提升生产、运作与工作效率,增强企业核心能力,赢得竞争优势,最终实现企业长期追求的使命与愿景。
经典课程:可靠性设计各种设计技术(包括可靠性降额设计、硬件测试、可靠性余度设计、可靠性动态设计、电路设计、可靠性环境防护设计、EMC培训、热设计、硬件测试、可靠性安全设计、缓冲减振设计、静电防护设计等)、SMT技术管理培训、EMC培训、硬件测试、IPC标准(IPC-A-610E标准、IPC-A-7711/21标准、IPC-A-620A标准、IPC-A-600H标准、IPC J-STD-001标准)、电路设计、硬件测试、ESD防静电防护、ESD设计、硬件测试、EMC培训、电路设计、硬件测试技术及信号完整性分析、硬件测试、DFM电子可制造性设计、机械结构设计、加速试验和筛选技术和模拟仿真技术、硬件测试、EMC培训、失效分析、EMC培训、电路设计、EMC培训、故障模式影响及危害性(FMEA、FMECA)和故障树分析(FTA)、元器件可靠性设计、硬件测试、电路设计、软件可靠性设计、硬件测试、软件测试(黑盒和白盒)、电路设计、可靠性设计各种试验技术(环境应力筛选试验、EMC培训、硬件测试、可靠性工程试验、可靠性统计试验等)以及可靠性管理是我协会的强项;软件类:架构设计、EMC培训、硬件测试、C语言、电路设计、UI设计、硬件测试、需求分析、电路设计、软件项目管理、硬件测试、电路设计、Oracle、软件敏捷、.NET、EMC培训、硬件测试、Android、硬件测试、软件配置管理、Linux、硬件测试、CMMI、软件重构、C++等等

服务热线:0755-33558698 26506757 传真:0755-33119039 电子邮件:martin@ways.org.cn
客服 QQ:52630255 751959468 1305933375 385326049
中国电子标准协会培训中心(http://www.ways.org.cn)网站 ICP注册号:ICP备257378787号