首先应用App启动时候,如果版本信息(应用名 + 版本号)发生变化可以通过Omega通知Alpha。
这样就不不会出现版本执行错误的情况。

对于你举的1.0 升级到 2.0 的情况可能需要通过优雅停机的方式来解决了。
因为App 1.0 可能会有多个实例, Alpha在执行回滚的过程中如果只通过Omega来回调的话很难解决实例突然终止的问题,
我现在想到的办法是让Alpha直接调用App 1.0提供的恢复服务接口。
如果App1.0的服务接口是幂等的且无状态的话,那我们还是能够做到事务的最终一致。




Willem Jiang

Blog: http://willemjiang.blogspot.com (English)
          http://jnn.iteye.com  (Chinese)
Twitter: willemjiang
Weibo: 姜宁willem

On Wed, Mar 14, 2018 at 9:20 AM, Daniel Qian <[email protected]> wrote:

> Thanks a lot, Willem Jiang, 关于Q7我举个例子来说明我的意思:
>
> App version 1.0 里的Saga是这样的:call methodA, call methodB
> App version 2.0 里的代码是这样的:call methodA, call methodC
>
> 把App从1.0 升级到 2.0必定需要将原1.0的App进程停止,然后启动2.0的App进程。
> 在停止1.0的App进程的时候,可能会出现Saga只执行了一半。
>
> 那么启动2.0的App进程之后,会出现以下哪种情况:
>
> 1. 1.0 App的未执行完成的Saga永远保持未完成状态
> 2. 会Saga Alpha会尝试使用2.0App的代码,继续执行未完成Saga
>
> 2018-03-13 22:52 GMT+08:00 Willem Jiang <[email protected]>:
> > 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 <[email protected]>
> 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 <[email protected]>:
> >> > 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 <[email protected]>:
> >> >
> >> >> 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 <[email protected]>:
> >> >>
> >> >> > 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 <[email protected]>:
> >> >> >
> >> >> > > 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
> >>
>
>
>
> --
>
>
>
> Daniel Qian
>

Reply via email to