左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

46 | 弹力设计篇之“补偿事务”

陈皓 2018-03-08
前面,我们说过,分布式系统有一个比较明显的问题就是,一个业务流程需要组合一组服务。这样的事情在微服务下就更为明显了,因为这需要业务上一致性的保证。也就是说,如果一个步骤失败了,那么要么回滚到以前的服务调用,要么不断重试保证所有的步骤都成功。
这里,如果需要强一致性,那在业务层上就需要使用“两阶段提交”这样的方式。但是好在我们的很多情况下并不需要这么强的一致性,而且强一致性的最佳保证基本都是在底层完成的,或是像之前说的那样 Stateful 的 Sticky Session 那样在一台机器上完成。在我们接触到的大多数业务中,其实只需要最终一致性就够了。

ACID 和 BASE

谈到这里,有必要先说一下 ACID 和 BASE 的差别。传统关系型数据库系统的事务都有 ACID 属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。下面我逐一做下解释:
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(22)

  • 林超
    期待讲解下工作流引擎的实现
    2018-03-15
    1
    19
  • 李达
    陈老师好,有个疑问想请教: 衡量高可用一般用几个9来衡量,例如4个9的高可用是指一年的服务不可用时间不能超过53分钟,我的疑问有两个: 第一,到底怎么样定义服务不可用?例如返回业务的系统忙算不算可用?第二,直观理解,可用性应该是针对单个接口定义的,一个系统有很多接口,那么一个系统的可用性又应该怎么计算呢?
    非常感谢!
    2018-03-09
    5
  • 二康
    期待耗子叔可以讲讲如何设计一个补偿框架,可以讲讲具体地实现过程和相关技术和难点。谢谢
    2018-06-19
    4
  • sam
    期待举例讲解补偿工作流引擎
    2018-07-31
    2
  • jackwoo
    希望可以出个工作流引擎介绍
    2018-06-17
    2
  • mingshun
    一直觉得补偿事务很烦琐,日常实现也是尽量避免。看了这篇后,发现是没有很好地记录起始状态,总是想着通过目标状态来反推,所以总感觉实现起来很烦琐,逻辑错踪复杂。也许是重度精神洁癖导致吧!总觉得对正向目标没意义的数据都没有记录的必要甚至认为是浪费,然而顾着正向目标却忘了反向目标,而两个方向的目标都同等重要。
    2018-05-23
    2
  • 阿拖
    感觉有点像2pc,工作流引擎是cooradinator。
    2018-04-03
    1
    2
  • Tim Zhang
    workflow用过两种 jbpmn的activiti5以及netflix的conductor。
    workflow与task是两个重点
    2019-03-08
    1
  • Geek_fb3db2
    分布式事物感觉很复杂,特别在需要补偿情况下更应该有完善的机制,想问下,补偿是不是需要针对不同业务场景写不同代码。
    2018-11-18
    1
    1
  • 王磊
    我的理解是分布式事务为了提高性能,将要做的若干事情记录下来(属于本地事务),然后再异步去执行这些若干事情(并行或串行),尽量使其成功(重试),如果的确不能成功,则需要回滚。这些若干事情中对于占用资源的事情,需要增加一个占用时间的限制,如果超过此时间但整个事务还没有提交,则释放资源,如如果没有在30分钟内支付,则释放库存。
    2018-06-11
    1
  • 小伟
    亚马逊的工作流是如何实现呢?
    2018-04-02
    1
  • 刘勇
    补偿一词不是很理解,为什么回滚叫补偿?

    作者回复: 回滚是补偿的子集

    2018-03-31
    1
  • 流畅
    想再了解下工作流的实现,希望能讲解下
    2018-03-12
    1
  • 阿凡达
    期待深入讲解文中提到的工作流。
    2018-03-09
    1
  • edisonhuang
    分布式系统中保证事务一致性有两种方式,一种是ACID,另一种是BASE,前者是酸,保证强一致性,后者是碱,保证系统高可用
    2019-07-08
  • 小伟
    请问下,self-stablization的理念是否跟补偿是一致的吗?他们有区别吗?
    2019-05-19
  • 山分子
    最近做的订单业务,分为两步,第一步下单到本地,第二步下单到订单服务,两个数据库都有相同的订单数据,用到的方式感觉跟BASE的理念差不多,第一步直接入库,第二步加入重试和异步通知,订单服务做了幂等。
    订单服务还做了查询接口,如果所有的重试都超时并且没有收到通知,一段时间过后可以调用查询接口去查订单的状态。
    这样基本能达到三个9
    2019-04-16
  • 安静
    分布式事务的一些理论经验,以后工作落地具体的二阶段,Tcc事务等强一致性事务再来看
    2018-12-18
  • 蒙奇D路飞
    理论只是了解 更多的希望 show the code~
    2018-10-02
  • neohope
    皓哥, 您好!我们业务上会面临一种情况,就是跨厂商跨系统保持系统间数据同步,无论是通过代码直接操作多个数据库进行同步,还是通过让厂商提供服务来进行同步,最终要么实现效果很差,要么就同步机制弄的略复杂(比如订阅发布,厂商不配合),让计划没法推进。您这边后续有计划说一下类似情况如何处理吗?

    说到库存的话,我们行业这边还有一种神奇的操作。这种操作的要求是,“你没货我理解,但是你说有货、我要了、你再说没有那就不行”。所以在我们行业,通常把库存分为实库存和用户库存。用户看到的库存永远小于实库存,由于并发量并不大,只需要用简单的事务控制,也能在很大程度上可以避免超卖。但当库存很低的情况下,代码就要用严格的事务控制,来避免超卖了,执行效率就很低,好在这样的情况很少。
    2018-06-21
收起评论
22
返回
顶部