0. 目标

16年初,在美团主导建设的猫眼演出业务的分销平台,其中涉及订单交易部分,是电商业务下的典型场景。最近主导支付技术团队建设,在技术氛围建设方面,组织一些列的团队内部分享,拿这个 case 分享一下。

Note:整理有一个 keynote 版本,当时一起进行系统建设的另一个师兄 & 好友小宇,现在阿里。

备注:当前 blog 中说的分销平台,本质也是其他业务场景的开放平台

1. 概要

  • 背景

    • 为扩大销量,引入下游「分销商」,准备自建分销平台
    • 分销平台作为基础服务,支持下游渠道接入
    • 对外开放资源的同时,要求做好「系统安全」和「资源权限」管理
  • 难点与挑战:
    • 订单设计:订单状态含义要清晰内聚,而且状态流转可控

      • 出票接口幂等:避免针对同一订单重复出票
      • 掉单问题:出票之前 fail fast 策略提升用户体验,出票采取「协商策略」减少掉单
    • 应收结算:订单状态流转,能够支撑对下游分销商的应收款收取和对上游资源方结算单的结算
    • 系统安全控制:账号权限、资源权限、权限时效控制

转存失败重新上传取消

2. 分销平台:架构&细节

几个方面:

  • 功能模块:为了满足需求,同时,能够进行落地开发,功能的边界拆分.
  • 业务架构:整体业务边界和范围
  • 关键要点:落地实现的细节

2.1. 功能模块

分销平台,主要功能模块:

  • 数据分发:向分销商分发基础数据
  • 账号管理:只有指定账号才能获取数据资源
  • 权限管理:不同账号的资源权限粒度不同
  • 订单管理:订单状态伴随用户下单、出票过程流转
  • 对接结算:根据订单状态和退款记录,生成结算单

转存失败重新上传取消

2.2. 业务架构

为了满足业务需求,围绕上述的功能模块分析,分销平台的业务架构:

转存失败重新上传取消

2.3. 关键要点

几个方面:

  1. 领域模型
  2. 订单系统
  3. 应收结算:资金沉淀
  4. 系统安全:接口验签 + 时间窗口

2.3.1. 领域模型

分销平台的领域模型设计:

转存失败重新上传取消

领域模型的落地细节:

转存失败重新上传取消

2.3.2. 订单系统

订单系统,涉及几个要点:

  • 订单状态拆分

    • 配送状态:物流状态
    • 下单出票状态
  • 接口幂等:相同的下单出票请求,只会触发一次真正的下单出票
  • 组合策略:降低掉单率
    • Fail Fast :出票之前,通常用户未付款,采取快速失败策略
    • 协商策略:出票过程中,如果不确定是否成功,就进入协商状态(fail cache)
    • 补偿策略:资源方退票时,为保证结算周期的精确,记录退票操作记录,系统容错性、可用性
  • 结算、应收逻辑:根据明确的订单状态,生成结算流水和应收流水

2.3.2.1. 订单状态拆分

转存失败重新上传取消

订单状态拆分之后:

  • 配送状态
  • 下单出票状态

带来的好处:

  • 配送之后的订单,在极端情况下,仍可以进行「退票」等操作

a.配送状态:

转存失败重新上传取消

b.下单出票状态:

转存失败重新上传取消

2.3.2.2. 组合策略:极致优化掉单率

为了极致优化掉单率以及提升资金沉淀,采用组合策略:

  • Fail Fast :出票之前,通常用户未付款,采取快速失败策略
  • 协商策略:出票过程中,如果不确定是否成功,就进入协商状态(fail cache)
  • 补偿策略:资源方退票时,为保证结算周期的精确,记录退票操作记录,系统容错性、可用性

转存失败重新上传取消

2.3.3. 应收结算:资金沉淀

特别说明:

设计订单的时候,不仅仅是设计订单,在设计阶段,考虑应收和结算的逻辑

应收和结算原则:

  • 在指定的应收结算周期内,完成流水核对
  • 资金沉淀:应收 >= 结算

应收和结算时间基准:

  • 应收:

    • 正流水:

      • 订单状态为:LOCKED、CANCELED、FIXING、FIXED、REFUNDING、REFUNDED、REFUND_FAIL
      • 结算周期的时间基准:下单成功时间
    • 负流水:
      • 订单状态为:CANCELED、REFUNDED
      • 结算周期的时间基准:
        • 分销商退票成功时间
        • 如果没有退票成功时间,以取消成功时间为准
  • 结算:
    • 正流水:

      • 订单状态为:FIXED、REFUNDING、REFUNDED、REFUND_FAIL
      • 结算周期的时间基准:出票成功时间
    • 负流水:
      • 订单状态为:REFUNDING、REFUNDED、REFUND_FAIL
      • 结算周期的时间基准:资源方退票成功时间

转存失败重新上传取消

2.3.4. 系统安全

系统安全:

  • HTTP:接口验签 + 时间窗口

    • 窃听风险
    • 篡改风险
    • 重放攻击
  • HTTPS:时间窗口
    • 重放攻击
    • HTTPS 自身的 SSL/TSL 层,解决了窃听和篡改的风险

对于 HTTP 的 BA 认证 和 HTTPS 的实现原理,可以参考:

  • HTTP Basic Auth 剖析:HTTP 接口验签的实现原理和细节
  • HTTPS:原理剖析

