教你点开微信右上角的“+”号
|
我写那篇文章的出发点仅仅是分享那次面试经历带给我的一点思考。 了解到面试者的经历之后,在我本人有限的经历和认知里面,让我觉得很惋惜,发生在他们身上的事情本可以不是这样的,仅此而已。 但是,同样的事情,由于每个人的经历和认知不同,就能发掘出截然不同的观察角度。 而这些截然不同的观察角度得出的结论,就很容易产生激烈的碰撞。 在这场碰撞里面,没有人绝对的错了,也没有人绝对的正确。
所以,马斯克,这个观察问题的角度是星辰大海的男人,说的这句话,我觉得的很有用: 冻结、预占库存就是2PC的准备阶段,真正下单成功去扣减库存就是2PC的提交阶段,回滚就是某个发生异常的回滚操作,只不过在应用层面来实现了2PC的机制而已。 SAGA Saga源于1987 年普林斯顿大学的 Hecto 和 Kenneth 发表的如何处理 long lived transaction(长活事务)论文。 主要思想就是将长事务拆分成多个本地短事务。 如果全部执行成功,就正常完成了,反之,则会按照相反的顺序依次调用补偿。 SAGA模式有两种恢复策略:
由于这个模式在国内基本没看见有谁用的,不在赘述。 消息队列 基于消息队列来实现最终一致性的方案,这个相比前面的我个人认为还稍微靠谱一点,那些都是理论啊,正常生产的实现很少看见应用。 基于消息队列的可能真正在应用的还稍微多一点。 一般来说有两种方式,基于本地消息表和依赖MQ本身的事务消息。
本地消息表的这个方案其实更复杂,实际上我也没看到过真正谁来用。这里我以RocketMQ的事务消息来举例,这个方式相比本地消息表则更完全依赖MQ本身的特性做了解耦,释放了业务开发的复杂工作量。 Forking 工作流非常适合于类似 Github 这种开源项目,任何一个开发者都可以通过fork + pull request 向项目中贡献代码。 总结 文章介绍了四种工作流,分别是集中式工作流,功能分支工作流,Gitflow 工作流,Forking 工作流。 集中式工作流在 SVN 时代比较常见,切到 Git 后不建议再使用这种方式了。 功能分支工作流通常是一个主干 master 分支 + 多个 feature 分支,一般适用于小团队开发。 Gitflow 工作流是在功能分支工作流的基础上进一步演进而来,采用 master + develop 双主分支再加上多个临时功能分支,这是一个非常成熟的代码协作管理的方式,推荐大家使用。 Forking 工作流主要采取 fork + pull request 的模式进行协作,主要用于开源项目。
最后:这四种工作流方式各有特色,开发团队可根据自身的特点去选择,不必严格拘泥于某一种方式,适合自己的才是最优的。大家学会了吗? (编辑:怀化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
