三分恶 2023-05-30 10:20 发表于北京

以下文章来源于知了一笑 ,作者知了一笑

知了一笑.

积累、总结、用心记录。

订单,业务的核心模块;

一、背景简介

订单业务一直都是系统研发中的核心模块,订单的产生过程,与系统中的很多模块都会高度关联,比如账户体系、支付中心、运营管理等,即便单看订单本身,也足够的复杂;

业务在发展的过程中,必然会导致订单量的持续增加,订单自身、数据体量、实现流程,都需要不断的迭代更新,如果在订单流程的研发初期,没有相对全面的考量,那么很有可能导致中后期的重构;

从实践经验上说,围绕订单业务:建议过度设计,轻量级分步实现

在产品初期先做好全面的设计,场景和流程上做好可扩展性的保留,在数据层面规划好不同体量的应对方案,走在订单业务的前面避免被动,尽量不要被业务的发展和演变甩在身后;

二、订单业务

1、订单体系

订单体系从角色上看,主要涉及:用户、商户、平台三个核心参与方,其订单流程的搭建就是围绕三方的交易场景展开;

这里需要说明一些细节:商户可以是第三方商家,也可以是平台方自己,不影响概念上的划分;商品也存在多种形式,所以用交付来描述,可以覆盖物流的定义;

用户:通过应用端,进行商品的选择和下单;平台:实现订单交易链路和支付能力,以及对整个流程的调度;商户:提供商品和交付能力;

在图中,只是围绕订单体系做一个框架性的宽泛描述,在成熟的订单业务中,其复杂程度远超上图,下面围绕核心节点来细致分析;

2、流程管理

2.1 流程拆分

订单的业务属性是极高的,流程本身也比较复杂,从不同的参与方来看,其流程分段策略完全不一样,这里仅站位研发视角,把订单逻辑分为:创建、支付、交付三个阶段;

  • 订单创建:围绕用户的下单路径做管理,从商品的访问点击并选中,到购车下单或者直接下单,从而完成订单的创建;

  • 订单支付:各种支付渠道的对接是交易场景的基础功能,订单的核心状态即支付成功;

  • 订单交付:在订单支付完成之后,开始进行商品的交付流程,可能是商家的发货或者服务提供,交付成功即订单完成;

如果将整个订单场景统筹起来看的话,还存在很多隐性的流程,与订单衔接的上下游业务还有很多,这里只是专注于订单功能自身的边界做划分;

2.2 正向流程

在理想的状态下,订单从购物车结算下单开始,到交易支付完成,最终到商家完成交付,是非常复杂的流程链路;

在实现上,订单的正向流程链路都是分段管理的,比如购物车、订单创建之后、支付完成、交付等诸多关键节点,并不是一个即时的流程;

2.3 逆向流程

对于订单这种极度复杂的流程,导致订单流程逆向的情况,要细致的考虑并且提供相应的解决方案,尽量确保程序可以兜底流程逆向,人工干预的成本和风险都极高;

  • 取消动作:用户主动取消订单,发起退款流程等;商户因为交付失败,主动发起流程退回等动作;

  • 超时情况:订单创建后,指定时间内没有支付;订单支付后,指定时间内商家没有交付等多个超时场景;

  • 节点异常:系统平台的在订单调度时的业务异常,或者程序异常,又或者支付等第三方渠道异常等;

这些常见的异常问题,在一般的场景下可能不会引发效应问题,对于订单这种异步解耦的复杂场景中,需要一个稳定的机制快速执行逆向流程;比如下单后未支付导致持续锁定库存,或者交付超时影响用户体验等;

2.4 调度与监控

订单属于核心流程又兼具复杂的特性,自然依赖系统平台的调度与监控手段,无论是正向还是逆向流程,都依赖调度手段提高订单的完成率,或者促使逆向流程有序执行,在这个过程中需要对订单路径有完整的监控能力;

调度机制:更侧重订单被动状态的处理,多见于各种超时的场景,用来提前对用户和商户进行消息提醒触达,或者进行订单流程的处理;

监控策略:更侧重对订单的主动干预处理,在发现订单中断或者异常时,可以通过产品层面的入口进行主动修复,或者系统层面的主动重试,当然也不排除最后的手动干预;

3、结构设计

围绕订单场景,涉及的数据结构非常复杂,不论是商品还是支付,亦或是订单自身的结构,在具体的业务中都会拓展出很多关联表;

订单结构的设计和管理,基于场景复杂度考虑,可能要融合商家、仓储货架、用户、渠道和类型等;在订单量增长之后,还需要结合业务场景,进行数据体量层面的拆分处理;