3. 相关问题(Q&A)

  • Q:美团侧业务和分销系统的关系 ?

    • A:两个系统上层分离,依赖于基础数据(单点)的库存等数据。
  • Q:Fail cahce的轮询阈值 ?
    • A:依赖于供应商提供的利率,响应效率等因素创建规则,分开判断。
  • Q:有用到分布式事务吗 ?
    • A:大事务拆分成小事务,能用业务解决的尽量不用技术解决。
  • Q:订单状态的补偿机制 ?
    • A:补偿机制内聚在核心的支付系统中,通过定时器的方式将中间态改为终态。

4. 参考资料

  • 之前工作的要点总结

实践系列:分销平台的技术架构相关推荐

  1. .net core实践系列之短信服务-架构优化

    前言 通过前面的几篇文章,讲解了一个短信服务的架构设计与实现.然而初始方案并非100%完美的,我们仍可以对该架构做一些优化与调整. 同时我也希望通过这篇文章与大家分享一下,我的架构设计理念. 源码地址 ...

  2. 微服务架构设计实践系列之九:应用架构

    微服务架构设计实践系列之九:应用架构 原文:微服务架构设计实践系列之九:应用架构 版权声明: https://blog.csdn.net/beyondself_77/article/details/7 ...

  3. 分享| 小程序开放平台的技术架构实例

    近年来,超级APP逐渐崛起,各大互联网巨头纷纷推出小程序开放平台.在此背景之下,是否需要实现自己的小程序开放平台?又该如何实现?这些问题困扰着很多公司.作为当前市面上商业化程度最高的小程序容器技术,F ...

  4. .net core实践系列之短信服务-架构设计

    前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...

  5. DotNET企业架构应用实践-系列目录

    系列介绍 我一直在写关于AgileEAS.NET平台的一系列文章,也一直在推广AgileEAS.NET平台,本来也无意于独立的写这么一个系列,最早我是混杂在AgileEAS.NET平台中进行介绍的,即 ...

  6. 湖上建仓全解析:如何打造湖仓一体数据平台 | DEEPNOVA技术荟系列公开课第四期

    如今,面对数字化快速发展带来的挑战,现代化企业需要打破以往数据的孤岛,让数据从采集.加工.管理到应用,是统一的数据存储和数据处理,甚至是作为全栈式的湖仓一体数据平台,以支撑各类数据赋能业务,进而创造更 ...

  7. 【问链财经-区块链基础知识系列】 第二十二课 贸易金融区块链平台的技术机理与现实意义

    简介:贸易金融区块链平台的技术机理.模式.优势与现实意义都有哪些?对湾区贸易金融区块链平台的未来建设有何展望?本文将进行详述. 小微企业贡献了我国60%以上的GDP.50%以上的税收以及80%的城镇就 ...

  8. 爱奇艺微服务标准技术架构实践

    背景 为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改造. 在微服务化的过程中,各业务团 ...

  9. IOT(27)---国内物联网平台的发展、技术架构演进

    国内物联网平台的发展.技术架构演进 本文基于两年来在物联网方面的研发积累,先跟大家探讨国内物联网平台的发展和技术架构演进,再提出作者的物联网完整解决方案. 一.国内物联网平台的发展特点 1.    国 ...

  10. 网易创新企业大会倒计时,云信将发布新一代音视频技术架构

    网易创新企业大会倒计时 4 天! 当下,科技创新已成为推动经济社会发展的主要力量,运用创新技术构建前瞻性业务模式.提高业务增长成为各大企业生存和发展的重要着力点. 对此,网易旗下一站式企业服务提供商网 ...

最新文章

  1. 【设计模式】原型模式 ( 概念简介 | 使用场景 | 优缺点 | 基本用法 )
  2. BM惊爆:EOS一周年工作KPI
  3. jquery中filter、find、children、contents、contains区别
  4. 关于mysql内存表的一个帖子(转载)
  5. virtualbox 安装 虚拟机的时候报错不能创建新任务
  6. Android View框架总结(三)View工作原理
  7. e站host地址_ip地址基础入门知识
  8. 《Redis设计与实现》读书笔记
  9. 哈希表实现电话号码查找系统
  10. 透过微积分看芝诺悖论-龟兔赛跑
  11. 计算机英语词汇的特点,计算机专业英语词汇特点.ppt
  12. Android主线程耗时方法监控
  13. java日期转字符串_Java时间日期格式转换Date转String和String转Date
  14. UEstudio 17打开中文乱码的处理解决
  15. windows10 设置禁止电脑自动安装软件,安装软件时会有提示
  16. 229. Majority Element II 【M】【52】
  17. 改注册表让Win10任务栏透明
  18. NFS配置项no_root_squash和root_squash的区别
  19. 三个火枪手专题一:简单搜索
  20. 为什么宇宙会将最大速度限制在光速?

热门文章

  1. Python 矩形法求1/x的定积分(完美实现)
  2. MAC右键菜单踩坑——右键在当前目录打开终端
  3. 自己动手写CPU(6)简单算术操作指令
  4. 程序员笔名、别名_适合程序员的英文名字
  5. Oracle设置自增序列
  6. wordcloud绘制词云图的方法
  7. 常用接口整理(HDMI接口、VGA接口、DP接口、DVI接口、SDI接口 ) 2021-06-15
  8. duble 和 float 小数的位数
  9. 汇总一下那几个常用定理 高斯定理 泊松方程 亚阈值电流 跨导
  10. 传输层协议、应用层协议