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

前言

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

前置概念

应用 / 系统

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

模块 / 组件

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

分布式

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

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

集群

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

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

主 / 从

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

中间件

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

例如我们的 Redis 、 RabbitMQ

评价指标

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

可用性

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

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

响应时长

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

吞吐 / 并发

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

架构演化

单机架构

将所有的服务部署到一台服务器上的架构就是单机架构

应用数据分离架构

当访问量上来的时候,我们会将数据库剥离出来,单独部署到一个服务器上。

应用服务集群架构

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

读写分离 / 主从分离架构

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

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

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

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

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

分库分表

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

微服务

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

相关推荐
milanyangbo2 小时前
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
分布式·后端·云原生·架构
失散132 小时前
分布式专题——1.1 Redis单机、主从、哨兵、集群部署
java·数据库·redis·分布式·架构
你我约定有三4 小时前
软件启动时加配置文件 vs 不加配置文件
java·分布式·zookeeper
励志成为糕手7 小时前
ZooKeeper架构深度解析:分布式协调服务的核心设计与实现
大数据·分布式·zookeeper·架构·一致性
瑞瑞绮绮8 小时前
分布式事务的Java实践
java·分布式·springcloud
孤独的复仇者9 小时前
RabbitMQ高级:延迟消息
分布式·rabbitmq
AMiner:AI科研助手11 小时前
警惕!你和ChatGPT的对话,可能正在制造分布式妄想
人工智能·分布式·算法·chatgpt·deepseek
码luffyliu14 小时前
消息队列 :Kafka 核心要点总结
分布式·kafka·消息队列·mq
运维老司机19 小时前
Kafka 开启 SASL_PLAINTEXT 双监听器认证(内网/外网)
分布式·kafka·linq
fengfuyao98521 小时前
分布式电源接入电网进行潮流计算
分布式