订单系统的设计(20/100)
本文主要讲订单系统的设计,包括业务架构,部署架构,表结构,流程设计等。 主要内容参考自网络的技术博文,有整理和删改,建议根据文末的参考文献去看原文。
业务架构
整个订单业务架构分为三个部分: 订单服务,订单逻辑和底层的服务支撑。
(1)订单服务该模块的主要功能是用户日常使用的服务和页面,主要有订单列表、订单详情、在线下单等,还包括为公共业务模块提供的多维度订单数据服务。(2)订单逻辑订单系统的核心,起着至关重要的作用,在订单系统负责管理订单创建、订单支付、订单生产、订单确认、订单完成、取消订单等订单流程。还涉及到复杂的订单状态规则、订单金额计算规则以及增减库存规则等。在 4 节核心功能设计中会重点来说。(3)底层服务信息化建设达到一定程度的企业,一般会将公司公共服务模块化,比如:产品,会构建对应的产品系统,代码、数据库,接口等相对独立。但是,这也带来了一个问题,比如:订单创建的场景下需要获取的信息分散在各个系统。
参考资料:
还不知道,如何设计订单系统?来看这篇文章,很不错![1]
表的设计
订单的基本信息有五个:用户信息(who,谁下的单), 商品信息(what, 买了什么), 订单信息(when,什么时候买的),支付信息(cost, 花了多少钱),优惠信息(discount, 是否参与了优惠活动)
特别的,对于实物电商,还会有物流信息和收货信息;而虚拟商品/数字商品,则可以没有这两块的信息。
特别的,对于 SAAS 平台,还会有结算信息,以记录商品利润分成情况。
用户信息:用户账号、等级信息;
商品信息:规格、商品数量、商品价格、商品图片、商品链接;
订单信息:订单编号、订单状态、订单时间;
支付信息:支付方式、支付时间、支付状态、支付单号、商品总金额、商品实付金额、运费、抵扣、促销优惠金额、总优惠金额;
结算信息:成本价,结算价格等;
优惠信息:关联的优惠券、促销活动;
物流信息:物流单号、物流公司、物流状态;
收货信息:收货姓名、地址、电话;
参考资料:
订单系统的表设计探讨[2]
还不知道,如何设计订单系统?来看这篇文章,很不错![3]
流程设计
一套订单流程里会包含正向流程和逆向流程。
正向流程即正常的顺利和流畅的下单流程.
逆向流程即修改订单, 取消订单,退款,退货引发的流程。
订单的状态机设计(注: 状态机是对现实世界的抽象,它描述了一个事物的状态转换流程)
参考资料:
还不知道,如何设计订单系统?来看这篇文章,很不错![4]
电商核心订单系统的一些设计思考[5]
正向流程
以一个通用 B2C 商城的订单系统为例,根据其实际业务场景,其订单流程可抽象为 5 大步骤:订单创建>订单支付>订单生产>订单确认>订单完成。
订单创建: 用户下单后,系统需要创建订单,创建订单前需要先获取商品信息,和优惠信息(有优惠的情况下获取); 下单如果涉及到库存扣减,还要考虑库存管理问题。具体请参考商品库存管理和秒杀系统设计[6]
订单支付:用户支付完订单后,需要获取订单的支付信息,包括支付流水号、支付时间等
订单生产:订单生产,是指产品从企业到用户这一流程的概述。如电商平台中,商家发货过程已有一个标准化的流程,订单内容会发送到仓库,仓库对商品进行打单、拣货、包装、交接快递进行配送。对数字商品而言,这块流程就是从供应商或者自建供应链取货。
订单确认:收到货后,订单系统需要在快递被签收后提醒用户对商品做评价。这里要注意,确认收到货不代表交易成功,相反是售后服务的开始。对数字商品而言,正常推送数字权益给用户后,可以完成自动确认,无需用户确认流程。
订单完成:订单完成是指在收到货 X 天的状态,此时订单不在售后的支持时间范围内。到此,一个订单的正向流程就算走完了。对数字商品而言,正常推送数字权益给用户后,可以完成自动完成订单。
逆向流程
逆向流程是各种修改订单、取消订单、退款、退货等操作,需要梳理清楚这些流程与正向流程的关系,才能理清订单系统完整的订单流程。
订单的修改: 要明确可以修改的字段范围;
订单的取消: 用户没有付款,被取消订单,需要退回库存,优惠券,相应权益等;
订单退款: 需要和支付系统,促销系统交互,退回相关资金和优惠券,同时修改订单状态。
订单退货: 与退款类似,但是需补回库存,具体的要结合退货场景。
特别的,对于订单的取消的设计,可以采用 RocketMQ 延迟队列方式来实现。 具体的可以参考领导:谁再用定时任务实现关闭订单,立马滚蛋![7]
部署架构
主要包含两部分,订单网关和订单服务。
订单网关负责做订单数据的聚合;
订单服务负责订单的创建和状态转换,以及发布相关消息到 MQ,方便其它服务订阅。
参考资料:
电商核心订单系统的一些设计思考[8]
参考资料
[1]
还不知道,如何设计订单系统?来看这篇文章,很不错!: https://juejin.cn/post/6901950646417620999
[2]
订单系统的表设计探讨: https://juejin.cn/post/7029300867949920286
[3]
还不知道,如何设计订单系统?来看这篇文章,很不错!: https://juejin.cn/post/6901950646417620999
[4]
还不知道,如何设计订单系统?来看这篇文章,很不错!: https://juejin.cn/post/6901950646417620999
[5]
电商核心订单系统的一些设计思考: https://juejin.cn/post/6847902218620764174
[6]
商品库存管理和秒杀系统设计: https://xie.infoq.cn/article/d70abaebdc1db54681a741729
[7]
领导:谁再用定时任务实现关闭订单,立马滚蛋!: https://juejin.cn/post/6987233263660040206
[8]
电商核心订单系统的一些设计思考: https://juejin.cn/post/6847902218620764174
版权声明: 本文为 InfoQ 作者【hackstoic】的原创文章。
原文链接:【http://xie.infoq.cn/article/c34832e354457870253f7d3f1】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论