《Saga分布式事务解决⽅方案与实践》演讲者/姜宁关于我•华为开源能⼒力力中⼼心•ServiceComb项⽬目负责⼈人•ApacheMember,IPMC,多个Apache项⽬目•RedHat,IONA,Travelsky议题•微服务事务⼀一致性问题?•业界Saga的解决⽅方案•ServiceCombSaga的演进•后续的开发计划微服务架构•微服务架构将⼀一个应⽤用分成多个相互独⽴立的服务。•好处是各个服务能够持续独⽴立的开发和部署。•难题是服务的数据需要采⽤用什什么样的⽅方式来进⾏行行存储?多个微服务使⽤用同⼀一数据库ABCcommitrollback⼀一个典型的微服务架构应⽤用EdgeServiceCustomerServiceOrderServiceInventoryServiceFrontUIMobileDeviceBrowserHTMLRESTRESTCustomerDatabaseOrderDatabaseInventoryDatabasehttp://blog.christianposta.com/microservices/the-hardest-part-about-microservices-data/http://microservices.io/patterns/data/database-per-service.html两阶段提交2PCTransactionManagerRM1RM2prepare()OKprepare()OKcommit()OKcommit()OK•提供强⼀一致保障•准备阶段完成资源操作•如果准备过程中出现问题,可以回滚•提交阶段不不允许出错•资源层⾯面提供保障业务侵⼊入性低•协议成本⾼高,并且存在全局锁的问题ACID与BASE•ACID•原⼦子性(Atomicity)•⼀一致性(Consistency)•隔离性(Isolation)•持久性(Durability)•BASE•基本可⽤用(BasicallyAvailable)•柔性状态(Softstate)•最终⼀一致性(EventuallyConsistent)(刚性事务)(柔性事务)https://queue.acm.org/detail.cfm?id=1394128TCC•Try:尝试执⾏行行业务•完成所有业务检查,预留留必须的业务资源•Confirm:确认执⾏行行业务•真正执⾏行行业务,不不做业务检查•Cancel:取消执⾏行行业务•释放Try阶段预留留的业务资源业务服务tryconfirmcancel通过领域建模来解决•微服务内:聚合通过数据库事务保证强⼀一致•内刚•微服务间:最终⼀一致•外柔微服务事务⼀一致性建议•1987年年Hector&Kenneth发表论⽂文Sagas•Saga=LongLiveTransaction(LLT)•LLT=T1+T2+T3+...+Tn•每个本地事务Tx有对应的补偿CxT1T2T3C3C2C1https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdfT1T2T3...TnC1C2C3...CnT1T2T3...Tn正常情况异常情况Saga简介业界Saga的研究应⽤用情况CaitieMcCaffreyhttps://github.com/aphyr/dist-sagas/blob/master/sagas.pdfDistributedSagasChrisRichardson...