Hi Dainiel Here are my answer to you question, we will write an english version for it shortly.
1. Saga的执行是同步的还是异步的?发起Saga之后,是等所有Sub-transaction都完成才返回,还是立即返回? 目前Saga事情的执行是同步的,后续我们会提供异步方式的实现。 2. Saga是并行还是顺序执行Sub-transaction的? Saga pack 是根据调用的代码来决定Saga事件,如果Saga子事件是并行方式调用的, 那Saga协调器也是采用并行方式进行处理的。 3. Saga对于do、compenstation的实现有什么要求? 对服务调用要求是要支持幂等的。 4. Saga保证了A、C、I、D中的哪些部分? 按照前面的回复, Saga 支持 ACD。 5. Saga可以嵌套吗? Saga实现支持子事件嵌套的方式。 6. 如何水平扩展Saga Alpha? Saga Alpha在设计过程中状态信息都存储到数据库,是支持水平扩展的。 7. Saga omega 处的代码重构时需要注意什么,以保证不会破坏原Saga/还未执行完毕的Saga? Saga omega只是通过切面编程的方式获取Saga调用事件,并触发对应的处理流程。 我不太明白你说的Saga omega处的代码重构是什么意思?解释一下吗? 8. Saga omega 在执行Saga过程中如果中断,那么重启后Saga还会继续执行吗? Saga协调管理的的服务调用如果支持幂等, 调用过程完成后重启Saga协调器 Alpha之后,是可以支持Saga恢复的。 9. 对于@SagaStart,@Compensable注释的方法,对其方法参数有何要求? 因为omega将记录Compensable标注的方法的调用参数来调用Compensable里面提供的补偿方法, 这些参数需要能够序列化。 目前对于SagaStart没有什么特别的要求, Willem Jiang Blog: http://willemjiang.blogspot.com (English) http://jnn.iteye.com (Chinese) Twitter: willemjiang Weibo: 姜宁willem On Tue, Mar 13, 2018 at 2:33 PM, Daniel Qian <chanjars...@gmail.com> wrote: > Hi Willem Jiang, thanks for your reply. > > I'd like to help listing a FAQ for this project, but for now, I can > only provide Qs not As. Here is my Qs (sorry written in Chinese to > avoid poor english obscure the meaning): > > 1. Saga的执行是同步的还是异步的?发起Saga之后,是等所有Sub-transaction都完成才返回,还是立即返回? > 2. Saga是并行还是顺序执行Sub-transaction的? > 3. Saga对于do、compenstation的实现有什么要求? > 4. Saga保证了A、C、I、D中的哪些部分? > 5. Saga可以嵌套吗? > 6. 如何水平扩展Saga Alpha? > 7. Saga omega 处的代码重构时需要注意什么,以保证不会破坏原Saga/还未执行完毕的Saga? > 8. Saga omega 在执行Saga过程中如果中断,那么重启后Saga还会继续执行吗? > 9. 对于@SagaStart,@Compensable注释的方法,对其方法参数有何要求? > > Hi Zheng Feng, thanks for your reply, too. > > I watched Richardson's presentation > (https://www.infoq.com/presentations/saga-microservices) and he talked > about ACD: > > A:all sub-transaction are executed OR all are compensated > C:local consistency is handled by service. cross-service consistency > is handled by application > D:durability is handled by local database > > These definitions are a little different from which defined in > traditional transactions (https://en.wikipedia.org/wiki/ACID). > > So I think even though "traditional transaction" and "distributed > transaction" are all called "transactions", but they are different > things. > > Unlike traditional transaction ACID are guaranteed by techs such as JTA, > XA. > > In distributed transactions(Saga, TCC, etc) ACD are guaranteed by > service/application code. > > So this ACID is not that ACID (此ACID非彼ACID), this transaction is not > that transaction(此事务非彼事务). > > I think we can clarify that in the doc. > > 2018-03-12 18:05 GMT+08:00 Zheng Feng <zh.f...@gmail.com>: > > Well, that could be an interesting question. I think it depends on how > you > > define what is "all or nothing". For a example of booking which is often > > used in the Saga transaction. > > The request of the user is that "WE HAVE TO BOOKING A FLIGHT PEK-SHA AND > > TWO NIGHTS IN SHANGHAI HOTEL" > > > > 1. Start a Saga transaction > > 2. booking a flight > > 3. booking a hotel > > 4a. ALL bookings are OK ( We get "all") > > 4b. booking a hotel is failed, we have to compensate to cancel the flight > > (We get "nothing") > > 5. End a Saga transaction > > > > So from the user's perspective, they get "all or nothing" and from the > > database it could have something changed ( the status of the flight > booking > > order). And I think this is why the Saga pattern relax the "ISOLATION" > > attribute from the ACID. > > > > I hope it could be helpful for you to understand the Saga transaction. > > > > 2018-03-12 16:47 GMT+08:00 Daniel Qian <chanjars...@gmail.com>: > > > >> Thanks for reply. > >> > >> I'll checkout refs you give. Saga project is really really lack of docs, > >> hope you guys will work on that. > >> > >> And 1 more question. > >> > >> The wiki says Atomicity: > >> > >> > Atomicity requires that each transaction be **"all or nothing"**: if > one > >> part of the transaction fails, then the entire transaction fails, and > the > >> database state is left **unchanged**. > >> > >> I think the Saga's do-compensate pattern is not "all or nothing", > database > >> is not left "unchanged", there is actually something changed(ie. a > canceled > >> order) in database (saga event log database or microservice database). > >> > >> 2018-03-10 10:56 GMT+08:00 Eric Lee <eric.lee....@gmail.com>: > >> > >> > Well, Saga actually provides guarantee of ACD. You can checkout Chris > >> > Richardson's > >> > latest talk of saga[1] for details. In the original saga paper[2], it > >> > mentions that > >> > > >> > > At the outer level full atomicity is not provided. That is, sagas > may > >> > view > >> > > the partial results of other sagas. > >> > > > >> > According to the ACID definition[3], it shows saga does not provide > >> > isolation guarantee instead of atomicity as all sub transactions > within a > >> > global transaction is either done or compensated. > >> > > >> > For each global transaction, it will have both SagaStartedEvent and > >> > SagaEndedEvent while for each sub transaction, it will have > >> TxStartedEvent > >> > and either TxEndedEvent or TxCompensatedEvent. If the global > transaction > >> > succeeds, saga guarantees that all sub transactions will have both > >> > TxStartedEvent and TxEndedEvent. If the global transaction fails, saga > >> > guarantees that all completed sub transactions are compensated and > hence > >> > have all of TxStartedEvent, TxEndedEvent, TxCompensatedEvent. In this > >> way, > >> > we can guarantee the consistency. > >> > > >> > Besides, the implementation of saga coordinator is stateless, all saga > >> > event logs are stored in persistent storage. In this way, we can > >> guarantee > >> > the durability. > >> > > >> > BTW, we have refactored the saga lately. The architecture in the blog > you > >> > saw is outdated. You can checkout its latest implementation from [4]. > If > >> > you have any questions or advice for our new architecture, welcome to > >> point > >> > them out. > >> > > >> > [1] https://www.infoq.com/presentations/saga-microservices > >> > [2] https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf > >> > [3] https://en.wikipedia.org/wiki/ACID > >> > [4] https://github.com/apache/incubator-servicecomb-saga > >> > > >> > > >> > Best Regards! > >> > Eric Lee > >> > > >> > 2018-03-09 15:59 GMT+08:00 Daniel Qian <chanjars...@gmail.com>: > >> > > >> > > Hello guys: > >> > > > >> > > I read the amazing blog "Eventual Data Consistency Solution in > >> > ServiceComb > >> > > - part 2" and I'm kind of confused about these two statements: > >> > > > >> > > > Saga does not provide ACID guarantee, because atomicity and > isolation > >> > are > >> > > not satisfied .... > >> > > > >> > > > With durable saga log, saga guarantees consistency and durability > >> > > > >> > > I guess the first statement is talking about how so called > >> "Transaction" > >> > > behaves in **Saga pattern**. > >> > > > >> > > And the second statement is talking about the implementation of > Saga's > >> > > state store. But that's a little strange to say "Saga provides C > and D > >> > > because it's state store provides C and D". > >> > > > >> > > I think Saga pattern actually does not guarantee either of A, C, I > or > >> D. > >> > Am > >> > > I right? > >> > > > >> > > > >> > > -- > >> > > > >> > > > >> > > > >> > > Daniel Qian > >> > > > >> > > >> > >> > >> > >> -- > >> > >> > >> > >> Daniel Qian > >> > > > > -- > > > > Daniel Qian >