服务端高并发分布式结构演进之路

发布于:2025-05-18 ⋅ 阅读:(18) ⋅ 点赞:(0)

前言

在进行 Redis 学习之前,我们先来了解一下服务端高并发分布式演化的过程。

前置概念

应用 / 系统

应用 / 系统 是 为了实现一整套服务的一个程序或者一组相互配合的程序群

模块 / 组件

当应用较为复杂的时候,我们会将其中具有清晰职责、内聚性强的部分拆分出来,这就是 模块 / 组件

分布式

将上述的不同的模块部署到不同的服务器上,那么这个系统就被我们称为 分布式系统。

例如:我们将数据库剥离出来,放在单独的服务器上,该服务器专门提供数据库服务,然后将 Web 服务器部署到不同的服务器上,这个系统就是分布式系统

集群

我们将数据库剥离出来放在一个服务器上,我们会发现,服务器的读写操作使用频率不同,为了更好地李彤数据库,我们继续拆分,使用多个服务器部署数据库,这一群数据库服务器被我们称为集群

集群的概念就是:被部署到多态服务器上的并且是为了实现特定目标的一个/一组特定的组件,整个整体被称为集群

主 / 从

在集群的例子中,我们发现数据库读写操作的频率不同,一般来说,读操作的频率会大于写操作的频率,因此我们可以将数据库服务器划分为主服务器和从服务器,从服务器负责读操作,主服务器负责增删改操作,从服务器的数据会实时同步主服务器的数据。

中间件

中间件是一类提供不同应用程序用户相互通信的软件,即处于不同的技术、工具和数据库之间的桥梁。
例如我们的 Redis 、 RabbitMQ

评价指标

我们评价一个系统的时候,往往会使用下面的指标的进行评价。

可用性

考察单位时间段内,系统可以正常提供服务的概率 / 期望

例如:年化系统可用性 = 系统正常提供服务时长 / 一年总时长

响应时长

用户完成输入到系统输出给用户反应的时长就是响应时长

吞吐 / 并发

吞吐考察单位时间段内,系统可以成功处理的请求的数量,并发指系统统一时刻支持的请求最高量。

架构演化

单机架构

在这里插入图片描述
将所有的服务部署到一台服务器上的架构就是单机架构

应用数据分离架构

当访问量上来的时候,我们会将数据库剥离出来,单独部署到一个服务器上。
在这里插入图片描述

应用服务集群架构

当访问进一步上升,我们的 Web 服务器无法承担,我们就会引入更多的 Web 服务器,同时加上负载均衡,让每台 Web 服务器都能均衡地接收和处理 请求。

在这里插入图片描述

读写分离 / 主从分离架构

该架构针对的是我们数据库服务器,由于请求量的上升,一台数据库服务器可能无法满足需求,于是引入更多的数据库服务器,那么我们就可以将一台服务器作为主数据库服务器,其他作为从服务器,主服务器负责增删改操作,从服务器负责读操作,这就是读写分离,主从分离架构。

在这里插入图片描述

引入缓存 —— 冷热分离架构

我们知道直接操作数据库本质上就是对硬盘进行 IO 操作,这个效率是极低的,如果要提高效率,我们可以引入类似的读内存的数据库,例如 Redis,直接对内存进行读操作,这样效率就会提高很多,大家可能会疑惑,如果将数据库的数据全部转移到内存中,内存不就直接爆炸了吗?

并不会,因为我们的内存只存储热点数据,热点数据就是用户经常会访问的数据,这一部分热点数据相比于整个数据的数据来说,就是冰山一角,内存是完全有能里存储这些热点数据的。

如果用户访问的数据在内存中找不到,就会将请求发送给数据库服务器,再对硬盘进行 IO 操作。
在这里插入图片描述

分库分表

当数据量大到一个数据库无法存储下来的时候,我们会进行分库分表操作,将数据库进一步划分,把这些库表再单独部署到不同的服务器上:

在这里插入图片描述

微服务

微服务是对业务进行拆分,例如一个业务很大的时候,我们可以将不同的需求的处理部署到不同的集群中,这样有利于程序员的管理,一个团队负责业务的其中一个功能,维护其中一个集群。
在这里插入图片描述