Go语言-分布式理论2 | 青训营笔记

66 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第12天。

屏幕截图_20230225_172434.png

在网络发生分区的情况下,我们必须在可用性和一致性之间做出选择。近似解决方法:把故障节点的负载转移给备用节点负责,下图演示了故障转移:

屏幕截图_20230225_172647.png

2.ACID理论

数据库事务四个特性ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

3.BASE理论

Base理论是对CAP中一致性和可用性权衡的结果,来源于大型互联网分布式实践的总结,其核心思想是:

  • Basically Available(基本可用):假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言:响应时间上的损失,或功能上的损失
  • Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统存在多个不同节点的数据副本存在数据延时
  • Eventually consistent(最终一致性):系统能够保证在没有其他新的更新操作的情况下,数据最终一定能达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取最新的值

四、分布式事务

1.二阶段提交

Two-phase Commit:为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的算法。

三个假设:

  1. 引入协调者和参与者,互相进行网络通信
  2. 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上
  3. 所有节点不会永久性破坏,即使损坏后仍然可以恢复

屏幕截图_20230225_175059.png

二阶段提交的问题:

  1. 性能问题:两阶段提交需要多次节点间的网络通信,耗时过大,资源需要锁定,徒增资源等待时间。
  2. 协调者单点故障问题:若事务协调者节点宕机,需要新的协调者,否则参与者处于中间状态无法完成事务。
  3. 网络分区带来的数据不一致:一部分参与者收到了Commit消息,另一部分参与者没收到,导致节点间数据不一致。

2.三阶段提交

将两阶段提交中的Prepare阶段,拆分成两部分:CanCommit和PreCommit机制。

解决了两个问题:

  1. 单点故障问题
  2. 阻塞问题

另外引入超时机制,在等待超时后,继续进行事务的提交。

屏幕截图_20230225_175814.png

3.MVCC

MVCC是一种并发控制的方法。提高并发性能,解决脏读问题。

屏幕截图_20230225_175854.png