《从零开始学架构》四:高性能服务器

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41594698/article/details/102697854

高性能服务器架构设计主要集中在两方面:

  • 尽量提升单服务器的性能,将单服务器的性能发挥到极致。
  • 如果单服务器无法支撑性能,设计服务器集群方案。

除了以上两点,最终系统能否实现高性能,还和具体的实现及编码相关。
但架构设计是高性能的基础,如果架构设计没有做到高性能,则后面的具体实现和编码能提升的空间是有限的。
架构设计决定了系统性能的上限,实现细节决定了系统性能的下限

1 单服务器高性能模式

关键:并发模型

并发模型有如下两个关键设计点:

  • 服务器如何管理连接。
  • 服务器如何处理请求。

以上两个设计点最终都和操作系统的 I/O 模型及进程模型相关。

  • I/O 模型:阻塞、非阻塞、同步、异步。
  • 进程模型:单进程、多进程、多线程。

2 PPC(Process Per Connection)

每次有新的连接就新建一个进程去专门处理这个连接的请求
在这里插入图片描述
使用了prefork,即提前创建进程
系统在启动的时候就预先创建好进程,然后才开始接受用户的请求,当有新的连接进来的时候,就可以省去 fork 进程的操作,让用户访问更快、体验更好。

3 TPC(Thread Per Connection)

每次有新的连接就新建一个线程去专门处理这个连接的请求。
在这里插入图片描述
解决或者弱化了 PPC fork 代价高的问题和父子进程通信复杂的问题。

使用了prethread,预先创建线程,然后才开始接受用户的请求,当有新的连接进来的时候,就可以省去创建线程的操作

4 PPC和TPC的选择

不同并发模式的选择要考察三个指标,分别是响应时间(RT),并发数(Concurrency),吞吐量(TPS)。三者关系,吞吐量=并发数/平均响应时间。不同类型的系统,对这三个指标的要求不一样。
三高系统,比如秒杀、即时通信,不能使用。
三低系统,比如ToB系统,运营类、管理类系统,一般可以使用。
高吞吐系统,如果是内存计算为主的,一般可以使用,如果是网络IO为主的,一般不能使用。

5 Reactor

方案:I/O 多路复用结合线程池

结合不同的业务场景,Reactor 模式的具体实现方案灵活多变,主要体现在:

Reactor 的数量可以变化:可以是一个 Reactor,也可以是多个 Reactor。

资源池的数量可以变化:以进程为例,可以是单个进程,也可以是多个进程(线程类似)。

单 Reactor 单进程:Redis
在这里插入图片描述
单 Reactor 多线程:
在这里插入图片描述
多 Reactor 多进程 / 线程:Nginx为多 Reactor 多进程,Netty为多Reactor 多线程,下图以进程为例
在这里插入图片描述

6 Proactor

I/O 操作改为异步,来了事件,操作系统内核就会进行处理,处理完了再去通知应用;
同步则是来了事件,操作系统内核通知应用,应用进行处理,这个处理过程会阻塞,这个阻塞就是比异步慢的原因
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41594698/article/details/102697854