【Netty01】什么是Netty?

概要

Netty:由韩国人:Trustin Lee 于2004年开发。 Netty 是基于 Java NIO 的异步事件驱动的网络应用框架,使用 Netty 可以快速开发网络应用,Netty 提供了高层次的抽象来简化 TCP 和 UDP 服务器的编程,但是你仍然可以使用底层的 API。 Netty 的内部实现是很复杂的,但是 Netty 提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty 是完全基于 NIO 实现的,所以整个 Netty 都是异步的。 Netty 是最流行的 NIO 框架,它已经得到成百上千的商业、商用项目验证,许多框架和开源组件的底层 rpc 都是使用的 Netty,如 Dubbo、Elasticsearch 等等。

Netty 的发展历程:
在这里插入图片描述

整体架构流程

Netty的结构:
在这里插入图片描述

技术名词解释

  • NIO:

NIO,全称New IO,是Java中引入的一个新的IO API,从Java 1.4版本开始就被广泛应用。它是对原有IO API的一种改进,主要区别在于NIO支持面向缓冲区的、基于通道的IO操作,而非传统的基于流的IO操作。
在NIO中,数据被读取到缓冲区(Buffer)中,然后可以从缓冲区中写入数据。缓冲区提供了对数据的结构化访问,并且可以在读写数据时进行复杂操作。同时,NIO使用了通道(Channel)这个抽象,使得我们可以对文件进行更高效的读写操作。
与传统的IO相比,NIO在处理大量连接时具有显著的优势。传统IO在处理数据传输请求时,针对每个传输请求生成一个线程,这会导致在同时处理大量连接时,会实例化大量的线程对象,从而消耗大量的系统资源。而NIO使用selector来轮询IO流,以事件驱动形式来响应IO事件的处理,只需实例化很少的线程对象,通过对线程的复用来提高CPU资源的使用效率。
因此,NIO特别适合处理连接数目特别多,但连接相对较短(轻操作)的场景。许多开源框架,如Jetty、ZooKeeper和Netty等,都已经大量应用了NIO技术。NIO是一种高效的、基于缓冲区和通道的IO技术,适用于处理大量连接、需要高效IO操作的场景。

  • TCP:

TCP(Transmission Control Protocol,传输控制协议)是互联网协议套件的主要协议之一。它起源于最初的网络实现,其中它补充了互联网协议(IP)。因此,整个套件通常被称为TCP/IP。TCP提供了可靠的、有序的、并且经过错误检查的字节流(octets)传输服务,这些服务是在通过IP网络进行通信的主机上运行的应用程序之间的。主要的互联网应用,如万维网、电子邮件、远程管理和文件传输都依赖于TCP,它是TCP/IP套件的传输层部分。TCP是面向连接的,客户端和服务器之间的连接必须在发送数据之前建立。服务器必须在建立连接之前监听(被动打开)客户端的连接请求。三次握手(主动打开)、重传和错误检测增加了可靠性,但延长了延迟。

  • UDP:

UDP(用户数据报协议,User Datagram Protocol)是一种无连接的、不可靠的、基于数据报的传输层通信协议。它为应用层提供了一种无需建立连接就可以直接发送数据报的方法。UDP在IP报文的协议号是17。UDP报文分为报文头和数据区域两部分。报头由源端口、目的端口、报文长度以及校验和组成。UDP报文在发送时无需事先建立连接,没有使用TCP中的确认技术或滑动窗口机制,因此UDP不能保证数据传输的可靠性,也无法避免接收到重复数据的情况。 UDP适合于不需要高度可靠性,但对速度和实时性要求较高的场景,例如视频会议、网络游戏等。同时,由于UDP的无连接性,它也常被用于广播和多播通信。虽然UDP本身不提供可靠性,但应用层协议可以在其之上实现必要的错误检测和恢复机制。例如,实时传输协议(RTP)就是在UDP之上添加了序列号和时间戳来支持实时音视频传输。总的来说,UDP提供了一种简单快速的数据传输方式,但使用它需要对应用需求和网络环境有足够的理解。

  • Dubbo:

