导读

本文重点介绍了京东零售电商业务在订单逆向履约上面的最佳技术实践,京东零售快退平台承接了零售几乎所有售前逆向拦截和退款业务,并在长期的业务和技术探索中沉淀了丰富的业务场景设计方案、架构设计经验,既能承接面向消费者C端用户的高并发流量,同时也能满足集团复杂业务的订单信息流、货品实物流、财务资金流的逆向精准拦截。本文通过对集团B-PaaS化技术方案进行系统整体的架构升级改造,总结归纳出涵盖用户解约流程管理、撤销解约流程管理、订单逆向退款信息管理、流程配置化和流程可视化一整套的解决方案,该方案经过多次探讨和验证,已支持集团多个战略业务的增长。阅读本文,读者可以了解到整个快退平台新系统设计的底层逻辑,也可以参考本文并结合实际场景,将方案应用在遗留债务系统改造、业务和技术建模中。

一、背景介绍

在集团PaaS化战略引导下,笔者负责的闪电敏捷团队在近半年完成了快退系统的解约和撤销2个子系统的B-PaaS架构升级,在此基础上,快退还完成配置化系统升级,无论业务支持、产品沟通和系统交付能力都实现了跨越式的突破。

1. 业务上的支持,以集团长城融合项目为始,通过PaaS化升级改造,在原有整单退业务上支持了订单的SKU调整退业务,如不做PaaS化架构升级则需要重新构建调整退款系统支持;B商城项目中B和C端能力融合,与订单中台侧团队合力在C端订单原有状态的节点上进行能力复用,完美融合了B商城的意向单逆向业务。在未来,还将扩展支持更多集团战略项目。

2.产品上的支持,以集团复杂业务为底,快退平台承接了集团零售几乎所有售前逆向拦截和退款业务,业务复杂度极高,产品和研发日常只能以模块到人的方式沟通,比如以商详结算页为例Handler业务处理器185,而快退侧Handler业务处理器189不包含拦截器Interceptor,通过梳理合并相似业务流程,通用流程65+。通过PaaS化架构升级,不仅对业务建模、流程可视化,同时构建领域模型,沉淀一套核心业务流程,产品沟通的人员需求降低了83%。

3. 系统上的支持,集团在过去几年不仅扩充了主站业务,同时进行了出海战略、商业战略的投入,构建了多个烟囱重复系统,不仅在业务上很多能力相似,还增加了研发维护和投入成本。通过PaaS化架构升级,目前已将农批业务进行PaaS化架构支持,其他业务也在进行PaaS一套内核支持,多个垂直业务分包的融合。维护人员投入减少了一半。

二、产品介绍

2.1 快退是什么?

2.1.1 快退在C端用户消费者眼里是什么?

图1 C端用户视角下的快退

2.1.2 快退其他视角下是什么?

C端:面向C端用户完成支付前取消、支付完成后取消

商家:面向POP商家完成协助用户代取消,面向门店商家

运营:面向自营产品,同POP商家代取消

客服:面向财务审核异常,以及用户进线投诉取消

拒收:面向配送产品到顾客,联系不上或者用户拒收

天网:面向黑名单用户,套利或者逃运费的风控拦截

2.1.3 快退是什么?

用一句话总结:快退平台是面向消费者、商家、风控、客服等多种角色, 提供实物或者虚拟退款的解决方案,致力于打造售前解约方案一体化平台。

三、领域建模

3.1 建模的价值和必要性

在建模前首先来看下图,该图主要讲解了领域专家、项目经理、架构师、产研团队等人如何进行协作,也是讲述了建模的过程和必要性,尤其是统一语言、更好的还原业务真实度场景。

图2 建模的过程和必要性

可以从中提取下关键词:问题域、业务期望,业务流程图、场景活动分析,业务边界、团队组织产品边界以及技术实现的系统架构边界。用一句话归纳下,在特定的业务场景下,明确该业务场景下的问题域,通过元素和关系来表述出业务规则,进行当前问题的解决方案输出。

3.2 建模前的工作准备

3.2.1 明确目标

从宏观目标来说:企业架构(Enterprise Architecture)始于 20 世纪 60 年代,截至目前已有接近六十年的发展历程,也诞生很多成熟的企业架构与方法,例如Zachman、TOGAF、DoDAF 等,这些企业架构框架被应用于各类企业和组织的顶层设计 。那么通过对于企业架构的规划和设计,可以帮助企业构建整体的数字化策略,规划数字化项目,通过数字化的手段帮助其实现期望的战略目标和业务结果, 形成企业的数字化顶层规划与设计,指导企业的数字化转型过程。

