• Netty《一》


    作者:郭无心
    链接:https://www.zhihu.com/question/24322387/answer/78947405
    来源:知乎
    著作权归作者所有,转载请联系作者获得授权。

    Netty是什么?

    1)本质:JBoss做的一个Jar包

    2)目的:快速开发高性能、高可靠性的网络服务器和客户端程序

    3)优点:提供异步的、事件驱动的网络应用程序框架和工具

    通俗的说:一个好使的处理Socket的东东


    如果没有Netty?

    远古:

    java.net + java.io
    

    近代:

    java.nio
    

    其他:

    Mina,Grizzly
    

    与Mina相比有什么优势?

    1、都是Trustin Lee的作品,Netty更晚;

    2、Mina将内核和一些特性的联系过于紧密,使得用户在不需要这些特性的时候无法脱离,相比下性能会有所下降,Netty解决了这个设计问题;

    3、Netty的文档更清晰,很多Mina的特性在Netty里都有;

    4、Netty更新周期更短,新版本的发布比较快;

    5、它们的架构差别不大,Mina靠apache生存,而Netty靠jboss,和jboss的结合度非常高,Netty有对google protocal buf的支持,有更完整的ioc容器支持(spring,guice,jbossmc和osgi);

    6、Netty比Mina使用起来更简单,Netty里你可以自定义的处理upstream events 或/和 downstream events,可以使用decoder和encoder来解码和编码发送内容;

    7、Netty和Mina在处理UDP时有一些不同,Netty将UDP无连接的特性暴露出来;而Mina对UDP进行了高级层次的抽象,可以把UDP当成"面向连接"的协议,而要Netty做到这一点比较困难。

    -----------------------------------------------------------------------------------------------------------------------------------------

    Netty的特性

    1)设计

    统一的API,适用于不同的协议(阻塞和非阻塞)

    基于灵活、可扩展的事件驱动模型

    高度可定制的线程模型

    可靠的无连接数据Socket支持(UDP)


    2)性能

    更好的吞吐量,低延迟

    更省资源

    尽量减少不必要的内存拷贝


    3)安全

    完整的SSL/TLS和STARTTLS的支持

    能在Applet与Android的限制环境运行良好


    4)健壮性

    不再因过快、过慢或超负载连接导致OutOfMemoryError

    不再有在高速网络环境下NIO读写频率不一致的问题


    5)易用

    完善的JavaDoc,用户指南和样例

    简洁简单

    仅信赖于JDK1.5


    -------------------------------------------------------------------------------------------------------------------------------------------

    Netty 在哪些行业得到了应用?

    • 互联网行业:随着网站规模的不断扩大,系统并发访问量也越来越高,传统基于 Tomcat 等 Web 容器的垂直架构已经无法满足需求,需要拆分应用进行服务化,以提高开发和维护效率。从组网情况看,垂直的架构拆分之后,系统采用分布式部署,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。

      典型的应用有:阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。它的架构图如下:




    其中,服务提供者和服务消费者之间,服务提供者、服务消费者和性能统计节点之间使用 Netty 进行异步/同步通信。

      除了 Dubbo 之外,淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,也采用 Netty 进行高性能、异步通信。

      除了阿里系和淘宝系之外,很多其它的大型互联网公司或者电商内部也已经大量使用 Netty 构建高性能、分布式的网络服务器。

    • 游戏行业:无论是手游服务端、还是大型的网络游戏,Java 语言得到了越来越广泛的应用。Netty 作为高性能的基础通信组件,它本身提供了 TCP/UDP 和 HTTP 协议栈,非常方便定制和开发私有协议栈。账号登陆服务器、地图服务器之间可以方便的通过 Netty 进行高性能的通信,架构示意图如下:



      图1-2 Netty 在游戏服务器架构中的应用

    • 大数据领域:经典的 Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。

      大数据计算往往采用多个计算节点和一个/N个汇总节点进行分布式部署,各节点之间存在海量的数据交换。由于 Netty 的综合性能是目前各个成熟 NIO 框架中最高的,因此,往往会被选中用作大数据各节点间的通信。

    • 企业软件:企业和 IT 集成需要 ESB,Netty 对多协议支持、私有协议定制的简洁性和高性能是 ESB RPC 框架的首选通信组件。事实上,很多企业总线厂商会选择 Netty 作为基础通信组件,用于企业的 IT 集成。

    • 通信行业:Netty 的异步高性能、高可靠性和高成熟度的优点,使它在通信行业得到了大量的应用。

  • 相关阅读:
    firefox远程调试
    PHP使用unset销毁变量并释放内存(转)
    去掉超级链接的虚线框
    如何减少 reflow(回流)和 repaint(重绘)
    Chrome远程调试
    3大mobile浏览器远程调试
    IE6下使用滤镜后链接无法点击的BUG
    让IE6区块元素具备display:inlineblock属性
    Call to undefined function curl_init()解决方法(转)
    CSS3 Gradient
  • 原文地址:https://www.cnblogs.com/abc8023/p/6788866.html
Copyright © 2020-2023  润新知