Dubbo是阿里巴巴开源的一款高性能、轻量级的Java RPC框架。它主要用于服务化架构中的远程方法调用,使得服务消费者可以像调用本地方法一样调用远程方法,只需简单配置,无需API侵入。Dubbo具有连通性、健壮性、伸缩性、升级性等优点,能够提升系统整体的扩展性。
在Dubbo的架构中,服务提供者将自己的服务注册到注册中心,等待消费者调用。注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,因此压力较小。服务消费者从注册中心获取服务提供者的地址,然后通过网络调用其提供的服务。Dubbo自带了负载均衡、容错等机制,可以保证服务的高可用性。
Dubbo还支持多种协议,如dubbo、http、webservice等,开发者可以根据自己的需求选择合适的协议。并且,Dubbo使用Java的反射机制来实现远程调用,当消费者调用服务时,Dubbo会自动将调用转化为网络数据包,发送给服务提供者。此外,Dubbo还支持多种集群容错机制,如failover、failfast、failsafe等,当某个服务提供者出现故障时,Dubbo会自动切换到其他健康的服务提供者,保证服务的可用性。
Dubbo是一款功能强大、易于使用的Java RPC框架,适用于各种需要远程方法调用的场景,是服务化架构中的重要组成部分。

  • Elasticsearch:

Elasticsearch是一种开源的、分布式的、RESTful的搜索和分析引擎,它能够在几乎实时的情况下存储、检索和分析大量数据。Elasticsearch是基于Apache Lucene构建的,Lucene是一个高性能的、完全特性的搜索引擎库。
Elasticsearch的主要特性包括:

  • 全文搜索:Elasticsearch使用倒排索引,这是一种特殊的数据结构,用于全文搜索。倒排索引中的每个唯一词都有一个包含它的文档列表。
  • 分布式搜索:您可以在多台服务器上存储数据,并且Elasticsearch会自动处理数据的分片和复制。这意味着您的数据是安全的,而且您可以扩展您的系统以处理更多的数据。
  • 实时分析:Elasticsearch可以在大量数据上进行近实时的复杂分析,并返回结果。
  • 易于使用:Elasticsearch支持RESTful API,这意味着您可以使用HTTP方法(如GET、POST)来操作您的数据。
  • 模式自由:Elasticsearch是模式自由的,这意味着您不需要提前定义数据结构,可以在任何时候添加新的字段。
    Elasticsearch被广泛应用于各种场景,包括全文搜索、日志和事务数据分析、指标和安全事件数据存储等。它是Elastic Stack(也被称为ELK Stack,包括Elasticsearch、Logstash、Kibana)的核心组件。Elastic Stack是一种流行的开源解决方案,用于搜索、分析和可视化日志数据。Elasticsearch也被许多开源和商业应用程序用作搜索和分析引擎。Elasticsearch是一种强大而灵活的技术,可以处理各种类型和规模的数据搜索和分析需求。

技术细节

  • 异步事件驱动:Netty 会根据客户端事件(如连接、读、写等)做出响应。
  • 基于 Java NIO:Netty 是基于 Java NIO 构建的,降低了 Java NIO 的使用难度和上手门槛。
  • 高性能和高并发:Netty 提供了高性能和高并发的网络 IO 解决方案。
  • API 使用简单:Netty 的 API 使用简单,学习成本低。
  • 内置了多种解码编码器:支持多种协议。
  • 社区活跃:Netty 的社区非常活跃,发现的 BUG 会及时修复,迭代版本周期短,不断加入新的功能。

小结

总的来说,Netty是一款功能强大、易于使用的网络通信框架,它能够帮助开发者快速、高效地构建高性能、高可靠性的网络应用。

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值