为了构建现代化企业架构,打破数据孤岛,消灭烟囱重复建设,利用PaaS化的方式落地业务中台架构,助力企业的数字化转型,需要将现有业务系统进行业务流程梳理,识别差异化点,构建一套业务流程共享的内核,多个垂直化业务流程的扩展能力支持。

从微观目标来说:业务系统在人员交替,资料不全,代码堆砌,业务野蛮扩张的过程中,不断加深了软件复杂度的治理难度,从产品讲不全业务背景,沟通不全产品能力,研发对于业务逻辑不敢修改,上线频繁出现业务场景缺失验证等问题。不仅加剧了产研交付周期,从需求吞吐量来说也逐步下降,只留下产研团队在艰难的维护,制约了创新产品和业务的发展。

为了提升产研交付效率,降低交付周期,提升需求吞吐量,更好的支持为了产品的创新和业务创新发展,那么就需要进行产品系统的精简瘦身。

3.2.2 看清现状

1. 从业务需求分析:如果读者有固定的业务运营团队,这里可以依据业务运营团队进行业务需求分析归纳和整理,以及未来的展望。如果没有业务运营团队,比如是基础能力部门,往往对接的业务方非常多,这里面就面临一个困境:没法与业务沟通,在这里则可以进行以往业务需求分析,比如笔者要讲的这个案例,从以往需求中进行归类,分为需求重灾区和轻灾区。

图3 业务需求分析的角度

2. 从问题空间分析:(1)业务问题:业务方多,业务需求不集中;(2)产品问题:产品对于业务需求把控弱,产品边界模糊,行业缺少成熟方案,产研认知不统一;(3)系统问题:业务模式乱,依赖上下游多,业务流程复杂不易阐述清晰。

图4 问题空间分析的角度

3.2.3 寻求解法

从上面可以看到,如果只是从业务建模其实无法避免上述所有的问题,业务-组织-技术-运营之间关系互相依赖。那么就需要从两个方面解决,一个是组织机制流程方面,可以把它归纳为需求和产品管理;另外一个是系统业务复杂度的治理,则把它归纳为系统管理。

1. 需求和产品管理

从痛点入手,进行产研交付需求流程分析,进行解法归纳,落地工具保障需求的规范合理性执行。

图5 需求和产品管理

2. 系统管理

以上已将需求和产品的问题进行规范化管理,那么对于系统层面的问题和痛点要怎么做呢?这里面就进入了建模能解决的问题,只针对系统层面如何让系统更好的支持业务。

3.3 建模面临的挑战

系统的挑战:系统足够复杂,接近6年的堆砌代码老应用,集团战略需求的重灾区。组织的挑战:团队新组建,新的产研团队,资料老旧且不全。没有头脑风暴的业产研沟通,还需要进行需求的日常交付。9个字表达就是抓重点,搞突破,扩全面。

图6 建模面临的挑战

3.4 如何建模

以现代化企业架构思想为指导,构建业务架构元模型,进行业务、运营、组织和技术的整合,通过流程建模、领域建模、业务身份建模、能力建模进行业务架构的落地。

图7 建模过程

3.4.1 流程建模

从业务运营规则入手,进行流程梳理,将业务逻辑和领域逻辑剥离开,以下图为例,从用户取消订单到最后发起退款。

图8 流程建模

在梳理运营规则的时候,其实已经是将业务流程还原的第一步,但此时要如何划清业务边界呢?可以通过接口契约进行隔离。再来看下图就清晰许多,而业务逻辑和领域逻辑也进行了分离。

图9 通过接口契约划清业务边界

从上面的流程来看其实可以发现有以订单为主的申请、生产单为主的商家/仓储、运单为主的配送、审核单的客服、账单的退款。因此可以简化下本模型,本模型只分为4个逻辑模块,分别是解约申请、解约拦截(商家审核/仓储拦截/配送拦截)、解约审核(客服审核/财务审核)、解约生效(财务退款),该模型就抽象的比较简单了。

图10 简化后的模型

3.4.2 领域建模

构建一个解约单领域模型,来描述下通常会看到的"鸡蛋"。首先将业务领域划分为5个领域,除解约单外,就是上述流程建模中的四个核心子域,申请域、解约域、审核域、生效域。领域对象分为解约申请单、解约拦截单、解约审核单、解约生效单。

图11 构建解约单领域模型的“鸡蛋”

接下来统一业务语言,领域事件活动分析,进行领域服务拆解(这里强调的信息内容与DDD的领域服务略有不同,更强调的是偏微观,比如RPC接口纬度)。

图12 通用语言表

接下来进行领域事件活动分析,并进行领域服务拆解,沉淀领域服务、领域能力、以及不同垂直业务的差异点进行扩展点抽离。

图13 领域事件活动分析

图14 领域服务拆解

