• 分布式系统事务 浅析


         谈谈本人结合实际,对分布式系统事务的应用与理解。
         我们在架构系统时,通常会做N层,分层的意义在于系统结构更清晰,易于维护,易于扩展等。我将拿四层结构举例,谈谈对分布式系统事务的实际应用。
         首先,系统四层做如下定义:模型层,数据层,业务层,服务层.
         然后,阐述四层的意义:
                   模型层:作为ORM的Object,不作详细说明
                   数据层:访问具体DB,实现SQL执行
                   业务层:实现简单,独立业务
                   服务层:实现大粒度业务,需要各业务层协作完成的业务逻辑
        实例说明,完成一个用户注册场景:
                假设,用户登录与用户基本信息存储不同的DB,DB处于不同服务器。
                完成这个逻辑,1写入数据至用户登录表,2写入数据至基本信息表;而这两个动作是完整,需保持一致性。
                
                没有采用分布式系统事务 伪代码如下:
                object bllobject1=new userbll();                       //创建一个BLL对象
                bllobject1.adduserpassport(userpassport u); //保存用户登录信息
                object bllobject2=new userbll();                       //创建一个BLL对象
                bllobject2.adduserinfo(userinfo u);                 //保存用户基本信息
                 
               采用分布式系统事务 伪代码如下:
               Using  (CommittableTransaction tran=new CommittableTransaction())
                     {
                                    object bllobject1=new userbll();                       //创建一个BLL对象
                                    bllobject1.adduserpassport(userpassport u); //保存用户登录信息
                                    object bllobject2=new userbll();                       //创建一个BLL对象
                                    bllobject2.adduserinfo(userinfo u);                 //保存用户基本信息
                           try
                             { …
                                      tran.Commit();//事务提交
                             }
                           catch
                             {…
                                    tran.Rollback();//事务回退
                             }
                     }

                调用服务层分布式系统事务 伪代码如下:
                   class userservice {
                         void register(object user)  //注册信息类,继承userpassport , userinfo 
                                {
                                    Using  (CommittableTransaction tran=new CommittableTransaction())
                                    {
                                        object bllobject1=new userbll();                       //创建一个BLL对象
                                        bllobject1.adduserpassport(userpassport u); //保存用户登录信息
                                        object bllobject2=new userbll();                       //创建一个BLL对象
                                        bllobject2.adduserinfo(userinfo u);                 //保存用户基本信息
                                   try
                                        { …
                                              tran.Commit();//事务提交
                                        }
                                  catch
                                       {…
                                          tran.Rollback();//事务回退
                                       }
                                  }  
                            }
                   }
               
                   调用服务层  new  userservice ().register(object user) 
       
        为实现分布式事务的一致性,还需要分DB或不同的DB驱动 做不同的配置
        MSSQL 配置MSDTC(后续跟进)
        XA可针对不同的DB(后续跟进)

           总结,很多时候,程序员喜欢写存储过程,将事务放在存储过程处理;具体情况具体处理,个人认为,不利于系统的维护,增加了数据间的偶合;对后期分库分表,优化DB带来大量的维护工作。

    .NET+MSDTC分布式事务   

  • 相关阅读:
    深入学习webpack(四)
    深入学习webpack(三)
    深入学习webpack(二)
    深入学习webpack(一)
    (转载)路径中 斜杠/和反斜杠 的区别
    jquery中beforeSend和complete的使用 --- 提高用户体验&&设置请求头
    好的用户界面-界面设计的一些技巧
    使用vue Devtools
    vue脚手架 && 实例
    表单(中)-EasyUI Combogrid 组合网格、EasyUI Numberbox 数字框、EasyUI Datebox 日期框、EasyUI Datetimebox 日期时间框、EasyUI Calendar 日历
  • 原文地址:https://www.cnblogs.com/bobsoft/p/3731886.html
Copyright © 2020-2023  润新知