今天看了一下公司的微服务调用,他们是这样实现的,从 A 远程调用 B 的接口,然后 B 远程调用 C 的接口...,如果 C 出错回滚会返回错误结果,然后 B 也回滚,最后到 A 那层就返回执行业务失败,感觉是一条链式嵌套的思想,除了在代码上业务不直观,想问一下大家这样会不会有什么问题?有没有什么更好的办法,今天刚看了 TCC 模型,那个可以吗?
1
DeleteZN 2022-06-29 00:04:56 +08:00
这种链式的调用环视有问题的,一般来说就是单点故障,比如链路中的某个服务宕机了,整个链路就不可用了。
对于 TCC 这种 2pc 的方式的话,也会有协调者单点故障的问题。 楼主可以去看看 CAP 理论,一般还是根据业务的具体需求来的。Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性)到底要选择哪两个。 |
2
cheng6563 2022-06-29 09:16:03 +08:00
能重试的话可以用消息表或可靠消息重试。
希望全部回滚的话用 XA 或者 AT 事务 |