借鉴优秀的nginx、asp.net 生命周期管理进行的业务流程设计,也与上述的方式比较相似。

图15 业务流程设计

3.4.3 业务身份与数据建模

业务身份是针对不同业务方的唯一标识,分辨各个业务系统,业务身份分为垂直业务身份和水平业务身份。从业务目标来说:通过业务身份对不同的业务方需求进行业务逻辑隔离,中台以业务身份为主线赋能不同的业务方的各种定制化场景。从技术目标来看:系统运行期定位扩展点的核心依据,每个扩展点的实现与业务身份直接绑定。

明确垂直业务身份定义:能够独立提供商品或者服务,不依赖其他业务条线独立展开经营活动,称之为垂直业务。

明确水平业务定义:不能够独立提供商品或服务,必须依赖其他业务所包含的商品或服务,并且需要结合其他业务规则才能完成完整的经营活动。如秒杀、拼购等。水平业务是未来结构化表达中台沉淀的业务资产的方式。

明确场景定义:场景是垂直业务身份下更细粒度的业务逻辑隔离标识,在业务逻辑差异较少(技术层面上即扩展点有不同实现的数量较少)的情况下,可以使用场景做逻辑隔离,它的使用方式相比垂直业务更加轻量。

垂直业务和水平业务之间业务规则是可以叠加的,发生业务规则冲突时,需要判断业务优先级。而多个垂直业务之间的业务规则是不可以叠加的。一个业务完整规则由一个垂直业务规则+N个水平业务规则叠加而成。

图16 垂直业务和水平业务

业务身份定义好后,进行数据模型映射,举个例子,7鲜业务身份,自营业务身份来进行数据建模,通过垂直、水平、内核来定义。

图17 数据模型映射

3.5 模型的验证

建模以后,很多用户比较苦恼的是模型是否与业务相吻合?再言之,模型是不是1:1的还原了真实的业务活动场景,那么模型的验证或者推演其实就是构建模型的核心。

无独有偶,在快退中,由于笔者扮演多个角色、团队负责人,架构师,还需承担一线研发的需求评估,因此总结出了一套基于消息消息驱动的模型架构,还原了真实业务场景并指导研发的落地。

图18 模型的验证

四、B-PaaS化落地实践

4.1 B-PaaS化工程架构指导

以PaaS化工程架构为基础进行系统架构的升级改造:

图19 系统架构的升级改造

如落地工程架构如下:

图20 落地工程架构

4.2 实际需求案例落地PaaS化

4.2.1 业务流程分析

通过以B商城业务和C商城业务融合单据为点进行流程分析,分析图如下,识别业务域、通用流程和可变点设计,从而辅助构建内核和扩展点的业务逻辑抽离。

图21 业务流程分析图

4.2.2 业务领域活动分析

领域事件拆解,识别领域对象、以及对应的业务子域,辅助研发进行业务和领域逻辑剥离。

图22 业务领域活动分析图

基于领域进行消息驱动开发,落地工程结构代码映射,并通过核心域进行流程编排。

图23 消息与领域映射

4.2.3 业务身份识别

通过藏经阁注册的业务身份进行映射,找到对应本地的系统业务身份解析要素,进行业务ID的识别。

图24 业务身份映射

图25 识别业务ID

五、能力可视化

上节进行了B-PaaS化工程落地实践,最终借助藏经阁进行能力可视化上报,笔者项目是通过注解的方式进行上报。

图26 能力可视化上报

图27 上报配置&注解上报能力

六、总结

通过以上背景、产品、建模、工程化、可视化和实际需求落地B-PaaS工程的案例6个模块,本文整体地介绍了快退平台为什么要进行PaaS化工程改造以及具体是如何实现的架构升级。希望通过本文,可以帮助读者们对于订单逆向履约系统有进一步的认识,同时期望给予读者独自面对复杂遗留系统时候,可以借鉴本文的架构升级改造思路,化解业务、系统复杂度,让系统更高效的支持业务发展。此外,也欢迎读者留言探讨交流,是否遇到过复杂的遗留债务系统以及是如何解决的。

作者:京东零售 刘晓成

来源:京东云开发者社区

