🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Saga 微服务 实现 微服务调用,需要Saga—Server实现回滚任务的编排和执行,BeetlSQL提供了Saga—Server,一个可以水平扩展的Saga-Server ![saga-microservice](images/saga-microservice.png) 当客户端调用start(gid)的时候,Saga会通过Kafka发送gid到Saga-Server,标志一个事务的开始。但用户commit的时候,会发送回滚任务到Saga-Server以备用。 Saga-Server收到所有commit后,则认为业务执行成功,默认不做任何操作 Saga-Server收到rollback后,并不立即通知每个客户端回滚,它必须等待最外层的发送rollback(如上图的client1),才开始执行真正的回滚通知,并把关于此gid的每个回滚任务发送回各个系统执行 有些细节是必须关注的 * client和saga-server必须时钟同步,才能让Saga-Server判断哪个客户端才是事务最外层的客户端 * 交互方式采用了Kafka,并使用gid作为消息key,使得每个能水平扩展的Saga-Server能处理同样gid的业务,避免了Saga-Server自身并发潜在问题。但Saga难以调试这个毛病BeetlSQL也难以解决,因为微服务+消息这种架构模式,难调试是通病