跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • Spring Data JPA
  • MyBatis

  • Spring

  • SpringBoot

  • Jdk

  • Tomcat

  • Netty

    • 基础

      • Netty是什么?
        • 1.1、Netty简介
          • 1.1.1、异步、事件驱动
          • 1.1.2、核⼼架构
          • 1.1.3、Netty优势
          • 1.1.4、版本说明
        • 1.2、为什么选择Netty,⽽不选择原⽣的NIO?
        • 1.3、Netty应⽤场景
        • 1.4、电商系统⾃研RPC
      • Netty的高性能设计
      • Netty快速入⻔
      • Netty核心组件
      • 详解ByteBuf
    • 进阶

    • 资料
  • 若依

  • Traefik

  • Openresty

  • 开源框架
  • Netty
  • 基础
Revin
2023-06-17
目录

Netty是什么?

# 1.1、Netty简介

Netty是⼀个⾼性能的、异步的、基于事件驱动的⽹络应⽤框架。官⽹:https://netty.io/

官⽅对它有这样的描述:

Netty is an asynchronous event-driven network application framework for rapid development

of maintainable high performance protocol servers & clients.

# 1.1.1、异步、事件驱动

同步、异步是相对的,在请求或执⾏过程中,如果会阻塞等待,就是同步操作,反之就是异步操作。

Page1_01

在我们熟悉的Ajax请求,就是异步并且是基于事件驱动的:

