文档参考

  • 从Paxos到Zookeeper分布式一致性原理与实践

    背景:集群扩容

  • 纵向扩容:提升服务器的性能 —-> 集中式

  • 横向扩容:提升服务器的数量 —-> 分布式

    集中式

    有中心服务器概念。数据集中存放在单台数据库中,业务系统集中部署在单台服务器上。

优点

  • 运行快
  • 架构简单 —-> 利于维护
  • 部署简单

    缺点

  • 昂贵

  • 单点故障,所有服务终止
  • 摩尔定律 :硬件和软件需求,增长不是线性的(集群扩容难度)

    分布式

    一个硬件或软件组件分布在不同的网络计算机上,彼此仅仅依靠网络消息进行通信和协调的系统

特点

  • 分布性:很多台服务器可以在空间中任意分布(分布未来可以动态变换、扩容)
  • 对等性:集群中很多节点的角色是一样的
  • 并发性:很多节点同时操作一个数据库
  • 无全局时钟
  • 随机故障

    相比集中式

  • 分布式性价比更高

  • 处理能力更强(内存、CPU、磁盘空间)
  • 可靠性更好(数据角度备份、计算程序(重试机制))

    存在的问题

  • 通信问题:网络不可用、网络有延迟、数据传输可能会丢失

  • 节点故障:数据丢失、需要考虑容错性

    分布式性能衡量指标

  • 吞吐性:在一定的时间内可以处理的数据量

    • 并发量最大处理数据量
    • 系统响应延时
  • 可用性:系统出现异常时,能够正确提供服务了能力
  • 可扩展性:集群扩展好后,是否易于扩展
    • 扩展要考虑HDFS的负载均衡,计算程序 / 数据怎么分布到新的节点
  • 一致性:副本机制引发的一致性问题(副本操作的时间差/时间延迟)
    • 强一致性:写操作完成后立即能读到最新的数据 —>实现:paxos算法,ZAB协议,鸽巢原理,独有机制
    • 弱一致性:不承诺写操作完成后立即能读到最新的数据,不保证多长时间后能读到 —>最没用
    • 最终一致性:不考虑中间状态,在规定时间内一定能够读取到最终的数据
    • 一致性有什么用:可用性,不影响业务进行

      分布式事务

      事务

      事务是“一系列对数据的读写操作”,事务具有ACID的特性(原子性、一致性、隔离性、持久性)

分布式事务协议:2PC

用来解决分布式事务的原子性问题,将提交事务分为准备阶段和提交阶段

image.png

存在的问题:

  • 数据不一致:可能会有数据不一致(一阶段成功,二阶段某一节点执行失败造成数据不一致)
  • 性能不好:同步阻塞
  • 单点问题:协调者挂了没了

    分布式事务协议:3PC

    2PC的改进版,

image.png

改进

  • 引入超时机制。(超时提交策略,当第三阶段参与者等待协调者超时后会提交事务,解决参与者同步阻塞问题,同时能在发生单点故障时,继续达成一致)
  • 在准备阶段前增加了询问阶段,解决锁定资源不释放的问题,减少了同步阻塞的发生范围

    存在的问题

  • 只有一个协调者

  • 数据不一致:网络延迟,导致协调者发送的响应没有及时被参与者接收到,那么参与者在等待超时之后执行了commit操作,和其他接到命令并执行回滚的参与者之间产生了数据不一致的情况