一般分布式事物不能同时满足 高可用性和一致性。如果是强一致性,那可用性,就不一定,实际是在高可用性的前提下,只要满足最终一致性就可以。
分布式事物的几种解决方案
1 2阶段提交 如数据库 mysql好多都支持这个
第一阶段预提交第二阶段 提交。 所有第一阶段提交的事物的 进行投票。都通过都提交。有不通过 就都回滚
这种能保证强一致性。但是在高并发系统里,真的是渣渣,
2 补偿
try的时候吧资源锁住。然后执行业务的事物。业务成功 资源释放。业务失败 回滚 资源石锁锁定
实现简单吧。
不能满足一致性
3.本地消息表
好多个事物配置本地的一个消息表,业务执行成功失败都发送消息,饼消息记录下来。本地进行扫描,确保消息都能成功发送。如果业务确实执行失败,那就发消息,让对方进行回滚。
实现最终一致性
消息代码和核心业务代码耦合。
4.事物流的方式。事物发生有一定的顺序
业务按a-》b->c发生。如果执行成功就都成功。如果执行失败,原路回滚。
只支持特定场景。能保证强一致性。但是在高并发系统也是渣渣。