学习RocketMQ相关一

1、数据库和服务的  分片、分区、水平拆分、垂直拆分

2、ACID (atomicity,Consistency,Isolation,Durability)

3、数据库一致性:强一致性、弱一致性、最终一致性

4、CAP理论

    C:Consistency;   A:Availibity ;   P : Partition tolerance  三者不可同时满足

5、Base理论

     Basically  Availiable

     Soft State

     Eventually Constitant

6、分布式事务解决方案

    1)2PC\3PC

       2PC: two phase commit

        2PC流程图

       

       分布式系统所有的通信均存在三种状态:成功、失败、超时

       3PC流程图

       

        2PC几乎是所有分布式事务算法的基础。

        优点:已经有较为成熟的解决方案,比如:XA

        缺点:XA 是一个阻塞协议。服务在投票后需要等待协调器的决定,此时服务会阻塞并锁定资源。由于阻塞机制和最差时间复杂度高,所以难用于高并发及子事务生命周期较长(long-run transactions)的分布式系统

       2)SAGA算法

             saga理论基础在于假设所有时间按照顺序执行,总能达到系统的最终一致性,因此saga需要服务分别定义提交接口以及补偿接口,当某个事务失败时,调用其他的分支的补偿接口来进行回滚,saga的具体实现分为两种:Choreography和Orchestration

       1'  Choreography,如下图所示:

        

        2'  Orchestration ,存在中心节点模式,如下图:

        

         3)TCC (try-Confirm-Cancel)

         TCC 是一种补偿性事务,只要分为Try:检查、保留资源,Confirm:执行事务,Cancel:释放资源,流程图如下:

         

        4)事务消息

            1'传统事务消息

             依赖于AMOP协议来确保消息发送成功

            2' RocketMQ 事务消息

             流程图如下:

         

              1>事务发起方发送prepare消息到MQ

              2>在发送prepare成功后执行本地消息

              3>根据本地事务的执行结果返回commit或者是rollback

              4>如果是rollback,MQ将删除prepare消息不进行下发。如果是commit,MQ将会把这个消息发送给customer客户端

              5>如果执行本地事务的过程中,执行端挂掉或者超时,MQ将会不停的询问其同组的其他producer来获取状态

              6>Customer端的消费机制有MQ保证

             具体实现上rocketMQ使用了Half Topic 和Operation Topic 两个内部队列来存储书屋消息推进状态

                 

                       half Topic中存放的事prepare消息,而Operation Topic 中存放的是prepare消息对应的commit/rollback消息 ----

                       

猜你喜欢

转载自blog.csdn.net/rainbow236/article/details/81540284