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