/oms

OMS Design

Apache License 2.0Apache-2.0

OMS

TOC

What is OMS

订单作为电商系统的纽带,贯穿了电商系统的关键流程,其他模块都是围绕订单构建的。

订单可以认为是一次交易的生命周期,订单是交易的载体,反应的是履约的内容,即:一份订单就是一份合同。

通过OMS,使得订单执行过程中的相关系统,例如TMS,OMS,BMS等成为一个有机整体,并为持续优化提供有力的数据支持。

一个订单从提交到最后真正生产成功,需要经历几十个系统,涉及的接口交互、MQ交互可能达到上百个,任何一个环节出问题,都会导致这一单的异常。

       Partener --+         
                  |         
          Admin --+         
                  |         
         Seller --+         +-- BMS
                  |         |
           User --+         +-- TMS
                  |-- OMS --|
           API ---+    |    +-- WMS
                       |
    +------------------------------------------------------+
    |		 |       |                                 |
orderMark       FSM   storage                         dependencies
                         |                                 |
                    +----+--------+                        |- 台账
                    |             |                        |- 计费
              lookup & search  modeling                    |- BigData
                                  |                        |- 商品
                                facts                      |- 库存
                                  |                        |- 产品模型
                           BI & data mining                |- 时效
                                                           |- 地址和GIS
                                                           |- 支付
                                                           |- 预约
                                                           |- 主数据
                                                           |- 预分拣
                                                           |- 风控
                                                           +- ...

Functionalities

用户视角

  • 全渠道订单
    • 多业态
    • 中间枢纽
    • 统一视图
  • 集单
  • 团单,拼单
  • 合单
  • 预约单

执行视角

  • 憋单
  • 拆单
  • 转移
  • 下发
  • 回传
  • 拦截
  • 正向和逆向

Features

  • FSM
  • Information Collector and Passthru(model)
    • Products
      • 商品信息主要影响库存、金额和WMS生产
    • Stakeholders
    • Addresses
    • Promotions
      • 涉及风控、黑白名单等
      • 可能涉及到人工审核
    • Payment
      • 记录交易金额,也要记录过程金额
      • 例如,商品分摊的优惠金额、积分、支付金额、应付等
        • 积分互换
      • 退换货、风控、财务等会用到
    • Time
      • 全生命周期的状态节点触发时间
      • 与状态一起表示它发生的时间语义
  • Interact with stock
    • 避免超卖和少卖
    • 超卖对用户体验差
    • 少卖对商家体验差
  • Execution(translation or orchestrator)
    • transport to WMS
    • transport to TMS
    • 履约内容
      • 时效
      • 发票
      • 优惠
      • COD收款
      • 预约
      • 运费
  • Push
    • to whom
      • 商家
      • 用户
      • 仓储人员
      • 配送人员
    • how
      • 手机push
      • 站内信
      • callback API
      • SMS
      • wechat

Characteriscs

Variety(多样性)

例如

  • 地址信息,O2O订单,会多出自提点地址
  • 支付信息,如果COD
  • 缺货处理
    • 部分缺货
  • 预售,团购,拼单,拆单,合单,集单,憋单
  • 来源
    • 导入
    • API
    • 页面手工建单
    • 内部测试UAT
    • 自动生成订单
    • 无界(新)零售
      • 意味着到处都可能是入口

正向、逆向、调拨、盘点和搬仓混在一起,有race condition

取消可能包括如下场景,同时包括整单取消和部分取消:

  • 买家取消
  • 卖家取消
  • WMS取消
  • TMS取消
  • 风控取消
  • 客服取消
  • 超时未支付取消
  • 换货报缺
  • 仲裁取消

模型复杂

  • 父子单(拆单)
  • 主赠关系
  • 团单与子单

依赖多

  • 内部依赖
    • 强依赖
      • 商品
      • 主数据
      • 客户中心
      • 库存
      • 产品中心
      • 时效
        • 控制下发WMS的时机
        • 控制下发TMS的时机
      • 预分拣
      • 台账
      • 风控
      • VMI
      • GIS
      • 优惠券
      • 账户中心
    • 弱依赖
      • 清关
      • 大件预约
      • 发票系统
      • 计费系统
      • 售后系统
      • 订单异常中心
      • 保价系统
      • TMS
      • WMS
        • 仓间调拨
  • 外部依赖
    • 第三方承运商
    • 第三方WMS
    • 第三方支付

Core tech building blocks

  • 各种语义的分布式锁
    • 幂等性
    • 唯一性
    • 防并发锁
    • 防重锁
    • 时间区间锁
    • 分布式Latch
  • 定时任务平台
  • 可靠的MQ发送机制
  • FSM
    • 订单状态是交易进展的反馈,是订单流程的一个个连接点
    • 不同类型订单的状态机不同
  • 统一异常中心
    • 异常的定义平台化
    • 异常处理平台化、流程化
    • 异常的自我解释,自我定位
    • 主动和被动的异常监控
  • 订单全流程跟踪
  • 异步接单框架 task
  • 接单与落库解耦
    • 提高接单能力
  • 流程引擎,流程编排
  • 业务扩展点机制
    • 微内核
    • 不能让接单系统成为瓶颈
    • 打破Conway law
  • 查询
    • 读写分离
    • 按订单号查询
      • 动静分离
    • 搜索引擎
  • FlexDB
    • 解决个性化扩展字段问题
  • TCC
    • 解决复杂场景下数据一致性问题
  • Graceful shutdown
  • Custom metrics reporter
    • central reporter
  • UAT环境
    • 全链路压测
    • profiler
  • 动态分组(请求路由)
    • 降级方案
    • 请求分发机制

Design

带着问题思考

  • 多层接单架构
    • 统一接单
    • 订单中间件接单
  • 多渠道隔离
  • 2B和2C的订单是否统一存放和处理
  • 订单类型是否分层
    • 前端下单与后端生产分离

订单形态

  • 交易单(用户下达的指令)
  • 计划单(生产计划单)
    • 订单拆分
    • 订单转移
  • 生产单(生产运营单)

Landscape

核心流程

  • 接单
  • 订单履约
  • 数据浏览

TODO

  • 订单的分配