见有聊点分布式事务,求解一般微服务方案

2020-08-22 16:58:53 +08:00
 jiurenmeng

例: 微服务:商城、商品、订单 备注:都为单独服务和数据

try{ //商品服务 处理商品扣库存 //订单服务 订单生成( error )? return; }catch($e) { // ?怎么处理合适 }

1720 次点击
所在节点    程序员
9 条回复
jiurenmeng
2020-08-22 17:03:24 +08:00
例: 微服务:商城、商品、订单 备注:都为单独服务和数据
\r\n

```
try{
//商品服务 处理商品扣库存
//订单服务 订单生成( error )?
return;
}catch($e) {
// ?怎么处理合适
}
```

\r\n
只有单体应用开发经验,不知道怎么排版
realpg
2020-08-22 17:15:41 +08:00
每个独立的 operation 都有对应的撤销方法
zhgg0
2020-08-22 17:22:32 +08:00
1 、生成订单号
2 、预扣商品库存
3 、订单生成
4 、真的扣库存

订单服务提供反查功能,根据订单号查是否成功

各种状况:
1 和 2 失败没任何影响;
3 那步挂了,库存服务过段时间反查订单是否成功,没成功的话将库存恢复;
4 那步挂了,库存服务过段时间反查订单是否成功,成功的话变成真的扣库存。
xuanbg
2020-08-22 17:22:47 +08:00
要搞微服务,先搞 devops 。git 用起来,jenkins 自动化容器化部署搞出来先。同时 elk 或者 efk 搞起来,不要捞个日志还费死个劲。然后 maven 私服什么的也搞起来。。。

上面这些搞好了,然后把例如用户中心、消息中心这些基础服务拆出来搞起来。

最后,你去搞业务就非常轻松了。如果一上来就拆业务,累死你也搞不好微服务。
love
2020-08-22 17:23:49 +08:00
那撤销方法中间机器死机了呢,数据不一致了
xuanbg
2020-08-22 17:31:47 +08:00
@realpg
@love 基本没人会这么搞,分布式系统大多采用的是最终一致性。也就是说如果出错,不是回滚数据,而是用消息队列进行补偿来保证数据的一致性。当然补偿也不能保证百分百成功,最终还可以通过肉偿(人工处理)来保证一致性。
singerll
2020-08-22 18:04:10 +08:00
看到微服务就想笑,我们公司的微服务几十个 jar 包,挂一个就全挂。真不知道研发脑子里面想的啥。
Leigg
2020-08-22 18:13:00 +08:00
@singerll 那是技术问题
Leigg
2020-08-22 18:15:13 +08:00
最终一致性,善用 mq 和定时任务

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

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

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

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

© 2021 V2EX