什么是分布式?
分布式可以先用一句话理解:
把一个原本由一台计算机完成的工作,拆给多台计算机共同完成。
这些计算机通过网络互相通信,对用户来说,通常像一个完整的系统。
一、 从单机开始理解
假设你开发一个网上商城,所有功能都放在一台服务器中:
用户 | v 一台服务器 ├── 用户登录 ├── 商品查询 ├── 创建订单 ├── 支付 └── 保存数据这叫单机系统。
它的优点是结构简单,但问题也很明显:
用户太多时,一台机器处理不过来;
机器一旦损坏,整个商城都可能无法使用;
数据量太大,一台机器存不下;
全国用户都访问同一台机器,部分地区可能很慢。
二、什么是分布式系统
为了处理更多用户,可以增加多台服务器:
┌── 服务器 A 用户 -> 负载均衡器 ├── 服务器 B └── 服务器 C用户请求被分配给不同服务器:
用户甲 -> 服务器 A 用户乙 -> 服务器 B 用户丙 -> 服务器 C这些服务器共同提供商城服务,这就是一种分布式系统。
关键点是:
- 系统由多台计算机组成;
- 计算机之间通过网络通信;
- 多台计算机共同完成任务;
- 对用户来说,整体上像一个系统。
三、一个生活化例子
把系统想象成一家饭店。
单机系统
只有一个工作人员:
点菜 + 做饭 + 上菜 + 收银 = 同一个人顾客少时没有问题。顾客多了,一个人就忙不过来。
分布式系统
工作拆给不同的人:
服务员负责点菜 厨师负责做饭 传菜员负责上菜 收银员负责结账每个人负责一部分,互相配合完成整个流程。
分布式系统也是类似的:
用户服务:负责注册、登录 商品服务:负责商品查询 订单服务:负责创建订单 支付服务:负责付款 物流服务:负责发货不过,微服务不完全等于分布式。微服务通常是构建分布式系统的一种方式。
四、 分布式有两种常见形式
多台机器做相同的工作
例如三台服务器都可以处理商品查询:
┌── 商品服务器 A 商品请求 --->├── 商品服务器 B └── 商品服务器 C这样做主要是为了:
支持更多用户;
分担访问压力;
某台机器坏了,其他机器还能继续工作。
这通常称为集群、负载均衡或服务副本。
多台机器做不同的工作
例如:
用户请求 | v 订单服务器 ---> 库存服务器 | v 支付服务器 ---> 通知服务器每台服务器负责不同功能,组合起来完成一次购物。
这通常称为服务拆分。
真实系统经常同时使用这两种形式。例如订单服务负责订单功能,同时订单服务本身又部署三台机器。
五 、分布式数据库是什么
如果数据太多或者要求更高的可靠性,也可以把数据放在多台机器上。
数据副本
同一份数据保存多份:
数据库 A:用户余额 100 元 数据库 B:用户余额 100 元 数据库 C:用户余额 100 元如果数据库 A 损坏,还可以从 B 或 C 读取数据。
数据分片
不同数据放在不同机器上:
数据库 A:用户 1~100 万 数据库 B:用户 100~200 万 数据库 C:用户 200~300 万这样可以存储和处理更大的数据量。
六、 为什么要使用分布式
提高处理能力
一台服务器每秒只能处理 1,000 个请求,增加服务器后,可以处理更多请求。
但通常不会严格线性增长,因为服务器之间通信和协调也需要成本。
提高可用性
如果只有一台服务器:
服务器故障 -> 整个系统不可用如果有多台服务器:
服务器 A 故障 服务器 B、C 继续工作支持海量数据
数据量超过一台机器的存储或处理能力后,可以拆分到多台机器。
让不同地区访问更快
例如在北京、上海、广州分别部署服务器,用户访问距离较近的节点。
七、 分布式的困难在哪里
分布式不是简单地增加几台机器。机器之间依靠网络通信,而网络并不绝对可靠。
网络可能中断
服务器 A --X-- 服务器 B两台服务器都正常,但无法互相通信。这就是 CAP 里的P:网络分区。
数据可能不一致
北京节点已经修改了数据,但上海节点还没收到更新:
北京节点:库存 0 上海节点:库存 1这就是 CAP 讨论的一致性问题。
请求可能重复
订单服务器发送了扣款请求,但因为网络超时,没有收到结果:
订单服务 -> 支付服务:扣款 100 元 订单服务 <- 支付服务:响应在网络中丢失订单服务不知道扣款是否成功。如果直接重试,可能重复扣款。因此分布式系统经常需要考虑幂等性。
部分机器可能故障
可能出现:
订单服务正常 库存服务正常 支付服务故障系统不是全部成功,也不是全部失败,而是处于“部分完成”的状态。
多台机器时间可能不同
服务器 A 认为当前是10:00:01,服务器 B 可能认为是10:00:03。因此不能总是简单依赖机器时间判断事件顺序。
八、分布式和集群的区别
两者经常一起出现,但侧重点不同:
分布式:把不同工作拆给多台机器。
集群:多台机器通常提供相同或相近的服务,互相替代、分担压力
例如:
商城 ├── 用户服务集群:3 台服务器 ├── 商品服务集群:5 台服务器 ├── 订单服务集群:4 台服务器 └── 支付服务集群:3 台服务器整个商城是一个分布式系统,每一组相同服务又是一个集群
九、 和 CAP 定理连接起来
现在就可以理解为什么分布式系统会有 CAP 问题:
服务器 A:库存 0 服务器 B:库存 1 A 和 B 之间网络中断此时服务器 B 必须决定:
拒绝请求:保证数据一致,但降低可用性,对应 CP
继续返回库存 1:保证可用,但数据可能不一致,对应 AP
所以 CAP 定理本质上研究的是:
分布式系统中的多台机器失去联系后,系统应该怎样处理请求和数据。
最简单的总结是:
单机:一台计算机完成工作 分布式:多台计算机通过网络合作完成工作分布式解决了单机的容量、性能和故障问题,同时也带来了网络、数据一致性、重复请求和故障协调等新问题