zoukankan      html  css  js  c++  java
  • 分布式事务(一)分布式事务理论基础 Diamond

    一、参考内容:

    分布式事务入门

    二、微服务、分布式、集群的区别:

    假如现在有个电商系统,会有很多业务模块,用户系统、营销系统、商品系统、购物车系统等。

    微服务:我们采用SOA(面向服务的架构)模型,把这些功能模块拆分出来,做成一个个服务,user-center,promotion-center等,这个就是微服务。

    分布式:这些微服务之间通过良好的接口和协议联系起来。此时就要考虑如何部署这些微服务了,可以部署到一个或多个服务器上。分布式指的是这些服务部署在不同的机器上。

    微服务和分布式的区别:多个微服务可以选择部署在单台机器,也可以在多台机器上,而分布式必须部署在多台机器。

    集群:商城系统可以是一个单体应用/多个业务模块。可以把单体应用或者用户模块的微服务部署到多个服务器上,这样多个服务器提供了相同的服务,这就是所谓的集群。

    三、背景:

    在单体项目中,不需要使用分布式事务,一个系统对应一个数据库,事务在本地数据库的事务就可以了。

    但是微服务环境下,服务之间的调用,数据库是分开的,无法通过本地数据库事务保证了。

    四、分布式环境下,如何保证数据一致性?

    1、背景:

    一个微服务系统,每个服务都有自己的DataBase。

    2、核心业务链路:

    订单服务 --> 库存服务 --> wms服务 --> 积分服务

    假如前面的流程都成功了,最后积分服务出现了异常,前面如何进行回滚。

    五、方案:

    XA、TCC、可靠消息最终一致性方案、最大努力通知方案、Sega、Atomikos等。。。

    六、使用:

    类似上面涉及到支付的链路,要使用TCC来保证强事务。例如将订单服务、积分服务、库存服务绑定到一个TCC事务中,这三个服务要保证强一致性。
    PS:这里只是举例,实际业务场景,积分可能是通过MQ异步处理的。

    wms服务可以使用可靠消息最终一致性方案保证事务。就是通过消息中间件,保证一定会把消息交给下游的仓储服务,仓位服务消费消息然后通知发货。如果失败了,中间件一定要不停重试投递消息,保证一定要成功。

    七、总结:

    强一致方案:主要用于核心模块,例如交易/订单等等。

    最终一致性方案:一般用于边缘模块例如库存,通过mq去通知,保证最终一致性,也可以业务解耦。

    八、分布式事务选型调研:

    ByteTCC,Himly,TCC-Transaction:
    类似TCC事务的开源框架,由个人开发,star在3-6k,会有一些中小型公司生产环境用了类似的分布式事务框架,知名度和普及型不高。

    seata(fescar):
    阿里开源的分布式事务框架,支持TCC、Saga等事务模式,这个框架是经历过阿里生产环境大量的考验的一个框架。支持dubbo、spring cloud两种服务框架,比较推荐seata。

    基于RabbitMQ、Kafka实现可靠消息最终一致性方案。

    RocketMQ:作为MQ中间件,提供了分布式事务支持,但是如果使用,性能影响较大。

    九、生产环境如何使用分布式事务的?

    如果在事务里,有些操作特别的耗时,可以做成异步化。
    同时还要将这个异步化的操作包裹到一个事务中去,此时就可以使用可靠消息最终一致性的方案。

    在事务里,有些操作无关紧要,是否成功都行,而且还比较耗时,例如发送短信,发送邮件,发送一个通知等。
    即使失败了是无关紧要的,可以使用最大努力通知方案

    TCC方案适合于多个服务的操作都比较快,例如:资金转账、创建订单、抽奖机会、积分、流量券相关的服务调用的逻辑。
    包裹在一个分布式事务内,用TCC来控制这个分布式事务,因为这里的一些操作基本都是在流量充值中心内部的一些服务,都比较快。

  • 相关阅读:
    一些面试题(2)
    poj1102 7段数码管
    一些面试题(3)
    poj百练2737大整数除法
    枚举
    poj2244 约瑟夫环
    [Craftor原创]精通ModelSim脚本(1)
    [Craftor原创]带FIFO的UART收发器设计
    继电器的一些基本术语
    Every success is a creation for me
  • 原文地址:https://www.cnblogs.com/huigelaile/p/15780332.html
Copyright © 2011-2022 走看看