MarsTalk | 如何给老婆讲懂两阶段提交

Posted Pair Programming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MarsTalk | 如何给老婆讲懂两阶段提交相关的知识,希望对你有一定的参考价值。

言:

欢迎大家欣赏Mars的第一篇文章,讲讲数据库里面的一个概念:两阶段提交。




周末天气很好,我们打算去公园烧烤,需要提前购买:

1. 食物

2. 烧烤架

3. 煤炭

(Min:这就是直男的文章开头,单刀直入,没有任何起承转合...)


方案一

食物需要去超市购买,而且不能退货;

烧烤架需要去户外商品店购买,支持七天无理由退货;

煤炭需要去附件的小店购买,支持七天无理由退货。


食物、烧烤架、煤炭都有可能缺货,而我们需要全部买齐才能去公园烧烤,否则只能宅在家里。

(Min:你就不知道去别地儿吗!)


这是一个不需要使用两阶段提交的场景,一个正确的购买流程如下: 



方案二

本来方案已经设计的挺好了,但是老婆突然说想吃烤秋刀鱼,而秋刀鱼只能去海鲜市场购买,而不支持退货。原先的方案就行不通了,因为不管先去超市买食物还是先去海鲜市场买秋刀鱼,买了其中一个万一另外一个没有了,就没办法退货了。

(Min: 此处为什么黑老婆,老婆就有这么麻烦吗,老婆不服。)


没关系我们还有两阶段提交算法,流程如下: 


MarsTalk | 如何给老婆讲懂两阶段提交


在购买食物和秋刀鱼之前,需要两个人同时去超市和海鲜市场确认有没有(prepare阶段)。如果其中一个没有或者两个都没有,就放弃购买;只有在两边同时有的情况下,才一起购买(commit阶段)。这样才能保证要么都不买,要么都购买。


方案三

由于本人比较懒,不想跑这么多地方,而且万一去超时购买食物失败,还需要再回去退煤炭和退烧烤架,有没有一种办法能一下子买齐(或者如果其中一个缺货,直接告诉我凑不齐)?


答案显而易见就是淘宝,流程如下: 



根本的原因是淘宝的确认购买操作具有原子性:

  • 如果购物车里面某个商品缺货,会导致确认购买失败

  • 只有当购物车里面的商品都有货的时候,才会确认购买成功

  • 一旦确认购买成功,你肯定能买到所有购物车里面的商品


下面的可以不看

对应到技术领域,

  • 方案一:业务逻辑自己实现原子性,一旦某个操作失败,需要写代码回滚之前成功的操作

  • 方案二:业务逻辑使用两阶段提交算法保证原子性

  • 方案三:使用支持事务的数据库




有人看懂了吗!


数据库作为一个已经存在了hin久hin久的数据保存方式,已经积累了许许多多的智慧在里面,有很多巧妙优雅的问题解决方式,其实很值得借鉴到生活中哦~


期待Mars带我们领略更多数据库有趣,精妙的一面~


顺便硬广一下Mars所在公司的数据库产品(他说不帮他发广告就不给我供稿了):

TiDB 是 PingCAP 公司设计的开源分布式 HTAP数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 mysql,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP和 OLAP场景提供一站式的解决方案。

HTAP (Hybrid Transactional and Analytical Processing) 

OLTP (Online Transactional Processing) 

OLAP (Online Analytical Processing) 

公众号:PingCAP

周中愉快!


以上是关于MarsTalk | 如何给老婆讲懂两阶段提交的主要内容,如果未能解决你的问题,请参考以下文章

分布式基础,啥是两阶段提交?

分布式基础,啥是两阶段提交?

Java新人常问:什么是依赖倒置原则?万字案例给你讲懂!

终于讲懂了(ZT)

如何给老婆解释什么是RPC

什么叫工业4.0,这篇接地气的文章终于讲懂了