三、技术方案

1、订单ID

订单主体的唯一ID标识,在数据体量不大的情况下,使用表的自增ID主键即可,从长期看的话并不友好,如果订单量比较大,可能涉及分库分表的流程,则需要制定ID生成策略;

  • UUID:生成唯一字符串识别码,订单ID直接使用即可;

  • 雪花算法:分布式ID生成算法策略,生成的ID遵循时间的顺序;

  • 自定义ID:除了唯一的属性外,在订单ID中添加其他的关键业务标识;

2、并行与异步

并行操作,在订单详情的加载过程中,涉及到的查询信息非常多,比如:商品、商户、订单、用户等,可以通过并行的方式,提高响应的时间,如果采用串行的方式,则接口性能会差很多;

异步操作,订单是个复杂的流程,显然不可能在一次流程中完成所有逻辑,流程分段异步常规手段,就是借助MQ消息的方式,同样可以极大的提升服务性能;不论是订单的正逆向流程,都可以基于状态、事件、动作进行异步解耦处理;

3、超时问题

订单超时问题的本质在于,指定时间段之后需要执行一个动作;比如最经典的场景,下单之后超过15||30分钟未支付,订单自动取消并且被关闭,释放商品的库存,并通知用户;

实现一个动作延迟执行的方式有很多,比如延期队列,过期监听,消息延时消费等,不过这些方式在复杂的订单系统中并不常见,主流的话还是采用定时任务调度的方式;

任务调度时,对订单的处理,同样要确保业务流程操作的幂等性,数据层面的一致性等问题,如果出现异常单则进行重试,分析异常原因不断优化流程也同样重要;

如果订单体量大,任务调度能完成吗?

订单体量和订单实时量不是一个概念,系统沉淀的订单量和任务要处理的量不是一个等级,常规的数据体量做好分库分表的设计和查询优化即可,不会成为调度任务的瓶颈问题;

如果订单数据实时体量大,比如每天超千万的水平?

这就更不是应用的问题了,订单体量能达到每日千万的规模,公司会提前很长时间就把数据团队拉到应用团队中,解决这种核心的棘手问题,此前在数据公司搬砖时,每日单量刚过百万,就安排数据团队做解决方案了;

4、分布式事务

订单涉及支付对接、库存管理、结算对账等各种复杂的流程,自然对数据一致性有极高的要求,如果数据层面出现问题导致异常单出现,难免需要人工介入处理,所以对流程的各阶段做好细致的事务和逻辑管理极其重要;

订单流程是异步解耦的方式推进的,在分布式事务的策略上追求的是最终结果一致性即可,不过这并不妨碍在分段的流程中,进行局部的事务管理,事务成功,流程正向推进,事务失败,流程重试或逆向回滚;

四、数据方案

1、转化分析

经典的订单指标体系,用户下单过程的路径统计,从而深度的分析转化率问题,不断的对流程和场景优化,从而提高成交量;

交易的转化路径分析,是产品和运营重点关注的指标体系,在数据层面,埋点采集的数据通常是上传第三方平台,方便进行用户和业务分析,并且有助于同类客群的营销推广;

2、分库分表

数据在到达一定体量之后,需要进行分库分表的操作,从而解决各种性能方面的问题;将订单数据按照特定的维度进行计算,从而将数据分流到不同的库表中,解决读和写的瓶颈;

基于订单ID计算拆分的逻辑是最常见的,在特殊情况下,也会基于用户ID或商户ID进行计算,从而将相关的数据堆放在一起,如果有必要,也可以考虑多维度拆分的多写模式;

3、数据同步

订单数据分库分表虽然解决存储问题,但是也带来了很多查询方面的阻碍,通过搜索引擎来解决查询问题也是常用的技术选型;

订单数据在库和搜索引擎之间同步的方法有很多:同步双写,对数据的实时性要求极高;异步解耦,流程存在轻微的延迟;定时任务,存在明显的时效问题;组件同步,采用第三方数据同步组件;订单场景的话推荐同步双写的方式。

三分恶

一个号称能文能武的后端开发。

136篇原创内容

公众号

最近建了两个新群,一个技术交流群,一个摸鱼划水群,感兴趣的可以添加我的个人微信:ThirdFighter,拉你入群。

