实践系列:分销平台的技术架构
0. 目标
16年初,在美团主导建设的猫眼演出业务的分销平台
,其中涉及订单交易部分,是电商业务下的典型场景。最近主导支付技术团队建设,在技术氛围建设方面,组织一些列的团队内部分享,拿这个 case 分享一下。
Note:整理有一个 keynote 版本,当时一起进行系统建设的另一个
师兄 & 好友
小宇,现在阿里。
备注:当前 blog 中说的分销平台
,本质也是其他业务场景的开放平台
。
1. 概要
- 背景:
- 为扩大销量,引入下游「分销商」,准备自建分销平台
- 分销平台作为基础服务,支持下游渠道接入
- 对外开放资源的同时,要求做好「系统安全」和「资源权限」管理
- 难点与挑战:
- 订单设计:订单状态含义要清晰内聚,而且状态流转可控
- 出票接口幂等:避免针对同一订单重复出票
- 掉单问题:出票之前
fail fast
策略提升用户体验,出票采取「协商策略」减少掉单
- 应收结算:订单状态流转,能够支撑对下游分销商的应收款收取和对上游资源方结算单的结算
- 系统安全控制:账号权限、资源权限、权限时效控制
- 订单设计:订单状态含义要清晰内聚,而且状态流转可控
转存失败重新上传取消
2. 分销平台:架构&细节
几个方面:
- 功能模块:为了满足需求,同时,能够进行落地开发,功能的边界拆分.
- 业务架构:整体业务边界和范围
- 关键要点:落地实现的细节
2.1. 功能模块
分销平台,主要功能模块:
- 数据分发:向分销商分发基础数据
- 账号管理:只有指定账号才能获取数据资源
- 权限管理:不同账号的资源权限粒度不同
- 订单管理:订单状态伴随用户下单、出票过程流转
- 对接结算:根据订单状态和退款记录,生成结算单
转存失败重新上传取消
2.2. 业务架构
为了满足业务需求,围绕上述的功能模块分析,分销平台的业务架构:
转存失败重新上传取消
2.3. 关键要点
几个方面:
- 领域模型
- 订单系统
- 应收结算:资金沉淀
- 系统安全:接口验签 + 时间窗口
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. 参考资料
- 之前工作的要点总结
实践系列:分销平台的技术架构相关推荐
- .net core实践系列之短信服务-架构优化
前言 通过前面的几篇文章,讲解了一个短信服务的架构设计与实现.然而初始方案并非100%完美的,我们仍可以对该架构做一些优化与调整. 同时我也希望通过这篇文章与大家分享一下,我的架构设计理念. 源码地址 ...
- 微服务架构设计实践系列之九:应用架构
微服务架构设计实践系列之九:应用架构 原文:微服务架构设计实践系列之九:应用架构 版权声明: https://blog.csdn.net/beyondself_77/article/details/7 ...
- 分享| 小程序开放平台的技术架构实例
近年来,超级APP逐渐崛起,各大互联网巨头纷纷推出小程序开放平台.在此背景之下,是否需要实现自己的小程序开放平台?又该如何实现?这些问题困扰着很多公司.作为当前市面上商业化程度最高的小程序容器技术,F ...
- .net core实践系列之短信服务-架构设计
前言 上篇<.net core实践系列之短信服务-为什么选择.net core(开篇)>简单的介绍了(水了一篇).net core.这次针对短信服务的架构设计和技术栈的简析. 源码地址:h ...
- DotNET企业架构应用实践-系列目录
系列介绍 我一直在写关于AgileEAS.NET平台的一系列文章,也一直在推广AgileEAS.NET平台,本来也无意于独立的写这么一个系列,最早我是混杂在AgileEAS.NET平台中进行介绍的,即 ...
- 湖上建仓全解析:如何打造湖仓一体数据平台 | DEEPNOVA技术荟系列公开课第四期
如今,面对数字化快速发展带来的挑战,现代化企业需要打破以往数据的孤岛,让数据从采集.加工.管理到应用,是统一的数据存储和数据处理,甚至是作为全栈式的湖仓一体数据平台,以支撑各类数据赋能业务,进而创造更 ...
- 【问链财经-区块链基础知识系列】 第二十二课 贸易金融区块链平台的技术机理与现实意义
简介:贸易金融区块链平台的技术机理.模式.优势与现实意义都有哪些?对湾区贸易金融区块链平台的未来建设有何展望?本文将进行详述. 小微企业贡献了我国60%以上的GDP.50%以上的税收以及80%的城镇就 ...
- 爱奇艺微服务标准技术架构实践
背景 为数以亿计的用户提供优质的视频服务的爱奇艺技术产品团队,为了适应业务的快速迭代和创新,并支撑海量的用户请求,很多团队都对各自的业务系统自发地进行了微服务架构的改造. 在微服务化的过程中,各业务团 ...
- IOT(27)---国内物联网平台的发展、技术架构演进
国内物联网平台的发展.技术架构演进 本文基于两年来在物联网方面的研发积累,先跟大家探讨国内物联网平台的发展和技术架构演进,再提出作者的物联网完整解决方案. 一.国内物联网平台的发展特点 1. 国 ...
- 网易创新企业大会倒计时,云信将发布新一代音视频技术架构
网易创新企业大会倒计时 4 天! 当下,科技创新已成为推动经济社会发展的主要力量,运用创新技术构建前瞻性业务模式.提高业务增长成为各大企业生存和发展的重要着力点. 对此,网易旗下一站式企业服务提供商网 ...
最新文章
- 【设计模式】原型模式 ( 概念简介 | 使用场景 | 优缺点 | 基本用法 )
- BM惊爆:EOS一周年工作KPI
- jquery中filter、find、children、contents、contains区别
- 关于mysql内存表的一个帖子(转载)
- virtualbox 安装 虚拟机的时候报错不能创建新任务
- Android View框架总结(三)View工作原理
- e站host地址_ip地址基础入门知识
- 《Redis设计与实现》读书笔记
- 哈希表实现电话号码查找系统
- 透过微积分看芝诺悖论-龟兔赛跑
- 计算机英语词汇的特点,计算机专业英语词汇特点.ppt
- Android主线程耗时方法监控
- java日期转字符串_Java时间日期格式转换Date转String和String转Date
- UEstudio 17打开中文乱码的处理解决
- windows10 设置禁止电脑自动安装软件,安装软件时会有提示
- 229. Majority Element II 【M】【52】
- 改注册表让Win10任务栏透明
- NFS配置项no_root_squash和root_squash的区别
- 三个火枪手专题一:简单搜索
- 为什么宇宙会将最大速度限制在光速?