-
-
Notifications
You must be signed in to change notification settings - Fork 911
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
框架防悬挂/幂等/空回滚如何处理的? #144
Comments
你问题中悬挂、空回滚并非业界技术规范定义的专有术语,因此,我尝试就事务管理器可能遇到的几个问题做一下解释,如果没有涉及你的疑问,请进一步说明。 -- 悬挂? ii. 幂等 -- 空回滚? |
( byteTCC并未在B服务收到请求时判断是否有效。原因是此时判断会给绝大部分正常的请求增加处理逻辑而造成性能低下)这里的描述有点不太明白,空回滚这里处理会检索当前生效的事务了,所以正常的请求也会有检索操作吧,这里判断会增加的处理逻辑性能消耗在哪里呢? |
问题描述:A服务向B服务发起业务请求,该请求因网络阻塞等原因超时,此时A服务TM随即发起回滚。在A服务TM将全局事务回滚完毕后,B服务又收到了A先前发出的请求并执行。 上述这个场景存在多少概率呢?实际上,以我的既往经验(本人曾在一款商业应用服务器中间件中实现基于XA/2PC的分布式事务管理器)来看,即使是在并发量较大的情况下,这种场景也只是少量出现。 如果分支事务每次接收到一次携带事务上下文的业务请求,就检查一次该事务是否是活动状态,则会发现,这种请求绝大部分情况返回的结果都是请求事务当前是活动状态。然而,由于分支节点是首次收到请求,要检查就必须去上一级节点或者中心调度器(中心化设计)检索xid,而这种检查是有开销的。为了少量异常事务而添加该检查,会给大部分正常的事务带来不必要的开销,这是不划算的。 因此,byteTCC采用的策略是,既然这种情况是异常场景,那就让它按异常的方式先走下去,后续再考虑将其回撤掉。由于发生概率并不高,因此也不会给业务系统造成太大负担。
|
请问下具体实现在源码里是哪些类呢? |
框架防悬挂/幂等/空回滚如何处理的?
The text was updated successfully, but these errors were encountered: