乐趣区

关于后端:提升团队运营效率交易履约之订单中心实践

本文作者:京东科技 - 市场与平台经营核心 - 平台研发部,晏银喜、张学君、袁宝龙、高传江、杨迎心、游斌平、付达。

特别感谢:杨广兴、张然、姬英泽、赵宁、张彤,在零碎建设过程中的奉献。

1、概述

1.1 交易履约是什么?

首先定义下什么是交易履约,交易履约是在甲乙双方达成交易产生订单后,乙方依照订单条款为甲方提供服务或交付约定物的行为。

1.2 交易履约订单核心是个什么零碎?

交易履约订单核心为履约行为提供必要的零碎能力撑持,交易履约订单核心记录了交易流通的过程和状态,包含交易主体、产品信息、成交金额、计费、领取、业务信息等全流程信息,为上下游提供数据标准化、选集数据查问和串联流程的性能。目前已接入的场景有:京音业绩匹配、交易数据看板、京音线上化结算、交易流程串联等。目前交易履约订单核心年订单量 1.5 亿 +,在电销、企微、金店、开放平台、用户增长等场景下,无效反对了消金、财产、保险、领取、分期商城等各大业务线的线上、线下的业务倒退。

2、名词解释

数据起源: 交易数据的起源,蕴含业务信息、联系人、数据接入协定等。

订单模版: 交易履约订单核心采纳泛化的格局存储交易数据,针对每个交易场景配置一个订单模版,模版上配置映射规定来解析数据。

跟单: 履约订单核心接管满足某些条件的交易数据。

补单: 当数据源的数据不残缺或不满足业务场景需要,履约订单核心申请内部接口来补充交易数据。

推送模版: 履约订单核心将交易数据推送到上游零碎。

3、设计实现

3.1 整体架构

整体架构次要分成四个局部(如下图的蓝色局部),根据高内聚、低耦合的设计准则,每个分层只专一解决本人的业务逻辑,分层之间通过 MQ 音讯驱动数据流转。

接管层: 负责接管上游产品层的交易数据,目前反对 MQ 音讯和杰夫接口两种协定。

数据处理层: 负责对数据进行解析、幂等判断、交易时序判断、补充数据完整性、映射订单模型等。

数据推送层: 负责对数据依照指定的规定格式化、推送到上游零碎,目前反对 MQ 和杰夫两种协定。

查问服务: 负责数据的查问和导出。

3.2 业务接入配置化

通过对整体架构的设计和形象当前,咱们发现各个业务线的数据处理流程具备高度的一致性:数据接管、数据处理、数据推送,而在不同的业务线产品的交易场景下会存在一些特定的差别,比方,只接管满足某些条件的交易数据、金条借款的订单与基金购买的订单模型不同、只有满足某些条件的数据才推送给结算零碎等。为了进步业务的接入效率、升高接入老本,咱们形象了一套通用的数据处理流程,流程中的分支通过条件表达式来辨认,同时提供一套残缺的配置化页面供产品和经营同学应用,最终实现了业务接入配置化、自助化,如下图:

3.2.1 配置数据起源和订单模版

数据接管层通过配置的数据起源协定编码路由到订单模版,不同的业务产品交易场景会配置不同的订单模版。

3.2.2 配置模版内容

在数据的解决环节,咱们要解决不同数据起源的数据解析、模型映射、幂等判断、时序判断等问题,不同起源的差异化咱们通过配置化来反对,如下图所示的配置内容,将要解析的数据配置成 JsonPath,数据处理程序通过读取字段类型是“交易单号”的配置,来解析交易单号并实现幂等判断;通过读取“交易工夫”的配置,来解析并实现数据时序的判断。

Fastjson 1.2.0 之后的版本反对 JSONPath, 能够在 java 框架中当作对象查询语言(OQL)来应用。

// 解析贷款单号
Object loanId = JSONPath.extract(jsonStr, "$.jt_df_success.loanId");
// 解析还款单号
Object loanNo = JSONPath.extract(jsonStr, "$.jt_repayment.taskData.loanNo");

3.2.3 配置表达式

后面提到过,在通用的数据流程中存在这样的分支流程:当满足肯定条件时做某些事件,具体的条件依据业务场景的诉求确定,要做的事件是能够枚举和形象的,比方过滤订单音讯或者调用某个服务等。这种场景相似于一个轻量级的规定引擎,咱们通过开源的 MVEL 类库来实现这个表达式引擎(特点:灵便、性能高、无类型限度)。下图所示为一个过滤音讯的配置示例:

MVEL 类库在订单核心次要的利用场景是对预配置的表达式进行逻辑运算。

 Object result = MVEL.executeExpression("$actExt3$=='SECOBT_JD'&&$accountType$==21", context);

3.3 业务交易明细看板配置化

咱们提供了通用的数据查问接口和通用的查问页面,来满足数据检索的诉求。针对不同业务产品的交易场景,上游零碎都有个性化的查问诉求,比方那些字段须要作为查问条件、哪些字段要在列表页展现、哪些字段须要导出等,相似这样的个性化诉求咱们一样是通过配置化来反对的,如下图的配置示例所示:

通用的查问页面通过切换业务线来联动更新查问条件和列表字段:

3.4 业务数据推送配置化

咱们也具备将上游产品层的数据转发给上游零碎的能力,目前反对杰夫接口和 MQ 音讯两种协定,针对上游接口标准不对立的状况,咱们同样通过配置化的形式来反对:

上游接口的字段能够灵便配置,推送程序运行时解析推送配置,以交易数据为上下文组装推送参数,泛化调用上游接口。

4、布局

交易履约订单核心通过 2 年的建设与推广应用,曾经实现了零碎的根本能力建设,通过配置化能满足少数交易场景的数据接入需要。然而对于经营效率晋升、数据核查与告警等需要反对的还不欠缺,为了更好的施展零碎价值,进一步晋升经营效率,交易履约订单核心有以下几个方面的布局:

欠缺配置化性能: 优化配置页面交互方式,升高应用门槛、进步经营效率。

晋升稳定性: 建设熔断机制、应急响应机制等。

晋升数字化能力: 建设反对更多维度的数据看板、建设数据核查与告警机制。

退出移动版