网络编程框架实战:基于 JDK21 新特性,结合虚拟线程,拿捏堆外内存,从 0 到 1 构建高性能网络框架

你会学到什么?

在本次实战课程中,你会学到以下Java开发知识点:

  1. 如何利用虚拟线程的特性,用更低的资源消耗获取更高的并发度;
  2. 如何利用Project Panama提供的API管理堆外内存的周期,并利用FFIC语言或其他语言构建的动态库调用函数;
  3. 如何在Java中设计一个多线程应用,在保障整体线程安全的前提下,高效完成业务逻辑;
  4. 如何分层次,将实现一个网络框架的大任务拆分成多个子模块进行设计与实现,同时保障对外提供API的易用性和整体代码良好的可读性。

在本次实战中,我们最终构建的网络框架具有以下特征:

  1. 可基于TCP协议自定义网络协议并实现具体业务,我们会在实战部分实现一个简单的 HTTP1.1 协议返回 json 字符串用于测试;
  2. 可正确管理多线程之间交互时的线程安全性,满足低延时和高并发的需求,且系统整体维持较低的负载;
  3. 可正确管理堆外内存的生命周期,确保不出现内存泄漏等问题;
  4. 可兼容IPV4IPV6两种协议;
  5. 支持极简从裸TCP连接切换至使用OPENSSL库提供的SSL/TLS加密连接,也就是仅需修改数行代码即可将HTTP协议升级为HTTPS协议;
  6. 可在Windows系统、Linux系统和macOS系统中跨平台使用,并提供一致的对外API
  7. 该网络框架应该能非常好的适配在JDK21中正式推出的虚拟线程模型,能够在平台线程和虚拟线程之间无感切换;
  8. 在最终的压力测试部分中,在同样使用虚拟线程处理业务请求,返回简单json字符串的场景下,相比使用Spring Boot框架和Netty框架构建的HTTPHTTPS服务器,我们本次构建的网络框架在吞吐量和延时方面都具备一定优势。

课程简介

网络编程是后端开发工程师绕不开的话题,HTTP服务器又是Web开发的核心之一。得益于Spring等框架对其进行的良好封装,我们在日常开发业务时很少需要关注Tomcat服务器或其他Web服务器中的内部细节,但想要进一步修炼自己的内功,深入网络编程可谓是一条必经之路

Java的网络编程领域中,Netty框架可以说是其中的佼佼者,但其源码的层级较深,逻辑也相对复杂,从源码入手学习网络编程会是一条非常坎坷的道路。那我们为什么不从头开始,自己设计并实现一个完备的网络编程框架呢?

恰逢JDK21中推出了虚拟线程和堆外内存与Native方法调用等功能,并引入了非常多的新语法特性,这给我们调用操作系统API实现网络框架带来了非常多的便利。

于是我决定利用这些功从头开始构建一个简洁的,能够在满足代码高可读性、整体高可用性的前提下,兼顾高并发低延迟需求的网络框架,尽可能代替Netty在需要自定义网络协议通信的项目中使用。

在构建该网络框架时,我将设计时的心得体会,开发中所有知识点,以及对于该框架未来可改进部分的一些思考,一起凝聚成了本小册中的内容。我希望并相信所有阅读完本小册的读者都能做到从零到一实现自己的网络栈,不再惧怕网络编程中的任何难点,同时也欢迎大家和我一起参与到对该开源项目的建设中来。

在本小册中,我会使用许多从JDK8JDK21以来发布的新语法特性,从 0 开始设计并构建一个基于TCP协议实现的网络框架,手把手带领读者逐行完成代码的编写、调试,并最终通过压力测试验证该网络框架的性能。

小册从整体内容上可以划分为基础篇和实战篇。

网络编程框架实战:基于 JDK21 新特性,结合虚拟线程,拿捏堆外内存,从 0 到 1 构建高性能网络框架

其中,基础篇分为两大部分。

第一部分:第 1 节到第 5 节。这部分主要讲解整个实战项目的基础知识,我会着重介绍本次实战中使用到的JDK21虚拟线程和堆外内存管理的相关知识,方便日常使用JDK8开发的读者们快速的上手一些JDK新特性,这些特性也会在本次实战中使用到。同时,我会讲解一些简单的C语言知识,方便之前没有了解过C语言的读者理解。

第二部分:第 6 节到第 10 节。这部分主要讲解TCP协议、socket网络编程 、IO多路复用模型和Reactor线程模型,以及使用SSL/TLS层加密等相关知识。这部分主要是为我们后续网络框架实战开发打下理论基础,帮助大家了解如何去构建一个健壮的、功能强大的多线程网络框架。

而在实战篇中,我将带领大家手把手来完成整个网络框架,从设计到实现,并最终通过压力测试。

最后的最后,我们还会总结整个构建的过程,并列出一些后续可优化的方向,以便大家能够继续延伸和完善。

课程目录

1、基础篇:项目总览
2、基础篇:开发环境介绍与Java发展前瞻
3、基础篇:理解虚拟线程
4、基础篇:探究FFI与堆外内存管理
5、基础篇:简明C语言基础
6、基础篇:TCP协议与socket编程基础(上)
7、基础篇:TCP协议与socket编程基础(下)
8、基础篇:IO多路复用模型详解
9、基础篇:Reactor线程模型与Java多线程编程体系
10、基础篇:使用SSL/TLS协议进行加密通讯
11、实战篇:搭建项目结构
12、实战篇:构建堆外内存访问模型
13、实战篇:构建堆外内存读写模型(上)
14、实战篇:构建堆外内存读写模型(下)
15、实战篇:自顶而下设计网络API
16、实战篇:构建多路复用模型
17、实战篇:设计读写模型
18、实战篇:设计Sentry与Protocol的细节
19、实战篇:实现Native调用模型
20、实战篇:实现TCP连接的建立模型
21、实战篇:实现时间轮
22、实战篇:实现Protocol的写模型
23、实战篇:实现Protocol的读模型
24、实战篇:实现TCP协议和SSL/TLS加密的读写模型
25、实战篇:实现优雅停机
26、实战篇:整合虚拟线程
27、实战篇:对网络框架进行功能测试
28、实战篇:实现HTTP与HTTPS服务器
29、实战篇:对HTTP与HTTPS服务器进行性能测试
30、实战篇:项目总结

作者简介

benrush,物联网平台开发工程师。工作以来,一直从事物联网平台开发相关的工作,负责维护海量设备与物联网平台之间使用MQTTHTTP以及一系列自定义网络协议进行网络通信,确保消息传输时的高效性与稳定性,因此对于网络编程的领域有着比较深的理解。

平时热衷于使用Java语言新特性开发,目前正在基于Project Loom提供的虚拟线程与Project Panama提供的堆外内存访问 API 从头开发一款全新的开源微服务框架,该小册中的网络框架就属于其中的一部分。

(0)
上一篇 2024年1月20日 下午1:22
下一篇 2024年5月5日 上午11:59

相关推荐

发表回复

登录后才能评论