订单逆向履约系统的建模与 PaaS 化落地实践的更多相关文章

  1. 一种工业级系统交互建模工具的应用--EventStudio System Designer

    一种工业级系统交互建模工具的应用 [摘要] 本文以探索如何维护大规模复杂系统交互设计模型为目的,以EventHelix公司的商业付费软件EventStudio System Designer为建模工具 ...

  2. 【动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析

    magnitude response:振幅响应 phase response:相位响应 传递函数G(S)为什么将S看成jw化成G(jw)通过[动态系统的建模与分析]8_频率响应_详细数学推导 G(jw ...

  3. [案例分析] 政务云市场面临的复杂格局——重庆政务云模式的启示:多厂商竞争化、PaaS 化

    新闻背景: 2019 年 9 月底,重庆市大数据应用发展管理局发布政务云平台采购公告,预算金额为 5000 万元,以上 4 家入选. 最终项目被项目被阿里云.腾讯云.华为云.紫光云 4 家瓜分. 50 ...

  4. 千万用户级别应用系统背后的SOA组件化容器

    背景 在<我们的应用系统是如何支撑千万级别用户的>随笔中已经从“宏观”角度去介绍了整个应用系统的布局.组件化是整个系统由头到尾都始终坚持的一个设计原则,其中“SOA组件化容器”也是我们应用 ...

  5. atitit. 日志系统的原则and设计and最佳实践(1)-----原理理论总结.

    atitit. 日志系统的原则and设计and最佳实践总结. 1. 日志系统是一种不可或缺的单元测试,跟踪调试工具 1 2. 日志系统框架通常应当包括如下基本特性 1 1. 所输出的日志拥有自己的分类 ...

  6. Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode

    Atitit.软件开发概念说明--io系统区--特殊文件名称保存最佳实践文件名称编码...filenameEncode 不个网页title保存成个个文件的时候儿有无效字符的问题... 通常两个处理方式 ...

  7. 从0系统学Android--2.6 Activity 的最佳实践

    从0系统学Android--2.6 Activity 的最佳实践 本系列文章目录:更多精品文章分类 本系列持续更新中.... 实践中的技巧 2.6.1 知晓当前是在哪个 Activity 这个其实很简 ...

  8. XXX系统业务建模

    1.识别业务参与者 参与者包括管理员.填报人员.审核人员和领导.          2.识别业务用例(用例图展现) 3.详述业务用例(填报需求这一用例,以活动图详细展现如下) 4.建立业务对象模型

  9. 【动态系统的建模与分析】8_频率响应_详细数学推导 G(jw)_滤波器

  10. Android逆向之旅---Android应用的汉化功能(修改SO中的字符串内容)

    一.前言 今天我们继续来讲述逆向的知识,今天我们来讲什么呢?我们在前一篇文章中介绍了关于SO文件的格式,今天我们继续这个话题来看看如何修改SO文件中的内容,看一下我们研究的主题: 需求:想汉化一个Ap ...

随机推荐

  1. CVE-2015-5254漏洞复现

    1.漏洞介绍. Apache ActiveMQ 是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持 Java 消息服务,集群,Spring Framework 等.Apache ...

  2. 安装kafka和zookeeper以及使用

    1.安装zookeeper zookeeper下载:http://zookeeper.apache.org/releases.html 从3.5.5开始,带有bin名称的包才是要下载的包可以直接使用 ...

  3. Django的message组件(源码分析)

    Django的Message组件(源码分析) 1. 配置 # MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackS ...

  4. plotly 坐标轴范围截断rangebreaks使用的一个注意点

    plotly坐标轴截断混合设置且指定设置截断时间的时候需要注意先后顺序 大范围的时间要在小范围的时间前设置,比如日内时间的截断要设置在日期截断的后面 同范围的规则截断要在指定截断前设置,对日期的截断, ...

  5. Windows下cygwin编译redis源码

    准备环境 安装cygwin64 下载地址:https://www.cygwin.com/运行安装程序,一直下一步选择阿里镜像,目前试过163,会比阿里慢需要选择的包有make.pkg-config.p ...

  6. Golang每日一库之regex

    本文地址: https://www.cnblogs.com/zichliang/p/17387436.html Golang日库合集:https://www.cnblogs.com/zichliang ...

  7. 2023-03-24:音视频mp3和h264混合(muxer)编码为mp4,用go语言编写。

    2023-03-24:音视频mp3和h264混合(muxer)编码为mp4,用go语言编写. 答案2023-03-24: 这是一个使用FFmpeg库将MP3和H.264混合编码为MP4的Go语言程序. ...

  8. vue cli3 整合Cesium,处理build 时内存溢出问题

    一直使用cesium,但是都是使用script直接引入的,但是在将其放置在增加路由的子页面中中时会出现一个问题,刷新后提示cesium is undefined 看直接引入cesium.js < ...

  9. adb基本命令

    adb基本命令 adb查看当前设备 adb devices adb覆盖安装app adb install -r 包地址 adb查看当前运行app的包名 adb shell "dumpsys ...

  10. 快速上手kettle(一)壶之简介

    一.前言 最近由于工作需要,需要用到kettle工具进行数据迁移转换.特意找资料学习了一下,kettle基本操作算是学会了. 所学的也结合实际工作进行了验证.为了防止以后用到忘记了,便写了几篇文章记录 ...