02-1 分布式一致性问题的产生与解决

一、背景:

  • 随着业务的发展单节点服务器无法满足人们的需求,服务节点开始池化,将任务有序合理的进行分配和管理,就需要进行服务拆分。
    服务拆分分为水平拆分和垂直拆分。
服务水平拆分:
  • 单节点不能满足性能需求可以采用为多节点,多个节点共同处理同一个请求。(可以理解成服务集群)
服务垂直拆分:
  • 按照服务功能进行拆分,将一根复杂的功能拆分为多个单一简单的功能。(可以理解为模块化)
拆分后的系统最大的问题就是一致性:
  • 模块之间保证数据,信息,状态的一致性工作

二、一致性相关理论(酸碱平衡)

2.1、ACID

2.1.1、ACID理论
  • 关系型数据库天生具有处理复杂事物场景问题
A:Actomicity 原子性
  • 是一个独立的操作单元,是一种要么全部是,要么全部不是的原子单位性的操作(理解为原子不可再分割)
C:Consistency 一致性
  • 事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少(理解为同一个事务下所有操作结果一致)
I:Isolation 隔离性
  • 隔离性表示各个事务之间不会互相影响(理解为事务之间相互独立)
D:Durability 持久性
  • 持久性表示一旦一个事务成功了,那么他的改变是永久性的被记录和操作(事务成功后不会被改变)
2.1.2、一致性问题
问题:电商中下单与库存
场景:下单系统和库存操作如何保持一致性。
  • 如果下单成功扣取库存失败导致超卖,如果下单不成功库存扣取成功会导致少卖
解决方案:(利用关系型数据库强一致性特性解决)
数据量比较少的情况:
  • 把订单表和库存表放在同一个关系型数据库,下单和扣库存操作紧密达到一致性
数据量比较多的情况:
  • 把订单表和库存表放在同一个数据库分片,下单和扣库存操作紧密达到一致性
2.1.3、注意:
  • 1、交易系统提高性能可以采用向上扩展(硬件升级),是最简单有效的方式
  • 2、NoSQL不适合做交易场景,主要用于数据分析,ETL,报表,数据挖掘,推荐,日志处理,调用链路跟踪操作

2.2、CAP

2.2.1、分布式CAP理论(帽子理论)
C:Consistency 一致性。
  • 分布式系统中所有数据在同一时刻都是形同
A:Availbility 可用性
  • 在任何模型下服务都会在有限的时间进行处理并相应
P:Partition tolerance 分区容忍性
  • 有部分消息丢失,系统仍然可以继续工作
2.2.2、说明
1、任何分布式系统不能三者兼顾只能同时满足两点
2、关系型数据库具有一致性,联合分布式则需要在一致性和可用性选择

2.3、BASE

2.3.1、BASE模型
  • BASE思想解决了CAP的一致性与可用性不可兼得的问题,通过牺牲强一致性获取可用性
BA:Basically Available 基本可用
S:Solft 软状态,在一段时间内部同步
E:Eventually Consistent 最终一致,数据在最终达成一致性
2.3.2、说明
  • 1、软状态是实现方法,基本可用和最终一致性是目标
  • 2、通过不保证强一致性,在系统处理请求过程中有短暂的不一致,系统的每一步操作都记录状态,出现异常则处理未完成的请求或回退,达到最终的一致性

2.3.3、一致性问题

问题:交易系统转账
场景:(A向B转账)
  • A准备转账,从A中扣除金额,B中增加金额,转账成功(4个阶段)
解决方案:(BASE思想每个步骤添加标记)
数据小的情况:记录每个步骤状态,在异常情况系统通过获取状态继续未完成的任务
数据多的情况:采用写前日志记录每个步骤状态,在异常时系统通过log获取状态继续未完成的任务

2.4、酸碱平衡总结

解决一致性的实践经验
1、向上扩展:硬件升级提高强一致性能力
2、采用水平伸缩和分片继续使用关系型数据库强一致性
3、记录事务的软状态,当异常时自动通过状态修复异常
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值