阅读atomikos文档
This commit is contained in:
@@ -143,3 +143,14 @@ spring:
|
|||||||
properties:
|
properties:
|
||||||
max-timeout: 900000
|
max-timeout: 900000
|
||||||
```
|
```
|
||||||
|
## atomikos分布式事务对微服务的支持
|
||||||
|
在使用分布式事务时,传统单实例的ACID事务会被分割为多个本地事务,每个微服务都有自己的本地事务。这将会导致如下不一致的情况:
|
||||||
|
1. 如果出现了网络超时的情形,如果微服务1调用微服务2,并且在调用返回时发生超时,那么微服务1服务知晓微服务2的本地事务是提交还是失败回滚,此时全局的系统状态将是未定义的
|
||||||
|
2. 如果微服务1在调用微服务2时,出现了重试,那么微服务2必须提供幂等的实现,该实现很困难并且容易出错
|
||||||
|
3. 在微服务1调用微服务2时,即使调用发生失败,也不能做除了重试外的其他尝试,因为微服务2的本地事务可能已经提交,只是因为网络超时而导致微服务1调用失败。
|
||||||
|
|
||||||
|
> 因为微服务1和微服务2都拥有自己的本地事务,在微服务1调用微服务2超时是,微服务2可能其本地事务已经提交,只是因为网络问题导致微服务1调用失败。此时,微服务1除了重新调用微服务2直到调用成功,并且微服务2保证多次调用幂等外,无法采用其他方式来进行处理
|
||||||
|
|
||||||
|
对此,atomikos提供了一个全局事务,在全局事务内,无序额外进行编码即可保证全局系统状态的一致性。当微服务1调用微服务2失败时,全局事务会保证微服务2的本地事务操作被回滚,此时微服务1可以尝试其他对失败调用的补偿方式(在同一全局事务内尝试)。
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user