订单逆向履约系统的建模与PaaS化落地实践 | 京东云技术团队

news2024/11/23 12:43:17

导读

本文重点介绍了京东零售电商业务在订单逆向履约上面的最佳技术实践,京东零售快退平台承接了零售几乎所有售前逆向拦截和退款业务,并在长期的业务和技术探索中沉淀了丰富的业务场景设计方案、架构设计经验,既能承接面向消费者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化工程改造以及具体是如何实现的架构升级。希望通过本文,可以帮助读者们对于订单逆向履约系统有进一步的认识,同时期望给予读者独自面对复杂遗留系统时候,可以借鉴本文的架构升级改造思路,化解业务、系统复杂度,让系统更高效的支持业务发展。此外,也欢迎读者留言探讨交流,是否遇到过复杂的遗留债务系统以及是如何解决的。

作者:京东零售 刘晓成

来源:京东云开发者社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/777642.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 17 日论文合集)

文章目录 一、检测相关(5篇)1.1 TALL: Thumbnail Layout for Deepfake Video Detection1.2 Cloud Detection in Multispectral Satellite Images Using Support Vector Machines With Quantum Kernels1.3 Multimodal Motion Conditioned Diffusion Model for Skeleton-based Vi…

记录--卸下if-else 侠的皮衣!- 策略模式

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 🤭当我是if-else侠的时候 😶怕出错 给我一个功能,我总是要写很多if-else,虽然能跑,但是维护起来确实很难受,每次都要在一个方法里面增加逻辑…

索引使用——单列索引、联合索引、索引设计原则

1.单例索引和联合索引 尽量使用联合索引,避免使用单列索引,因为使用联合索引性能相对而言会比较高,如果联合索引使用得当,可以避免回表查询,使用单列索引很容易造成回表查询的情况,造成性能降低。 create…

双Bank OTA升级:N32L40X BootLoader (一)

什么是双Bank升级:将Flash划分为以下4个区域。 BootLoader区:程序进行升级的引导程序,根据Upade_Flag来判断程序是跳转Bank1区运行程序或是将Bank2区的程序搬运到Bank1区,然后在运行程序。 Upade_Flag区:判断BootLoa…

OpenCV自带的HAAR级联分类器对脸部(人脸、猫脸等)的检测识别

在计算机视觉领域,检测人脸等是一种很常见且非常重要的应用,我们可以先通过开放计算机视觉库OpenCV来熟悉这个人脸识别领域。另外OpenCV关于颜色的识别,可以查阅:OpenCV的HSV颜色空间在无人车中颜色识别的应用HSV颜色识别的跟踪实…

WAIC2023:图像内容安全黑科技助力可信AI发展

目录 0 写在前面1 AI图像篡改检测2 生成式图像鉴别2.1 主干特征提取通道2.2 注意力模块2.3 纹理增强模块 3 OCR对抗攻击4 助力可信AI向善发展总结 0 写在前面 2023世界人工智能大会(WAIC)已圆满结束,恰逢全球大模型和生成式人工智能蓬勃兴起之时,今年参…

MQTT 与 Kafka|物联网消息与流数据集成实践

MQTT 如何与 Kafka 一起使用? MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,专为受限网络环境下的设备通信而设计。Apache Kafka 是一个分布式流处理平台,旨在处理大规模的实时数据流。 Kafka 和 MQTT 是实现物…

模拟实现atoi函数

请记住那些对你好的人,因为他们本可以不这么做 文章目录 atoi函数介绍 模拟实现 大家好,我是纪宁。 atoi函数,它的功能是将数字字符转化为数字。我第一次见这个函数还是在大一上在刷蓝桥杯的时候,有一个关于回文数字的题&#x…

08.计算机网络——其他重要协议和技术

文章目录 DNSICMPNAT代理服务器 DNS DNS是一整套从域名映射到IP的系统 ​ TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆,于是人们发明域名,其本质是一个字符串,映射了它和IP地址的关系。 …

融合黄金正弦算法和纵横交叉策略的秃鹰搜索算法(GSCBES)-附代码

融合黄金正弦算法和纵横交叉策略的秃鹰搜索算法(GSCBES) 文章目录 融合黄金正弦算法和纵横交叉策略的秃鹰搜索算法(GSCBES)1.秃鹰优化算法2.改进秃鹰优化算法2.1 基于纵横交叉策略2.2 基于惯性权重的位置更新2.3 黄金正弦捕食机制 3.实验结果4.参考文献5.Matlab代码6.python代码…

FreeRTOS-列表和列表项

列表和列表项: 列表是FreeRTOS中的一个数据结构,用来跟踪FreeRTOS中的任务。 列表项就是存放在列表中的项目,属于列表的子集。 列表就相当于一个链表,列表项就相当于节点,在FreeRTOS中的列表是一个双向的环形链表。 …

基于FPGA的视频接口之PAL(NTSC)编码

简介 PAL又称帕尔制,是咱们中国早期视频所是使用的视频广播模式,基本上现在的电视都兼容这种视频模式,使用的接口也是传统的BNC插头,有兴趣的伙伴可以看看电视屁股后面是不是有一个单独的BNC接口,百分之98就是支持PAL格…

FastReport.Net FastReport.Core 2023.2.23 Crack

FastReport.Net & FastReport.Core 2023.2.23适用于 .NET 7、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可用于 Microsoft Visual Studio 2022 和 JetBrains Rider。 利用数据呈现领域专家针对 .NET 7、.NET Core、Blazor、ASP.NET、MVC、Windo…

【Windows】cmd和powershell命令合集

文章目录 1 前言2 一些规则3 cmd命令合集4 bat语法学习5 powershell命令合集6 powershell语法学习 1 前言 在日常使用过程中,总是会遇到不记得或无法区分cmd命令和powershell命令的情况,因为在Windows的工作大部分都是可视化的鼠标点击,用到命…

CLH自旋锁原理

CLH自旋锁 JUC中显式锁基于AQS抽象队列同步器,而AQS是CLH锁的一个变种。 在争夺锁激烈的情况下,为了减少CAS空自旋(CAS需要CPU进行内部通信保证缓存一致性造成流量过大引起总线风暴),Java轻量级锁会升级为重量级锁&a…

大数据学习03-Hive分布式集群部署

系统环境:centos7 软件版本:jdk1.8、zookeeper3.4.8、hadoop2.8.5、hive1.1.0 一、安装 hive官网 下载hive安装包,上传到linux服务器上, 解压安装包 tar -zxvf apache-hive-1.1.0-bin.tar.gz -C /home/local/重命名文件 mv …

腾讯云轻量应用服务器搭建Typecho博客网站全流程

腾讯云轻量应用服务器自带Typecho应用模板镜像,腾讯云提供的Typecho模板镜像是基于CentOS 7.6 64位操作系统,并已预置Nginx、PHP、MariaDB软件程序,使用Typecho应用模板可以快速搭建博客、企业官网、电商及论坛等各类网站。腾讯云服务器网分享…

C# 反转链表

206 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例 3…

Python中的标签编码和独热编码

在机器学习项目中,我们通常处理具有不同分类列的数据集,其中一些列的元素在有序变量类别中,例如列收入水平具有低,中或高的元素,在这种情况下,我们可以用1,2,3替换这些元素。其中1表…

【100天精通python】Day9:数据结构_字典、集合

目录 目录 1 字典 1.1 字典的基本操作示例 1.2 字典推导式 2 集合 2.1 集合的常用操作示例 3 列表、元组、字典、集合的区别 1 字典 在Python中,字典(Dictionary)是一种无序的数据结构,用于存储键值对的集合。每个…