(2023.08.12 Sat @KLN)
以架构师的角度来看,高性能架构设计集中在两个方面:
- 提升单服务器的性能,将其性能发挥到极致
- 设计服务器集群方案,以应对单服务器已经发挥到性能极限的情况
单服务器高性能
根据以往经验,单服务器高性能的关键之一是服务器采取的网络编程模型,即
- 服务器如何管理连接
- 服务器如何处理请求
而这两点都和操作系统的IO同埋进程模型相关
- I/O模型:阻塞、非阻塞、同步、异步
- 进程模型:单进程、多进程、多线程
Process per Connection, PPC
PPC指每次有新的连接就新建一个进程专门处理这个连接的请求,是传统UNIX网络服务器所采用的模型。
PPC的基本流程是
- 父进程建立socket(socket)
- 父进程接受连接(accept)
- 父进程fork子进程(fork)
- 子进程处理连接的读写请求(子进程read、work、write)
- 子进程关闭连接(close)
placeholder - diagram
PPC模式实现简单,针对服务器的连接数不多的情况。如数据库服务器。互联网兴起后,服务器的并发和访问量呈指数增长,PPC的弊端凸显:
- fork代价高:创建进程的过程,需要分配很多内核资源,需要将内存映像从父进程复制到子进程,代价颇高。
- 父、子进程通信复杂:父进程fork子进程时,文件描述符通过内存映像复制从父到子进程,而fork完成后,则需要采用IPC (Interprocess communication)的通信方案,如子进程需要再close之前告诉父进程已经处理了多少个请求以支撑父进程进行全局统计
- 进程数量增大后给OS带来压力:如果每个链接存活时间较长,新连接又不断进入,进程数增多,系统进程调度和切换的频率会越来越高。一般情况,PPC能处理的并发连接数量在百这个量级。
prefork
Reference
1 从零开始学架构-照着做,你也能成为架构师,李运华著,电子工业出版社
2 excalidraw·
网友评论