浅谈电商核心「订单」业务如何设计相关推荐

  1. 「订单」业务的设计与实现

    一.背景简介 订单业务一直是系统研发中的核心模块.订单的产生过程与系统中的许多模块高度关联,例如账户体系.支付中心.运营管理等等.即使仅单独考虑订单本身,它也足够复杂了. 在业务发展过程中,订单量必然 ...

  2. 【浅谈电商】如何防止重复支付

    [浅谈电商]如何防止重复支付 一.前言 最近正在做电商相关的项目,整理一下解决方案并帮助自己巩固知识点,此方案是结合了目前的业务环境,若有更好的解决的方式很高兴与大家一起讨论. 二.支付流程 要想知道 ...

  3. 浅谈电商运营中的定价|Ocean商论

    前言 我的一个经济学老师的研究领域是定价,在一次交流中,他开玩笑说如果有一个经济学家能把定价完全解释明白,他就会获得诺贝尔奖. 经济学中的定价模型是数学的最优解,但是业务中的定价则考虑的变量更多,且环 ...

  4. 复盘-电商产品「分类」功能迭代

    "分类"功能基本是电商产品的标配.如果你说记不清了,可以看看下面京东.淘宝的分类,是不是瞬间唤起了你的记忆,很熟悉对吧? 我在做电商方向的产品后,接手的第一个功能就是优化" ...

  5. 浅谈电商行业标签与人群(上)

    谈到CRM或者电商,我们往往离不开几个重要字样,标签.人群? 今天小编跟大家一起普及一下CRM系统中常用的标签有哪些? 1.会员画像-人口属性 姓 Last Name 对应CRM会员的姓 名 Firs ...

  6. 浅谈电商数据分析指标体系

    互联网时代电商平台的兴起,改变了零售行业的状况.拓宽了人们的购物渠道.对于电子商务信息系统最核心的能力便是大数据能力,包括大数据处理.数据分析和数据挖掘能力.无论是电商平台还是在电商平台上销售产品的卖 ...

  7. 浅谈电商网站开发中用户会话管理机制的设计和实现原理

    笔者由于工作需要,最近对国内外两款知名的电商网站的用户会话管理(User Session Management) 的实现机制做了一些调研,这里把我学习到的一些知识分享给各位同行,希望起到抛砖引玉的作用 ...

  8. 昔年浅谈电商服务业务应如何推广

    今天遇到朋友问说,如何推广自己的电商服务业务?他自己有在从事这方面的业务,现在想扩大,但不知如何推广- 电商服务业务.我可以理解为商家服务的业务- 那么这种业务如何推广呢?昔年有这些观点分享,如有不对 ...

  9. 电商超卖,从业务到设计

    编辑导语:超卖这一概念的定义可以从不同层面进行阐述,比如平台层面.渠道层面.仓库层面等.而假设因超卖导致订单难以履行,则容易让用户体验"打折".为什么有时电商超卖的现象会发生?可以 ...

最新文章

  1. PowerDesigner教程系列(三)概念数据模型
  2. 小米kali linux蓝牙,小米筆記本在Kali Linux下所遇問題部分解決方案(持續更新中)...
  3. 利用系统滴答时间计算实际程序运行时间
  4. SpringCloud-Learning
  5. 漫话:为什么键盘以QWER排列,而不是ABCD?
  6. 《软件工程导论》课后习题答案
  7. Spring+hibernate+JSP实现Piano的数据库操作---4.配置文件
  8. python实操案例_python实战案例分享 - 讲师
  9. 南阳ACM 题目275:队花的烦恼一 Java版
  10. VMware ESXi6.0注入8060阵列卡驱动过程记录
  11. 秒懂HTTPS接口(原理篇)
  12. 费马小定理 欧拉定理 逆元
  13. Windowns11并未完全抛弃IE内核,可向下兼容至IE7
  14. glove.840B.300d、glove.42B.300d、glove.6B网盘下载
  15. 【Windows】Windows10家庭版永久关闭自动更新
  16. 大学328门专业课程标准英文翻译模板
  17. 计算机c盘满了怎么移到d盘去,Win10电脑c盘满了怎么转移到d盘?
  18. 浅谈人工智能神经网络的优点
  19. uniapp中字体加粗问题
  20. 丁小平微积分研究成果刍议(转载)

热门文章

  1. 12.1.1重学C++之【写文本文件】
  2. 前传:03.意外的荧光
  3. 抖音矩阵系统源码,抖音矩阵系统,抖音SEO源码。、
  4. 0x3f3f3f3f是什么意思???
  5. [0x7FFBFB69D3E0] ANOMALY: meaningless REX prefix used问题的修复
  6. 关于thymeleaf组件中th:each的遍历功能出现的问题
  7. windows10重装系统鼠标键盘都没反应,解决办法
  8. 区块链有助金融监管效能提升 探讨区块链未来发展趋势
  9. 帝国CMS内核在线听小说听书网源码
  10. uniapp 实现拍照 相册选取选视频和照片