Netty I/O 多路复用

谈起 Netty 现在大家都很熟悉了,它在很多中间件和平台架构里都有扮演很关键的角色,我最早了解到 Netty 是在阅读 dubbo 源码时,而后来在工作中构建平台级的 TCP 长连接网关时也主要使用到了 Netty,包括我现在负责的百亿级流量网关也主要是基于 Netty 和 Mina 搭建实现的。

Netty 是一个可用于快速开发可维护的高性能协议服务器和客户端的异步的事件驱动网络应用框架(引自 netty.io),就我个人理解,它在实现基于 TCP NIO 长链接的通信领域可以提供了强大的框架支持。所以,了解 Netty 是非常大有裨益的,推荐书籍《Netty in Action》(Norman Maurer)。

我一直认为,要想真正的 Cover 住一个框架,就一定要阅读过它的源码,否则始终是浮在表面上的。我之前读 Netty 的源码也是断断续续,也没有系统的看过,所以,这次就打算好好整理一下,对 Netty 核心组件的源码进行一次解读。


在学习 Netty 之前,一定要对 NIO 技术有一定的了解,包括 I/O 多路复用、Reactor 设计模式、Zero Copy 零拷贝等等,所谓磨刀不误砍柴工嘛。本篇文章我会先介绍一下这些知识点,然后从下篇开始就正式分析 Netty 每个核心组件的源码,而我们讨论的 Netty 核心组件有:Channel,EventLoop、EventTrigger、ChannelFuture、ChannelHandler、ChannelPipeline 和 Bootstrapping 共7个。

下面就进入本篇要点:

1、I/O 多路复用(I/O multiplexing)

先想一想,I/O 多路复用与 BIO、NIO 有什么不同?

举个例子,当用户访问 taobao.com,用户线程会将请求从用户态发送到内核态,操作系统在内核里操作网卡把数据发出去,并等待结果从网卡里返回来,而整个数据传输的过程就是一次网络 I/O 传输的过程,其中,用户线程在等待请求返回的过程中,BIO、NIO、I/O 多路复用采用的方式有所不同。

BIO 是同步阻塞 I/O,用户线程向内核发起 read 调用后就阻塞并进入休眠,直到数据从内核态拷贝到用户态,内核再把用户线程唤醒。

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。