从单主机到多主机——分布式系统的不断推进

目录

[1. 单机架构](#1. 单机架构)

核心特点

[2. 什么叫分布式系统](#2. 什么叫分布式系统)

核心特点

[2.1 负载均衡](#2.1 负载均衡)

[2.2 数据库分离](#2.2 数据库分离)

[2.2.1 数据库读写分离](#2.2.1 数据库读写分离)

[2.2.2 数据库分库分表](#2.2.2 数据库分库分表)

​编辑


今天我们来聊一聊分布式系统。

1. 单机架构

单机架构 是一种集中式的系统部署架构 ,指整个应用或计算任务的所有组件(包括数据存储、计算逻辑、业务处理等)都运行在一台独立的物理服务器或虚拟机上,所有的资源调用和数据交互都在这台机器内部完成,不依赖其他外部节点。

我们看下面这张图,单机架构的话其实就类似于下面这样,所有用户的请求都是由一台主机来进行接收已经回复的。

核心特点

  1. 资源独占所有硬件资源(CPU、内存、磁盘、显卡等)都为当前任务或应用服务,不会与其他节点共享。比如一台个人电脑上运行的单机版办公软件,就是典型的单机架构。
  2. 架构简单无需设计节点间的通信、协同机制,开发和部署成本低,适合小型应用或简单任务。
  3. 局限性明显
    • 性能上限受单台机器的硬件配置限制,无法通过扩展节点来提升算力;
    • 可靠性差,一旦这台机器故障,整个系统就会瘫痪;
    • 难以处理大规模数据和高并发请求。

因此我们在单机架构的基础上引入了分布式系统,用来解决单机架构的局限性问题。

2. 什么叫分布式系统

分布式系统 是由多个地理上分散、通过网络连接的独立计算节点(服务器、计算机等)组成的系统,这些节点协同工作,对外呈现为一个统一的整体,共同完成单台机器难以承担的复杂任务。

我们看下面这张图片,这就是分布式架构,通过增加主机的数量,来使用户的请求得到快速的回应。

核心特点

  1. 节点自治每个节点都是独立的计算机,拥有自己的 CPU、内存、存储等硬件资源,能自主执行部分计算任务。
  2. 协同工作节点之间通过网络通信交换数据和指令,分工协作完成同一任务,比如把大模型训练任务拆分成多个子任务,分配给不同节点并行处理。
  3. 透明性对用户或上层应用来说,不需要关心任务是由哪个节点执行的,系统对外提供统一的服务接口,就像使用单机系统一样便捷。
  4. 可扩展性强当任务规模增大时,无需更换高性能单机,只需增加节点数量就能提升系统的整体算力和存储能力,这也是它适合大模型训练、大数据处理的核心原因。
  5. 高可靠性单个节点故障不会导致整个系统崩溃,其他节点可以接管故障节点的任务,具备容错能力。

接下来的内容就都是关于当前架构的不断升级,来使它能够适应各种场合。

2.1 负载均衡

负载均衡在这里就是指用户的各种请求能够平均的分配到各个主机,来让程序维持在相对的一种稳定状态。

当然,负载均衡在这里跟多的是一种思想,就跟贪心算法一样,我们可以根据这个思想来设计各种各样的算法来实现这个思想。防止某一台主机承接过多请求,导致响应变慢甚至宕机。

下面这几种是一般来说比较常见的实现负载均衡的算法。

  • 轮询:按顺序依次将请求分配给每个节点,简单公平,适合节点性能相近的场景。
  • 加权轮询:给性能更强的节点设置更高权重,分配更多请求,适配节点配置不均的情况。
  • 最少连接数:优先将请求分配给当前活跃连接数最少的节点,适合请求处理时间差异较大的场景。
  • IP 哈希:根据客户端 IP 计算哈希值,将同一客户端的请求固定分配给某一节点,保证会话一致性。

当然,一般来说我们会把算法设置到负载均衡器里面,通过负载均衡器来实现任务的分配。

类似于下面这张图片这样。用户的任务会先给负载均衡器,然后负载均衡器来把任务交给各个主机。

2.2 数据库分离

数据库的分离就是和上面的负载均衡思想不同的东西。当然它们的目的是一样的,都是为了更好更有效的利用主机资源。

简答来说就是更改数据库里面存储的内容,来实现更加高效的数据调用。因为已经提前知道了每一个数据库里面存放的内容,所以这样查找起来会格外的快。

2.2.1 数据库读写分离

读写分离就是根据用户请求的不同来进行分类,从而实现数据库的分离。

我们来看下面这个图片,读写分离的话就是根据用户请求的操作不同来进行分类。

  • 主库(Master) :专门负责写操作(增、删、改),保证数据的一致性和事务性。
  • 从库(Slave) :专门负责读操作(查询),从主库同步数据,一般可以部署多台。

由于操作的不同,所以在这里会导致数据的不一致问题,所以在这边我们还需要会通过特定的同步机制,来让数据库达到一致。

2.2.2 数据库分库分表

这个的话我们要先了解一个叫做二八定律的东西,在这里这个二八定律是指只有20%的数据会得到频繁访问,而80%的数据则很少被访问。所以我们就根据这个特性来设计主机里面的数据库。把常用的分到多几个库,把不常用的分到少几个库,这样就实现了数据库分库分表,从而提升了回应速度。

就像下面这张图一样。

相关推荐
老华带你飞2 小时前
电影购票|基于java+ vue电影购票系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
老华带你飞2 小时前
宠物管理|基于java+ vue宠物管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·宠物
鸽芷咕3 小时前
告别适配难题:Oracle 迁移 KingbaseES SQL 语法快速兼容方案
数据库·sql·oracle·金仓数据库
VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue智慧医药系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·课程设计
一颗青果8 小时前
HTTP协议详解
linux·网络·网络协议·http
安当加密10 小时前
MySQL 数据库如何加密脱敏?TDE透明加密 + DBG数据库网关 双引擎加固实战
数据库·mysql·adb
IT技术分享社区10 小时前
MySQL统计查询优化:内存临时表的正确打开方式
数据库·mysql·程序员
短剑重铸之日10 小时前
7天读懂MySQL|Day 5:执行引擎与SQL优化
java·数据库·sql·mysql·架构
广州灵眸科技有限公司11 小时前
瑞芯微(EASY EAI)RV1126B CAN使用
linux·网络·单片机·嵌入式硬件