$(function(){
    var list = {};
$.ajax({ //请求方式
type : "POST",
//请求的媒体类型
contentType: "application/json;charset=UTF-8", //请求地址
url : "http://127.0.0.1/admin/list/", //数据,json字符串
data : JSON.stringify(list),
//请求成功
success : function(result) {
            console.log(result);
        },
//请求失败,包含具体的错误信息 error : function(e){
            console.log(e.status);
            console.log(e.responseText);
        }
}); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# 1.1.2、核⼼架构

Page2_01

  • 核⼼

    • 可扩展的事件模型

    • 统⼀的通信api

      • ⽆论是http还是socket都使⽤统⼀的api,简化了操作
    • 零拷⻉机制与字节缓冲区

  • 传输服务

    • ⽀持socket以及datagram(数据报)

    • ⽀持http协议

    • In-VM Pipe (管道协议)

  • 协议⽀持

    • http 以及 websocket

    • SSL 安全套接字协议⽀持

  • Google Protobuf (序列化框架)

  • ⽀持zlib、gzip压缩

  • ⽀持⼤⽂件的传输

  • RTSP(实时流传输协议,是TCP/IP协议体系中的⼀个应⽤层协议)

  • ⽀持⼆进制协议并且提供了完整的单元测试

# 1.1.3、Netty优势

  • Netty是基于Java的NIO实现的,Netty将各种传输类型、协议的实现API进⾏了统⼀封装,实现了阻塞和⾮阻塞Socket。

  • 基于事件模型实现,可以清晰的分离关注点,让开发者可以聚焦业务,提升开发效率。

  • ⾼度可定制的线程模型-单线程、⼀个或多个线程池,如SEDA(Staged Event-Driven Architecture)

  • SEDA:把⼀个请求处理过程分成⼏个Stage,不同资源消耗的Stage使⽤不同数量的线程来处理,Stage间使⽤事件驱动的异步通信模式。

  • Netty只依赖了JDK底层api,没有其他的依赖,如:Netty 3.X依赖JDK5以上,Netty4.x依赖JDK6以上。

  • Netty在⽹络通信⽅⾯更加的⾼性能、低延迟,尽可能的减少不必要的内存拷⻉,提⾼性能。

  • 在安全⽅⾯,完整的SSL/TLS和StartTLS⽀持。

  • 社区⽐较活跃,版本迭代周期短,发现bug可以快速修复,新版本也会不断的加⼊。

# 1.1.4、版本说明

Netty的版本分为,3.x、4.x和5.x,其中5.x版本已经被官⽅废弃,详情查看github的issue:https://github.com/netty/netty/issues/4466

Page4_01

废弃5.x的主要原因是,使⽤ForkJoinPool后复杂度提升了,但是性能⽅⾯并没有明显的优势,反⽽给项

⽬的维护带来了很⼤的⼯作量,因此还有到发布新版本的时机,所以将5.x废弃。

Netty的下载:

Page4_02

⽬前Netty的最新版本为4.1.50.Final,本套课程基于此版本学习的。

# 1.2、为什么选择Netty,⽽不选择原⽣的NIO?

在⽹络编程⽅⾯,⼀般都不会选择原⽣的NIO,⽽是会选择Netty、Mina等封装后的框架,主要原因

是:

  • NIO的类库和API繁杂,使⽤麻烦,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。

  • 需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和⽹路编程⾮常熟悉,才能编写出⾼质量的NIO程序。

  • 可靠性能⼒补⻬,⼯作量和难度都⾮常⼤。例如客户端⾯临断连重连、⽹络闪断、半包读写、失败缓存、⽹络拥塞和异常码流的处理等问题,NIO编程的特点是功能开发相对容易,但是可靠性能⼒补⻬的⼯作量和难度都⾮常⼤。

  • JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官⽅声称在JDK 1.6版本的update18修复了该问题,但是直到JDK 1.7版本该问题仍旧存在,只不过该BUG发⽣概率降低了⼀些⽽已,它并没有得到根本性解决。

    • 具体问题查看:https://www.jianshu.com/p/3ec120ca46b2

# 1.3、Netty应⽤场景

Netty的应⽤场景是⾮常⼴泛的,⽐如:互联⽹⾏业的、游戏⾏业、⼤数据⾏业、医疗⾏业、⾦融等⾏

业。

  • 互联⽹⾏业

    • 在互联⽹⾏业项⽬中,最具代表性的就是分布式系统架构的远程服务调⽤,通过RPC的⽅式进⾏⾼性能的服务调⽤,⽬前主流的RPC框架底层均采⽤了Netty作为⽹络通信组件。

    • ⽐如:阿⾥巴巴的分布式服务治理框架Dubbo,底层就是使⽤Netty作为通信组件。

    • gRPC,是Google提供的⾼性能RPC框架,底层也使⽤了Netty。

  • ⼤数据⾏业

    • ⼤数据⾏业中的许多技术也采⽤了Netty作为通信组件,如:Flink、Spark、Elasticsearch

等。

官⽅列出了使⽤Netty的⼀些项⽬:https://netty.io/wiki/related-projects.html

Page6_01

使用Netty的典型项目

数据库: Cassandra

大数据处理: Spark、Hadoop

Message Queue:RocketMQ

检索: Elasticsearch

框架:gRPC、Apache Dubbo、Spring5(响应式编程WebFlux)

分布式协调器:ZooKeeper

工具类: async-http-client

........

# 1.4、电商系统⾃研RPC

市⾯上有很多的RPC框架,⽐如:dubbo、gRPC、thrift等产品,在开发项⽬时,我们可以选择使⽤已

有的RPC产品,也可以⾃研RPC,⼀线⼤⼚⼀般会选择⾃研RPC,会根据⾃身的业务特点进⾏研发,以

追求更⾼的性能。

本教程,我们也从⾃研RPC需求出发,尝试着使⽤Netty来开发属于⾃⼰的RPC框架。

RPC基本的调⽤示意图:

Page6_02

在实现⾃研RPC后,我们将基于此来实现电商系统中的订单模块的业务,当然了,这⾥所实现的业务⽐

较简单,主要是学习⾃研RPC为主。

Page7_01

上次更新: 2025/04/03, 11:07:08
Apache Tomcat Web应用服务器
Netty的高性能设计

← Apache Tomcat Web应用服务器 Netty的高性能设计→

最近更新
01
tailwindcss
03-26
02
PaddleSpeech
02-18
03
whisper
02-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式