第 7 章 高性能服务结构设计

有不少服务器开发新人总是喜欢问如何学习高性能服务器开发这一类问题,对于这类问题,我通常有一种哭笑不得的感觉。平心而论,“高性能服务器”开发从来都不是刻意学来的,不同的业务场景对服务的性能要求不一样。从单个服务演化到支持分布式的一组服务,是在解决实际业务问题时不断演化、改进而来的。所以,新手在学习服务器开发,最正确的方式应该是先尽量把单机服务的性能做到极致或者最优,再纵向扩展,学习多点、分布式等知识。

那么何为“高性能高并发”呢?从技术的角度来说,所谓高性能就是服务器能流畅地处理各个客户端的连接并尽量低延迟地应答客户端的请求;所谓高并发,不仅指的是服务器可以同时支持多的客户端连接,而且服务器能流畅地处理连接期间与这些客户端不间断有数据来往。网络上经常有各种网络库号称单个服务能同时支持百万甚至千万的并发,然后我实际去看了下,结果发现只是能同时支持很多的连接而已。如果一个服务器能单纯地接受n个连接(n可能很大),但是不能流畅地处理与这些连接之间的数据来往也没有任何意义,这种服务器框架只是“玩具型”的,对实际生产应用没有任何意义。

那如何将单机服务的性能做到最优呢?首先高性能服务肯定依赖于服务所在的操作系统硬件(内存、CPU、磁盘、网络带宽等),本书不讨论这些硬件层面上的问题,单纯地从软件设计层面上进行解读。对于特定的编程语言,除了编程语言层面上的,剩下的就是这个服务的结构。那么一个良好的服务器程序,其程序结构应该如何设计呢?本章将回答这个问题。

本章目录

7.1 网络通信组件的效率问题

7.2 最原始的服务器结构

7.3 一个连接一个线程模型

7.4 Reactor 模式

7.5 one thread one loop 思想

7.6 收数据与发数据的正确姿势

7.7 发送接收缓冲区设计要点

7.8 网络库的分层设计

7.9 后端服务中的定时器设计.md

7.10 业务数据处理一定要单独开线程吗

7.11 侵入式程序结构与非侵入式程序结构

7.12 带有网络通信模块的服务器的经典结构

上次更新: 2025/04/01, 20:53:14

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>