整理了一个订单全流程图,希望各位大佬提提意见

2022-06-07 20:30:38 +08:00
 yibo2018

https://efficacious-beginner-568.notion.site/d3d5c216e3314bc0aa5bb438806f0483

目的是支持百万级订单高并发

3343 次点击
所在节点    程序员
29 条回复
showshowcode
2022-06-07 21:01:05 +08:00
emm 你的库存 啥的呢 价格满减活动 然后才是支付啥的吧 看你什么业务了 有的还有更多返佣啥的 如果只是单纯订单中主要涉及的就是订单的落库 查询 状态流转 比如退款发货啥的
AnroZ
2022-06-07 23:53:07 +08:00
没涉及过订单业务,纯好奇看了下。
1. MQ (肯定是性能大瓶颈),2. 超时判断支付(防止并发冲突误判)
这两点需谨慎设计下
rowe
2022-06-08 00:36:51 +08:00
1.支付前就应该写入订单数据到 db ,俗称落单据,这里要注意进行读写分离并分表
2.不应该使用 redis 做库存校验,这里涉及到锁定库存的问题,电商系统一般分 BC 端,买家在下单的同时,运营人员也会在 B 端对库存进行调整,使用 redis 虽然解决了性能问题但会带来两个新问题:
①如何将 B 端库存实施同步到 redis 并实现强一致
②如何锁库存
实际上你很难做到这两点,而且生产过程中及难排查问题,比较常见的做法是数据库乐观锁加分库分表
3.订单表应该分表
rabbbit
2022-06-08 00:52:29 +08:00
问个问题,订单付款倒计时一般都是怎么做的?
rabbbit
2022-06-08 00:54:08 +08:00
还有,用户发起退货时一般怎么处理流程,单独建退货表吗?
DrX
2022-06-08 08:39:42 +08:00
@rabbbit
非常简单。
1. 创建订单的时候,先设定好“最迟支付时间”,然后返回给客户端,客户端自己计算时差并显示倒计时。
2. 再然后支付的时候验证当前时间是否小于“最迟支付时间”就可以了。
brust
2022-06-08 09:25:53 +08:00
@rabbbit
可以考虑用延迟队列
yibo2018
2022-06-08 09:45:59 +08:00
@showshowcode 库存在第二步,通过 redis 去判断
价格满减在第三步的时候可以判断
返佣之类的就是完全下游业务,在第八步完成
我有点没看懂,你的疑惑点在哪
yibo2018
2022-06-08 09:49:22 +08:00
@AnroZ
1. MQ (肯定是性能大瓶颈)-- 同意
2. 超时判断支付(防止并发冲突误判)
如果点开支付不输入密码直接退出,第四步的延时任务可以判断
如果点开支付等到支付过期再输入密码,一般来说第三方支付的接口会直接返回支付超时,或者也可以再 6.5 步之后的支付回调做判断
yibo2018
2022-06-08 09:57:57 +08:00
@rowe
1. 是的可以在 6 步存入数据库,但我认为可以省去,在真正付款的时候再落库,会有什么问题吗?另外读写分离分表是必须的,这方面我再补充下

2. 这个问题我确实没想过,很提神哈哈,我试着回答下
2.1 redis 端的 increment 应该就可以实现
2.2 锁库存是什么意思?为什么要锁?没明白
2.3 对于大厂的秒杀活动,是用 redis 吗?
2.4 对于大厂的日常商品售卖,我觉得也是用数据库乐观锁 update stock - 1 where stock > 0
yibo2018
2022-06-08 10:00:33 +08:00
@rabbbit 订单付款倒计时一般都是怎么做的?
分俩个层面
1. 前端,在进入支付页的时候将倒计时显示
2. 后端,这里可以做 2 层
2.1 支付接口层级:一般支付宝等支付接口,都有支付超时的参数,可以设置
2.2 自身系统层级:参考我的图,第四步,第 6.5 步,上面的回复有写
yibo2018
2022-06-08 10:01:47 +08:00
@rabbbit 退货先不考虑物流层面,直接改订单状态就行
单独建退货表,如果是 b 端销售的话,有必要?这点我也不了解
xhinliang
2022-06-08 11:11:50 +08:00
支付的时候才落库,你这个好不专业啊,哈哈。
showshowcode
2022-06-08 13:13:08 +08:00
纠正一个点 提单时候就要落库,简单的说支付前就要落库了
yibo2018
2022-06-08 13:35:40 +08:00
@xhinliang 可以说说哪里不专业吗,我考虑了很多情况都不会有影响,反而可以增加并发
yibo2018
2022-06-08 13:36:04 +08:00
@showshowcode 可以说理由吗
loveyu
2022-06-08 14:33:33 +08:00
我比较想看一个 10 并发的订单全流程图,有细节的那种
showshowcode
2022-06-08 14:53:26 +08:00
@yibo2018 举个简单例子 你选品加完购物车点击提交的时候 最多也就是选择个支付方式 根本没到支付那步 ,这个叫提单 会有些商品满减等信息;
支付那一步一般是收银台而且还可以选择支付方式,按照你的描述难道我不支付 我刚才提交的订单就没了?电商不是这么处理吧;
而且订单核心就是落库和查询;所有状态都是 MQ 解耦的 我创建了订单 半个小时一个小时后再支付 这都正常 订单就是订单 不要跟其他的扯啥关系 都是接其它 MQ 触发变化
fkdtz
2022-06-08 15:23:07 +08:00
楼主这套流程是线上在跑的,还是只在设计图纸里的
binge921
2022-06-08 15:29:27 +08:00
http://blog.guopeibin.cn/xx.png
这是我两年前写的 哈哈 大家可以一起看看

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

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

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

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

© 2021 V2EX