Netty 架构剖析和行业应用


Netty架构剖析和行业应用 李林锋 neu_lilinfeng@sina.com 新浪微博 Nettying 微信 Nettying  Netty介绍  Netty架构剖析  Mina VS Netty  Netty行业应用 Netty介绍 Netty是一个异步、事件驱动的网络应用框架。 基于Netty,可以快速的开发和部署高性能、 高可用的网络服务端和客户端应用。 Netty架构剖析-性能模型 通信性能三要素  传输  协议  线程 Netty架构剖析-性能模型  IO模型:异步非阻塞I/O  数据协议:可定制的编解码框架  线程模型:Reactor线程模型 Netty架构剖析-性能模型  JDK1.4开始提供非阻塞I/O(NIO)  JDK1.5_update10版本使用epoll替代了传统的 select/poll Netty架构剖析-性能模型 零拷贝  Netty的接收和发送ByteBuffer采用DIRECT BUFFERS  Netty提供了组合Buffer对象,可以聚合多个 ByteBuffer对象,用户可以像操作一个 Buffer那样方便的对组合Buffer进行操作  Netty的文件传输采用了transferTo方法 Netty架构剖析-性能模型 内存池 执行300万次,采用内存 池性能比朝生夕灭的 ByteBuf高23倍左右 Netty架构剖析-单线程模型 Reactor单线程模型,指的是所有的IO操作都在 同一个NIO线程上面完成 Netty架构剖析-多线程模型  专门一个NIO线程-Acceptor线程用于监听服务端, 接收客户端的TCP连接请求;  网络IO操作-读、写等由一个NIO线程池负责 Netty架构剖析-线程模型 无锁化的串行设计:为了尽可能提升性能,Netty 采用了串行无锁化设计,在IO线程内部进行串行 操作,避免多线程竞争导致的性能下降。 Netty架构剖析-协议 影响序列化性能的关键因素总结如下: 1.序列化后的码流大小(网络带宽的占用); 2.列化&反序列化的性能(CPU资源占用)。 Netty架构剖析-协议 可定制的序列化框架  ProtoBuf  Java序列化  Xml  用户自定义序列化框架 Netty架构剖析-可靠性 心跳检测 读空闲;写空闲;读写空闲 Netty架构剖析-可靠性 Reactor线程的保护  某个消息的异常不应该导致整条链路不可 用;  某条链路不可用不应该导致其它链路不可 用;  JDK epoll 空轮询BUG的检测和修复 Netty架构剖析-可靠性 内存保护  缓冲区的内存泄漏保护:内存检测和释放  缓冲区内存溢出保护:对缓冲区进行上限保 护 Netty架构剖析-可靠性 流量整形 流量整形(Traffic Shaping)是一种主动调整 流量输出速率的措施。一个典型应用是基于下游 网络结点的TP指标来控制本地流量的输出。 Netty提供全局级和链路级流量整形功能。 Netty架构剖析-安全性 Netty安全性  SSL认证:SSL单向认证、SSL双向认证  IP黑白名单校验  接入认证 Netty逻辑架构 Mina VS Netty 相同点:  基于Reactor模式的NIO框架  基于链式的Handler编排机制  对JDK的NIO类库进行了封装,屏蔽底层细节 Mina VS Netty 不同点:  ByteBuffer的封装和功能不同  I/O 线程模型不同  内置的编解码能力不同  内置的应用层协议不同  当前活跃度不同  功能的丰富度不同  未来的前景不同 行业应用-互联网应用 互联网架构演进:由垂直架构向分布式服务框架 演进 Netty互联网应用-Dubbo Dubbo的RPC远程服务调用默认使用 Netty+Dubbo协议实现:  Dubbo RCP框架默认推荐使用Dubbo协议进行 通信和数据传输,相比于老的Hessian协议 性能更高  支持异步I/O通信 Netty互联网应用-Dubbo Netty互联网应用-Twitter Netty在Twitter得到了大量的应用:  Finagle是Twitter协议无关的RPC框架,用于实 现大部分内部服务,如搜索,它的传输层建立在 Netty之上  TFE(Twitter前端)是专有的填鸭式反向代理, 它使用Netty为大部分面向公众的HTTP和SPDY流量 提供服务  Cloudhopper每月使用Netty向遍布世界各地数 以百计的运营商发送数十亿条短信息 Netty互联网应用-FaceBook  Nifty是facebook公司开源的,基于netty的 thrift服务端和客户端实现。  Thrift是一个可伸缩的跨语言的服务开发框架, 利用Nifty可以快速开发基于Netty的thrift服务端 和客户端程序。 Netty互联网应用-雅虎 Yahoo工程师Bobby Evans:Netty让Storm飞速运行:  在小规模测试中(没有资源冲突),Netty比 zeromq更快(40-100%)  在大规模测试中,当把它限制在单线程上,我 们每秒能够获得比zeromq多85%到111%的消息 Netty现在是Yahoo Storm集群的默认消息层框架 Netty行业应用-大数据 Apache Avro是Hadoop、Flume等的底层序列化和数 据传输框架。 老版本的Avro基于HTTP协议提供服务,新版本默认 基于Netty提供序列化和数据传输能力。 Netty行业应用总结 高并发:由于采用异步非阻塞模式,一个Netty 服务端可以同时处理成千上万的客户端; 高性能:Netty的综合性能在各个NIO框架中最高, 它的单节点吞吐量非常高 安全性:支持HTTPS、SSL等,可以在传输层进行 安全控制; 定制性:可以方便的实现业务逻辑的定制 可靠性:内存保护、流量整形等 加入我们 华为开源软件能力中心 开源软件研究 /跟踪 开源软件开发/ 贡献 Committer 如果你热爱开源 想追踪最前沿的技术 加入华为开源开发部 联系方式 微信&手机:18500988099 chengguangwei@huawei.com Q & A 谢谢各位聆听 @InfoQ infoqchina
还剩31页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

wph1129

贡献于2014-12-10

下载需要 8 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf