Netty是什么

作者: LandHu | 来源:发表于2019-04-10 17:43 被阅读65次

    本文基于Netty4.1展开介绍相关理论模型,使用场景,基本组件、整体架构

    Netty简介

    Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。

    JDK原生NIO程序的问题

    JDK原生也有一套网络应用程序API,但是存在一系列问题,主要如下:

    • NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等
    • 需要具备其它的额外技能做铺垫,例如熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的NIO程序
    • 可靠性能力补齐,开发工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大
    • JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该bug发生概率降低了一些而已,它并没有被根本解决

    Netty的特点

    Netty的对JDK自带的NIO的API进行封装,解决上述问题,主要特点有:

    • 设计优雅
      适用于各种传输类型的统一API - 阻塞和非阻塞Socket
      基于灵活且可扩展的事件模型,可以清晰地分离关注点
      高度可定制的线程模型 - 单线程,一个或多个线程池
      真正的无连接数据报套接字支持(自3.1起)
    • 使用方便
      详细记录的Javadoc,用户指南和示例
      没有其他依赖项,JDK 5(Netty 3.x)或6(Netty 4.x)就足够了
    • 高性能
      吞吐量更高,延迟更低
      减少资源消耗
      最小化不必要的内存复制
    • 安全
      完整的SSL / TLS和StartTLS支持
    • 社区活跃,不断更新
      社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会被加入

    Netty常见使用场景

    • 互联网行业
      在分布式系统中,各个节点之间需要远程服务调用,高性能的RPC框架必不可少,Netty作为异步高新能的通信框架,往往作为基础通信组件被这些RPC框架使用。
      典型的应用有:阿里分布式服务框架Dubbo的RPC框架使用Dubbo协议进行节点间通信,Dubbo协议默认使用Netty作为基础通信组件,用于实现各进程节点之间的内部通信。
    • 游戏行业
      无论是手游服务端还是大型的网络游戏,Java语言得到了越来越广泛的应用。Netty作为高性能的基础通信组件,它本身提供了TCP/UDP和HTTP协议栈。
      非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过Netty进行高性能的通信
    • 大数据领域
      经典的Hadoop的高性能通信和序列化组件Avro的RPC框架,默认采用Netty进行跨界点通信,它的Netty Service基于Netty框架二次封装实现

    技术讨论 & 疑问建议 & 个人博客

    版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,转载请注明出处!

    相关文章

      网友评论

        本文标题:Netty是什么

        本文链接:https://www.haomeiwen.com/subject/bhigiqtx.html