微服务之间如何处理同步事件

2022-01-15 15:06:49 +08:00
 ghostheaven
比如多个服务关注了某个资源的删除事件,在删除资源前会触发这个事件,如果任何一个服务拒绝删除,则删除失败。如果没有服务拒绝删除,则进行删除。资源删除的过程中,其他服务应该锁定自己相关业务的表(通过事务),直到删除完成或失败。



有什么微服务的协议或框架能够可靠地实现这种需求?
1955 次点击
所在节点    问与答
12 条回复
wd
2022-01-15 15:29:47 +08:00
2 阶段提交... 你这是要自己实现事务...
ghostheaven
2022-01-15 15:37:14 +08:00
@wd 担心自己造轮子有风险。有什么中间件、协议或者框架,可以可靠地实现这个 2 阶段提交的基本功能?包括解决超时、重试之类的问题。
ghostheaven
2022-01-15 15:40:16 +08:00
@wd 原来单体应用共用一个数据库的话都很简单的,开一个大的 transaction ,其他模块可以直接 throw ,然后可以可靠的回滚。现在单体越来越大了,想要拆分,感觉这种同步事件就很不好处理了。
binux
2022-01-15 18:02:47 +08:00
服务之间耦合那么重搞什么微服务。。
XCFOX
2022-01-15 18:15:38 +08:00
关键词:分布式事务
常用实现:AT 、TCC 、SAGA

https://seata.io/zh-cn/blog/tcc-mode-design-principle.html
winglight2016
2022-01-15 20:38:19 +08:00
lz 的需求是个共识系统,或者是工作流?
ghostheaven
2022-01-15 21:20:51 +08:00
@binux 如果有这种需求是建议把这几个服务搞成一个单体是么?
ghostheaven
2022-01-15 21:21:56 +08:00
@XCFOX 收藏了。
ghostheaven
2022-01-15 21:33:56 +08:00
@XCFOX 有没有支持多语言的库,比如 PHP 和 node.js
XCFOX
2022-01-15 22:14:48 +08:00
如果要支持 node.js 和 php 的话只有 dtm 了
https://github.com/dtm-labs/dtm
cover
2022-01-16 09:40:31 +08:00
不能做成子系统失败补偿,主系统等所有子系统删除完成后删除,这种解耦合的设计吗。为什么需要全局一致
ghostheaven
2022-01-18 08:20:04 +08:00
@cover 也可以,不过没有两阶段提交可靠,补偿的话毕竟有一瞬间是成功了的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/828437

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX