微服务事务入门

理论

  • CAP 定律,最终一致性
  • Base 理论
  • 基于XA协议的两阶段提交
  • FLP(FLP Impossibility Result 不可能性) :在异步通信场景,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性!
  • 共识算法
  • 事务传播机制
  • 事务隔离性

解决方案

  • XA重量级
  • 基于可靠消息的最终一致性方案
  • TCC
  • Saga

注意事项

基本上,每个人刚开始建立一个分布式系统时,都做了以下 8 条假定。随着时间的推移,每一条都会被证明是错误的,也都会导致严重的问题,以及痛苦的学习体验。

  1. 网络是稳定的。
  2. 网络传输的延迟是零。
  3. 网络的带宽是无穷大。
  4. 网络是安全的。
  5. 网络的拓扑不会改变。
  6. 只有一个系统管理员。
  7. 传输数据的成本为零。
  8. 整个网络是同构的。

相关技术

接口幂等性

参考实现方案:

  • 前置条件:数据变更操作都有唯一业务流水号
  1. 判断redis中是否有业务流水号
  2. 如果有则拒绝,请求结束;如果没有,则插入流水号,执行业务
  3. 如数据量过大,可考虑定期清理过期数据
  • 补充:业务流水号也可以设计成有序的,便于在大数据中使用二分查找、跳查表

分布式系统时钟

分布式系统中如何设置系统时钟,以及进程间的通讯机制,在没有任何共享时钟的情况下,如何确定一个事件发生在另一个事件之前

  • Lamport 时钟:居然还和相对论有关;阻塞算法
  • Vector 时钟

实现最终一致性有三种模式

  • 可靠事件模式
  • 业务补偿模式
  • TCC模式

执行顺序

如果我们先后收到两条事件,(1)账户余额更新为100,(2)账户余额更新为120。
如果事件不是在同一个服务器上发出的,那么服务器之间的时间同步是个难题,更稳妥的做法是使用一个全局递增序列号替换时间戳。

框架

框架对比

框架总结

从开发团队背景上看seata胜出,但是seata需要使用dubbo,并且现在处于开发完善阶段(频繁的修复bug提交记录),不建议用于生产环境。

参考资料

发布了182 篇原创文章 · 获赞 42 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/wyyl1/article/details/89344369