阅读atomikos文档

This commit is contained in:
asahi
2024-04-13 18:55:52 +08:00
parent 1772fde535
commit ba440e4a32

View File

@@ -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可以尝试其他对失败调用的补偿方式在同一全局事务内尝试