这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
1.分布式概述
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
优势
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
挑战
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
使用者视角
- Why
- 数据爆炸,对存储和计算有大规模运用的述求
- 成本低,构建在廉价服务器上
- How
- 分布式框架
- 成熟的分布式系统
- What
- 理清规模,负载,一致性要求等
- 明确稳定性要求,制定技术方案
学习者视角
- Why
- 后端开发必备技能
- 帮助理解后端服务器之间协作的机理
- How
- 掌握分布式理论
- 连接一致性协议
- What
- 把要点深入展开,针对难点搜索互联网资料进行学习
- 将所学知识用于实践
常见的分布式系统
2.系统模型
拜占庭将军问题
方案一:同时发送N个信使。
方案二:设置超时时间,发送后未在一定时间返回,加派信使。
共识和消息传递不同,即便消息传递成功,也不能保证达成共识。
TCP三次握手是在两个方向确认包的序列号,增加了超时重试,是拜占庭将军问题的一个工程解。
当有3m+1个将军,其中m个叛徒时,可以增加m轮协商,最终达成一致。
3.理论基础
4.分布式事务
二阶段提交:为了使基于分布式系统架构下的所有节点再进行事务提交时保持一致性而设计的一种演算法。
三个假设:
- 引入协调者和参与者,互相进行网络通信
- 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上
- 所有节点不会永久性损坏,即便损坏后仍然可以恢复
两阶段提交需注意的问题:
- 性能问题
两阶段提交需要多次节点间的网络通信,耗时过大,资源需要进行锁定,徒增资源等待时间。
- 协调者单点故障问题
如果事务协调者节点宕机,需要另起新的协调者,否则参与者处于中间状态无法完成事务。
3.网络分区带来的数据不一致
一部分参与者收到了Commit消息,另一部分参与者没收到Commit消息,会导致了节点之间数据不一致。