分布式系统下的数据一致性可以分为两大类:
- 事务一致性:当多个节点进行操作时,所有节点最终达成的状态都是一致的 。这需要通过协调来保证操作的正确性 , 避免出现数据不一致的情况;
- 副本一致性:数据的多个副本之间保持一致性,这需要保证在对数据进行修改时,所有副本都能够及时更新,避免数据出现不同步的情况;
- 事务一致性:电商平台使用优惠券下单场景:
文章插图
图片
- 下单成功,优惠券必须处于“已锁定”状态;
- 支付成功,优惠券必须处于“已使用”状态;
- 订单取消,优惠券需要恢复为“待使用”状态;
- 优惠券和订单间就属于“事务一致”,两者间存在强关联关系 。
- 副本一致性:
- MySQL 主从复制:是指在主数据库上进行数据操作后,将这些操作同步到一个或多个从数据库上 。从库必须与主库保持同步,以便从库中的数据和主库中的数据保持一致;
- redis 与 MySQL 一致性:在将 Redis 作为存储使用时,可以将 MySQL 看做主节点,Redis 看做从节点,当 MySQL 数据发生变更时,自动同步到 Redis 中,并保持数据的一致性;
文章插图
image
1. 脱离数据库事务的怀抱在关系型数据库中,事务(Transaction)是指一组数据库操作,这些操作要么全部成功要么全部失败 。事务可以保证某些数据操作的一致性,当某一条操作失败时,会进行回滚,即撤销已执行的操作,使数据恢复到操作前的状态 。
提到事务一致性,不得不说数据库事务 ACID:ACID是指数据库事务的四个关键特性,分别为原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability):
- 原子性(Atomicity):事务应该被视为一个原子操作,即事务中的所有操作要么全部执行成功,要么全部失败回滚 。如果事务执行过程中出现错误 , 所有修改操作将被回滚撤销,不会对数据造成损坏;
- 一致性(Consistency):事务执行前后 , 数据应该保持一致状态 。所有数据修改操作都必须确保数据库的约束条件、触发器等规则不会被破坏 , 保持数据完整性;
- 隔离性(Isolation):多个事务同时对同一数据进行操作时 , 事务之间应该相互隔离,互不干扰 。数据库系统应该确保在并发情况下,事务的执行结果和串行执行的结果一致;
- 持久性(Durability):事务完成后,其对数据库所作的所有修改都应该被永久保存,即使系统崩溃或重启后,修改的数据也应该是可用的;
- 原子性:转账过程总共涉及两个操作:从A账户中减去1000元,向B账户中加上1000元 。如果这两个操作中的任何一个失败 , 整个事务都将失败回滚;
- 一致性:转账前后所有账户的余额总和应该是不变的 , 不会出现余额不足或超额的情况;
- 隔离性:如果同时发起两个转账事务,应该确保每个事务只访问自己的数据,不会互相干扰;
- 持久性:一旦转账完成,更改数据的事务就必须写入磁盘,保证即使系统崩溃或重启后 , 这些数据仍然是可用的;
推荐阅读
- 当44岁的胡杏儿和张雨绮娜然同框,才彻底明白,港女的保养真绝
- 疯马秀“审判”后续:张嘉倪,杨颖或遭软封杀,Lisa彻底凉凉!
- 首位90后女主播登《新闻联播》,看完她的履历后,我彻底服了!
- 谢贤公开与张柏芝关系,遮羞布彻底被揭,谢霆锋得知后连忙澄清
- 安卓怎么彻底删除微信聊天记录 怎么彻底删除微信聊天记录
- 终于处罚了!Lisa被封号,杨颖张嘉倪被禁言,星光之路彻底是凉凉了
- 一个“假向太”,彻底揭开了向家的豪门真相,难怪郭碧婷会退圈!
- Lisa风波迎来大结局,3女星彻底沦为弃子,LV3公子成唯一聪明人
- 家里有老鼠怎么能彻底消灭 老鼠对粘鼠板有记忆吗
- baby彻底凉凉?被曝向黄晓明求救,准备跑路出国抛售5亿豪宅?