本文全面概述了后端系统架构中至关重要的网络和通信技术。内容涵盖了构建可扩展和高效分布式系统所需的基础协议、编程模型、连接管理策略、序列化方法和网络框架。有关利用这些技术的具体中间件组件的信息,请参阅中间件。
所有网络通信的基础都依赖于分层协议栈,它通过标准化接口使各种应用程序能够相互通信。
OSI(开放系统互连)模型提供了七层的概念框架,而 TCP/IP 模型将其精简为四个实用层。大多数后端开发都集中在这些模型的上层。
TCP(传输控制协议)是面向连接的,通过以下机制提供可靠、有序和错误检查的数据传输:
HTTP(超文本传输协议)在应用层运行于 TCP 之上。主要特点包括:
| HTTP/1.1 | HTTP/2 |
|---|---|
| 基于文本的协议 | 二进制分帧层 |
| 队头阻塞 | 多路复用 |
| 顺序处理 | 并行请求 |
| 头部重复 | 头部压缩 (HPACK) |
| 客户端拉取模型 | 服务器推送能力 |
HTTP/2 通过以下方式克服了 HTTP/1.1 的许多限制:
来源: README.md1292-1293 README.md1294-1299
HTTPS(超文本传输安全协议)使用 TLS/SSL 为 HTTP 增加了安全层。其实现涉及:
HTTPS 确保数据在传输过程中的安全,防止窃听、数据篡改和中间人攻击。
来源: README.md1300-1304 README.md1305-1306
网络编程模型定义了应用程序如何处理并发连接和 I/O 操作,直接影响系统性能和可扩展性。
五种具有不同性能特点的主要 I/O 模型
前四种模型在数据复制阶段是同步的,只有异步 I/O 是完全非阻塞的。
| 技术 | 特性 | 局限性 |
|---|---|---|
| select | 使用文件描述符的位掩码 | 限制为 1024 个文件描述符(x64 上为 2048),O(n) 扫描 |
| poll | 使用链表结构 | 没有文件描述符数量限制,仍然是 O(n) 扫描 |
| epoll | 使用红黑树和回调 | O(1) 就绪文件检测,性能一致 |
| kqueue | BSD/macOS 上等同于 epoll | 与 BSD 系统上的 epoll 类似 |
Epoll 和 kqueue 通过避免每次操作都扫描完整的描述符集,在多连接场景下提供了显著更好的性能。
来源: README.md1313-1321 README.md1330-1333 README.md1338-1339
Java NIO (New I/O) 通过以下方式提供非阻塞 I/O 能力:
Netty 等框架实现的 Reactor 模式,利用这种架构以更少的线程高效处理大量并发连接。
来源: README.md1323-1324 README.md1334-1336 README.md1346-1350
长连接在客户端和服务器之间保持持久连接,减少了握手开销,但需要适当管理以防止资源耗尽。
零拷贝是一种优化技术,它消除了内核空间和用户空间之间不必要的数据复制,显著提高了 I/O 性能
传统 I/O:
零拷贝 I/O:
Netty 通过其 ByteBuf 设计实现零拷贝,在不复制数据的情况下逻辑地连接物理上独立的缓冲区。
Netty 是一个基于 Java NIO 构建的高性能异步事件驱动网络应用框架。它实现了 Reactor 模式以实现高效的网络处理。
Netty 的主要优势
序列化对于将内存中的对象转换为可在网络上传输的格式并进行反序列化至关重要。
Protocol Buffers (Protobuf) 是 Google 开发的一种语言无关、平台无关、可扩展的结构化数据序列化机制
.proto 文件中的 schema 定义Hessian 是一种二进制 Web 服务协议
来源: README.md1355-1359 README.md1361-1368
RPC 框架基于网络协议和序列化格式,为服务间通信提供更高级别的抽象。
gRPC 是 Google 开发的高性能 RPC 框架
Apache Thrift,最初由 Facebook 开发
阿里巴巴的 Dubbo 是一个基于 Java 的 RPC 框架
来源: README.md1213-1216 README.md1218-1223 README.md1225-1228 README.md1230-1236
现代后端系统采用各种网络架构模式以实现可扩展性、性能和可靠性。
API 网关作为客户端应用程序的入口点,处理横切关注点:
这种模式集中了边缘功能,简化了客户端与后端服务的集成。
网络安全是后端架构的关键方面,需要通过多层安全实现深度防御。
来源: README.md1225-1236 README.md1300-1306 README.md1585-1587
网络性能直接影响应用程序的响应速度和吞吐量。关键优化领域包括:
| 领域 | 技术 |
|---|---|
| 连接管理 | 连接池、keep-alive 设置 |
| 数据传输 | 压缩、批量处理、分块传输 |
| 协议选择 | HTTP/2 vs. HTTP/1.1、WebSockets vs. 轮询 |
| 内容交付 | CDN 集成、地理分布 |
| 缓存 | 响应缓存、缓存控制头部 |
| 后端通信 | 高效序列化、服务同地部署 |
监控网络性能指标(延迟、吞吐量、错误率)对于识别瓶颈和验证优化至关重要。
网络和通信构成了分布式后端系统的基础。理解整个技术栈——从低层协议到高层架构模式——使架构师能够设计出可扩展、高性能和有弹性的系统。本文涵盖的技术和方法提供了一套全面的工具包,用于实现系统组件之间的高效通信。