目录
-
背景
- 商城整体架构
- 订单系统
- 商品系统
- 促销系统
- 支付系统
- 推荐系统
- 积分系统
- 会员系统
- 总结
1. 背景
下面基于我们公司自建商城平台,来谈谈我们商城架构设计方案。
2. 商城整体架构
公司原有技术架构是SpringCloud微服务架构,所以商城系统也是在这个体系下,同时根据我们公司实际业务特殊和复杂性,对各个模块进行微服务划分,业务领域分成多个业务中台和数据中台。
采用分层设计,从系统分层设计角度考虑,可以划分:前端接入层、应用表示层、中台服务、后端服务层、基础服务层。
3. 订单系统
2.1、订单系统边界
对外服务展示,所有给企业外部用户使用的系统都在这一层,包括WEB、普通用户使用的C端,还包括给商户使用的商家后台和在各个销售渠道进行分销的系统,比如与银行信用卡中心合作、微信合作在合作商的平台展示出本产品。这类系统站在与客户接触的最前线,是企业实现商业模式的桥头堡。
中后台系统,每个C端的业务形态都会有一个对应的系统模块,如负责管理平台交易的订单系统,管理优惠信息的促销系统,管理平台所有产品的产商品系统,以及管理所有对外系统显示内容的内容系统(CMS)等。
基础服务系统,随着企业的发展,信息化建设到达一定程度后,企业需要将通用功能服务化、平台化,以保证应用架构的合理性,提升服务效率。这类系统主要给其他应用系统提供基础服务能力支持。
对下则衔接产品系统、促销系统、仓储系统、会员系统、积分系统、支付系统等,对整个电商平台起着承上启下的作用。
2.2、订单系统业务架构
订单逻辑,订单系统的核心,起着至关重要的作用,在订单系统负责管理订单创建、订单支付、订单生产、订单确认、订单完成、取消订单等订单流程。还涉及到复杂的订单状态规则、订单金额计算规则以及增减库存规则等。
如果需要从各个中台系统调用:一是会花费大量时间,二是代码的维护成本非常高。因此,订单系统接入所需的公共服务模块聚合接口,在订单系统即可完成对接公共系统的服务。
2.3、订单核心功能
为了使订单系统能够对订单进行高效、精准的管理和跟踪,订单会储存关于产品、优惠、用户、支付信息等一系列的订单实时数据,来和下游系统,如:促销、仓储、物流进行交互。
以一个通用B2C商城的订单为例,梳理其包含的信息如下:
2.4、订单正向流程
2.4.1、订单创建
用户下单后,系统需要生成订单,此时需要先获取下单中涉及的商品信息,然后获取该商品所涉及到的优惠信息,如果商品不参与优惠信息,则无此环节。
增减库存规则是指订单中的商品,何时从库存系统中对相应商品库存进行扣除,目前主流有两种方式:
(1)下单减库存——即用户下单成功时减少库存数量
优势:用户体验友好,系统逻辑简洁。
缺点:会导致恶意下单或下单后却不买,使得真正有需求的用户无法购买,影响真实销量。
解决办法:
限购,用各种条件来限制买家的购买件数,比如一个账号、一个ip,只能买一件;
(2)付款减库存——即用户支付完成并反馈给平台后再减少库存数量
优势:减少无效订单带来的资源损耗。
缺点:因第三方支付返回结果存在时差,同一时间多个用户同时付款成功,会导致下单数目超过库存,商家库存不足容易引发断货和投诉,成本增加。
解决办法:
增加提示信息:在商品详情页,订单步骤页面提示不及时付款,不能保证有库存等。
综上所述,两种方式各有优缺点,因此,需结合实际场景进行考虑,如:秒杀、抢购、促销活动等,可使用下单减库存的方式。而对于产品库存量大,并发流量没有那么强的产品使用付款减库存的方式(秒杀系统设计是在另外文档中专题描述)。
2.4.2、订单支付
用户支付完订单后,需要获取订单的支付信息,包括支付流水号、支付时间等。支付完订单接着就是等商家发货,但在发货过程中,根据平台业务模式的不同,可能会涉及到订单的拆分。
订单拆分一般分两种:
另一种是在SKU层面上拆分订单:不同仓库,不同运输要求的SKU,包裹重量体积限制等因素需要将订单拆分。
2.4.3、订单生产
订单生产,是指产品从企业到用户这一流程的概述。如电商平台中,商家发货过程已有一个标准化的流程,订单内容会发送到仓库,仓库对商品进行打单、拣货、包装、交接快递进行配送(在我们这里一般是由供应商完成)。
2.4.4、订单确认
2.4.5、订单完成
订单完成是指在收到货X天的状态,此时订单不在售后的支持时间范围内。到此,一个订单的正向流程就算走完了。
2.4、订单逆向流程
上面说到逆向流程是各种修改订单、取消订单、退款、退货等操作,需要梳理清楚这些流程与正向流程的关系,才能理清订单系统完整的订单流程。
2.4.1、订单修改
2.4.2、订单取消
用户提交订单后没有进行支付操作,此时用户原则上属于取消订单,因为还未付款,则比较简单,只需要将原本提交订单时扣减的库存补回,促销优惠中使用的优惠券,权益等视平台规则,进行相应补回。
2.4.3、退款
2.4.4、退货
用户支付成功后,客户发出退货的诉求后,需商户进行退款审核,双方达成一致后,需对库存系统进行补回,支付系统、促销系统以退款单形式完成退款。最后,在退款/退货流程中,需结合平台业务场景,考虑优惠分摊的逻辑,在发生退款/退货时,优惠该如何退回的处理规则和流程。
2.5、状态机设计
现态、动作、次态。
现态:是指当前所处的状态。
动作:动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。
次态:动作满足后要迁往的新状态,“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。
以一个B2C商城的订单系统举例,状态分类如下:
系统订单状态、商家订单状态、买家订单状态等。
订单超时取消、订单支付失败、订单付款完成等。
除此以外,随着业务的不断发展,不同的业务类型,所对应的订单状态都会有所区别。所以,订单系统中一般会储存多套状态机,以满足不同的订单类型来使用。
2.5、关键代码片断
3. 产品商品系统
由于写在一起篇幅太长,拉上拉下的设置一格式实在不好编辑;另外各位看官看文章太长也心思看完,看久也累!故每个子系统分开写!