NIO通信框架-Netty解析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

NIO通信框架-Netty李林锋neu_lilinfeng@sina.com新浪微博Nettying大纲传统同步阻塞通信面临的问题Netty提供的解决方案Netty逻辑架构介绍Netty主要功能特性介绍Netty的行业应用传统同步阻塞通信面临的问题性能问题:一连接一线程模型导致服务端的并发接入数和系统吞吐量受到极大限制;可靠性问题:由于IO操作采用同步阻塞模式,当网络拥塞或者通信对端处理缓慢会导致IO线程被挂住,阻塞时间无法预测;可维护性问题:IO线程数无法有效控制、资源无法有效共享(多线程并发问题),系统可维护性差JAVA原生NIO类库的复杂性(服务端)JAVA原生NIO类库的复杂性(客户端)Netty的解决方案•异步、非阻塞、基于事件驱动的NIO框架;•支持多种传输层通信协议,包括TCP、UDP等;•提供对多种应用层协议的支持,包括TCP私有协议、HTTP协议、WebSocket协议、文件传输等;•默认提供多种编解码能力,包括Java序列化、Google的ProtoBuf、二进制编解码、Jbossmarshalling、文本字符串、base64、简单XML等;•经典的ChannelFuture-listener机制,所有的异步IO操作都可以设置listener进行监听和获取操作结果;•基于ChannelPipeline-ChannelHandler的责任链模式,可以方便的自定义业务拦截器用于业务逻辑定制;•安全性:支持SSL、HTTPS;•可靠性:流量整形、读写超时控制机制、缓冲区最大容量限制、资源的优雅释放等;•简洁的API和启动辅助类,简化开发难度,减少代码量Netty逻辑架构Netty逻辑架构•第一层:Reactor通信调度层,它由一系列辅助类组成,包括Reactor线程NioEventLoop以及其父类、NioSocketChannel/NioServerSocketChannel以及其父类、ByteBuffer以及由其衍生出来的各种Buffer、Unsafe以及其衍生出的各种内部子类等;•第二层:职责链ChannelPipeLine,它负责调度事件在职责链中的传播,支持动态的编排职责链,职责链可以选择性的拦截自己关心的事件,对于其它IO操作和事件忽略,Handler同时支持inbound和outbound事件;•第三层:业务逻辑编排层,业务逻辑编排层通常有两类:一类是纯粹的业务逻辑编排,还有一类是应用层协议插件,用于协议相关的编解码和链路管理,例如CMPP协议插件。Netty功能特性1(NIO服务端)•28行代码完成NIO服务端的开发Netty功能特性1(NIO服务端)•15行代码完成服务端业务逻辑定制Netty功能特性2(NIO客户端)•26行代码完成NIO客户端开发Netty功能特性2(NIO客户端)•28行代码完成NIO客户端开发Netty功能特性3-序列化(ProtoBuf)Netty功能特性3-序列化(marshalling)Netty功能特性3-序列化(Java)•与原生的JAVA序列化机制兼容Netty功能特性4-半包解码器Netty提供4种半包解码器,可以解决几乎所有协议的半包解码问题:1.固定消息长度解码器:FixedLengthFrameDecoder;2.文本换行解码器:LineBasedFrameDecoder;3.分隔符解码器:DelimiterBasedFrameDecoder;4.基于消息长度的通用解码器:LengthFieldBasedFrameDecoderNetty功能特性5-编码器•POJO对象到ByteBuf的编码器:MessageToByteEncoder•POJO对象到POJO对象编码器:MessageToMessageEncoder•消息长度编码器:LengthFieldPrependerNetty功能特性6-多协议(HTTP)•异步非阻塞HTTP协议栈Netty功能特性7-多协议(WebSocket)•WebSocket协议栈基于HTTP协议栈+WebSocket编解码实现Netty功能特性8-多协议(UDP)•与TCP协议风格一致的API,降低用户开发难度Netty功能特性9-多协议(File传输)•异步文件传输Netty功能特性10-安全性Netty功能特性11-可靠性(流量整形)•基于Channel的流量整形:ChannelTrafficShapingHandler•基于全局的流量整形:GlobalTrafficShapingHandler•可定制的流量整形抽象类:AbstractTrafficShapingHandlerNetty功能特性12-可靠性(超时控制)•异步连接超时机制:ChannelConfig的setConnectTimeoutMillis(intconnectTimeoutMillis);Netty功能特性13-可靠性(心跳检测)•基于链路空闲的读超时:ReadTimeoutHandler;•基于链路空闲的写超时:WriteTimeoutHandler;•链路空闲状态触发器:IdleStateHandler;Netty功能特性14-可定位性(日志)提供LoggingHandler,它支持如下功能:将二进制byte数组转换成16进制码流打印;将二进制byte数组转换成字符打印;通过拦截的方式按照指定格式打印数据报Netty功能特性15-内存管理策略以ByteBuf为例,Netty提供四种ByteBuf:1.基于内存池可重复利用的非堆内存:PooledDirectByteBuf;2.基于内存池可重复利用的堆内存:PooledHeapByteBuf;1.朝生夕灭的非堆内存:UnpooledDirectByteBuf;2.朝生夕灭的堆内存:UnpooledHeapByteBuf。为了更高效的管理内存,做到自动/及时的释放不再引用的对象,Netty内置的资源对象实现ReferenceCounted接口,对内存的申请和释放做统一管理。Netty功能特性16-异步的结果回调基于经典的Future-Listener机制实现Netty行业应用-互联网分布式架构•随着互联网的发展,网站应用规模的不断扩大,常规的垂直应用架构已无法应对,利用分布式服务架构进行弹性伸缩是大势所趋•Dubbo是阿里巴巴开源的分布式服务框架,目前已经应用于所有非淘宝系的阿里产品中,包括来往、聚划算、阿里巴巴集团网、阿里巴巴中文站等等•Dubbo内部私有通信协议-dubbo协议默认使用Netty作为高性能异步通信框架,为分布式服务节点之间提供高性能的NIO客户端和服务端通信。Netty行业应用-大数据领域ApacheAvro是Hadoop的子系统之一,它的主要功能如下:丰富的数据结构;压缩、高效、二进制的序列化框架;远程服务调用(RPC);多语言、灵活的集成能力。Avro的RPC框架提供基于Netty的NettyServer和基于Jetty的HttpServer两种通信服务端。Netty行业应用-游戏行业Netty适合游戏服务器的几个核心特性:1.高并发:由于采用异步非阻塞模式,一个Netty游戏服务端可以同时处理成千上万的游戏玩家登陆和在线;2.高性能:Netty的性能在各个NIO框架中最高,它的单节点吞吐量非常大,适合海量玩家同时在线游戏;3.安全性:支持HTTPS、SSL等,可以在传输层进行安全控制;4.定制性:可以方便的实现业务逻辑的定制、游戏编解码的定制,可以方便的与第三方进行集成,例如amf3等。推荐Netty学习教材2014年5月,由电子工业出版社博文视点推出的中国第一本Netty教材《Netty权威指南》即将出版,敬请关注。谢谢聆听!李林锋neu_lilinfeng@sina.com新浪微博:NettyingQ&A

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功