QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

如何实现金服业务流程动态化

  • 2018-01-10
  • 本文字数:2705 字

    阅读完需:约 9 分钟

本文通过介绍携程在互联网金融服务领域如何解决业务流程合规、快速和高效落地的问题,提出了一种基于开源框架 xstate 的工作流实施和动态调整方案。这种方案适合需要在线流程升级的应用,包括金融、证券、电商、政务和物流等行业领域。

背景

用户资格在线审核是个复杂的流程,包含多个步骤与判断。这些流程,步骤和判断都必须符合一定国家的法律、规则和准则,简称合规。之前的做法是通过代码来硬编码审核流程的逻辑。当政策发生变化时,为了继续保持合规必须修改代码,测试和重新发布。这种做法的困难之处在于:

  • 开发与维护难度大。对复杂逻辑做硬编码会导致对应的代码也非常复杂。通过读代码的方式来理解系统很困难,而修改老系统非常容易破坏正确逻辑或者引进新的 bug,这种系统一般没人愿意接手。
  • 上线时间难以保证。新合规何时出现是无法预测的,而出现时却往往会规定较紧迫的上线时间。在开发任务非常饱满,开发进度非常紧张的时候,很难为新合规上线调整计划。据说曾经出现过新合规虽然发布并规定了上线时间,但由于各个公司实在无法按时完成开发,最终不得不推迟上线的情况。
  • 无法保证系统质量。现代互联网公司往往是大规模并行开发,有固定的发布节奏,并且一次多个功能同时发布上线是常态。这种情况下,新合规功能可能会与有缺陷的功能一同上线,当缺陷版本回退的时候,会导致合规功能一起回退。这种功能间的耦合必然会影响上线效果。

由于老办法有上述这些问题,携程金服团队准备对目前的业务进行重构,考虑引入类工作流来完成业务流程。

解决方案

在金融团队评估各种方案时,我向他们推荐了 xstate,一个轻量级状态机编辑和运行框架。它是 x-series 快速开发框架中的一个组件。

xstate 包括一个基于 Eclipse 的可视化模型编辑器和一个独立的引擎。用户在 Eclipse 里用 xstate 定制的状态图编辑器构建模型文件;应用程序调用 xstate 引擎读取模型文件并在内存中创建状态机实例;运行时通过生成事件来触发实例的状态变迁,从而实现流程的推进并触发相应逻辑。

xstate 仅包含状态、变迁、事件和触发器等和状态机直接相关的最小核心概念。即可以不写一行代码实现一个可以运行的状态机,又可以用自定义的触发器灵活扩展和组织复杂逻辑。

对比其它工作流引擎,如 activiti,JBPM,虽然这几款开源软件都能完成业务需求,但 xstate 有以下几个特点:

  • 无环境依赖。对数据库和环境都无特殊要求。相比其它引擎需要一系列的搭建工作,如建表、编写配置文件等,xstate 只需引入 jar 包就可直接使用。
  • 快速上手。一款框架产品可以快速上手是非常重要的。xstate 是一款非常轻量级的基于状态机的框架,通过阅读文档,运行 sample 即可快速了解整个框架的运作机制,从而进行自己的开发工作,十分符合目前互联网环境快速迭代的开发节奏。
  • 快速融入现有系统。xstate 提供了状态变迁所需要的所有基本步骤,使用配套的可视化工具可以快速搭建一套包含各个业务节点的工作流。通过简单配置可以迅速绑定节点和指定业务代码的关系,无需对已有的业务代码进行重构。这大大降低了二次开发的成本。
  • 可视化。xstate 配套的工具包括可视化界面,能快速完成功能设计,同时如上述第三点,通过配置节点和业务代码的关系,简单的操作就串起整个业务流程。

高度集成、可视化的开发环境

xstate 的开发宗旨是要打造一个高度集成、可视化的开发环境,让用户在开发过程中无需在不同的环境中来回切换,减少工作中的停顿,从而高效工作。因此 xstate 被开发为基于 Eclipse GEF 技术的插件。Eclipse 对插件有一套完整的框架进行管理,用户只需按照标准安装步骤简单地将插件安装到 Eclipse 中,就会拥有一个与 IDE 紧密结合的工作环境。

具体安装步骤可以参考安装指南:

https://github.com/hejiehui/xross-tools-installer#安装步骤

由于 xstate 的开发主要用到 Eclipse 的 GEF 技术。为了方便大家理解,这里简要的介绍一下 GEF。GEF(Graphical Editing Framework)是一个图形化编辑框架,它允许开发人员以图形化的方式展示和编辑模型,从而提升用户体验。

GEF 最早是 Eclipse 的一个内部项目,后来逐渐转变为 Eclipse 的一个开源工具项目,Eclipse 的不少其它子项目都需要它的支持。有很多应用天然适合图形化展示,包括 UML 类图编辑器、图形化 XML 编辑器、界面设计工具以及图形化数据库结构设计工具等等。

GEF 的优势是提供了标准的 MVC(Model-View-Control)结构,开发人员可以利用 GEF 来完成以上这些功能,而不需要自己重新设计。与其他一些 MVC 编辑框架相比,GEF 的一个主要设计目标是尽量减少模型和视图之间的依赖,好处是可以根据需要选择任意模型和视图的组合,而不必受开发框架的局限。

GEF 模型只与控制器打交道,而不知道任何与视图有关的东西。为了能让控制器知道模型的变化,应该把控制器作为事件监听者注册在模型中,当模型发生变化时,就触发相应的事件给控制器,后者负责通知各个视图进行更新。

GEF 控制器是模型与视图之间的桥梁,也是整个 GEF 的核心。它不仅要监听模型的变化,当用户编辑视图时,还要把编辑结果反映到模型上。举个例子来说,用户在数据库结构图上删除一个表时,控制器应该从模型中删除这个表对象、表中的字段对象、以及与这些对象有关的所有连接。

在这个案例中,用户可以利用 xstate 对审核流程建模,并用 xstate 在线上实际运行流程处理和逻辑判断。在进一步沟通了解之后,携程金融团队认为该框架符合他们的各项要求,并在现有系统改造和新合规发布中加以采用。

效果

采用 xstate 后,当新合规下发时,大部分情况下,开发人员只需在 IDE 里面打开已有 xstate 模型文件,在交互式的图形编辑器里面以所见即所得的方式修改状态机即可完成开发。测试人员可以通过状态机的可视化模型进行直观的理解和验证测试。

测试通过后,模型可以单独发布到携程的配置中心,无需应用重新发布或重启。应用在监听到变更请求时,通知 xstate 引擎读取新的模型数据并创建模型,即可实现合规的在线发布或升级。

使用 xstate 后,合规的开发与维护做到了简单高效,发布做到了灵活即时,最终的实际效果让人满意。

下图是一个业务功能重构中,流程图在 xstate 中的显示效果:

同时 xstate 还吸收了用户在使用过程中提出的改进意见,促进了框架的进一步完善,取得了双赢的效果。

作者简介

赫杰辉,开源框架 x-series 作者,携程 dal 框架贡献者,认为传统开发模式已经无法适应新的时代,相信开发工具是提高效率和质量的关键因素。业余时间喜欢玩躺车,单鳍脚蹼等古怪玩意。

怀立德,从事金融行业技术 10 年,对能让设计、开发工作变得更轻松的技术都有兴趣。毕生最大的目标就是如何让程序猿变得更懒,如今随着体重的逐渐上升,已略有小成。

感谢雨多田光对本文的审校。

2018-01-10 17:093200

评论

发布
暂无评论
发现更多内容

HashMap

爱好编程进阶

Java 程序员 后端开发

兼容PyTorch,25倍性能加速,OneFlow“超速”了

OneFlow

人工智能 深度学习 性能优化 oneflow

01-Linux 系统简介

爱好编程进阶

程序员 后端开发

95% 的算法都是基于这 6 种算法思想

爱好编程进阶

Java 程序员 后端开发

apache,httpd服务启动报错解决方法【linux用日志排错方法

爱好编程进阶

Java 程序员 后端开发

线程简介

急需上岸的小谢

5月月更

如何使用Tomcat实现WebSocket即时通讯服务服务端

华为云开发者联盟

html5 spring tomcat 浏览器 websocket

2021腾讯最新面经总结:面试题库+实战笔记

爱好编程进阶

Java 程序员 后端开发

为什么企业一定要拥有知识管理的能力

小炮

企业知识管理

2021秋招必刷题:Redis+Mybatis

爱好编程进阶

Java 程序员 后端开发

25 网站应用攻击与防御

爱好编程进阶

Java 程序员 后端开发

Day163

爱好编程进阶

Java 程序员 后端开发

Java JVM知识汇总

爱好编程进阶

Java 程序员 后端开发

云网资源如何搭乘「数字孪生」的快车道?

鲸品堂

数字孪生 设备 云网资源

浪潮云x乡村振兴:在烟台 十字融合勾勒数字乡村全新蓝图

云计算

音视频行业玩家必读,如何实现生态合作+商业变现

华为云开发者联盟

音视频 华为云 实时音视频 实时音视频行业加速器 华为云SparkRTC

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

爱好编程进阶

Java 程序员 后端开发

60KX17薪的面试题是什么样的,需要具备什么技术?首发

爱好编程进阶

Java 程序员 后端开发

brew使用记录

爱好编程进阶

Java 程序员 后端开发

8年开发架构师浅析SpringBoot的JVM的内存占用与Docker-spring

爱好编程进阶

Java 程序员 后端开发

java SpringMVC Filter登录拦截器

爱好编程进阶

Java 程序员 后端开发

异构资源交付效率提升50%,这家头部券商是如何做到的?

BoCloud博云

证券 案例 云管理平台

npm install过程中遇到typings deprecated的warning该怎么处理

华为云开发者联盟

typescript 前端 npm typings.json

知名整机厂商中科曙光加入,携手龙蜥社区共建应用生态

OpenAnolis小助手

龙蜥社区 CLA 龙腾计划 中科曙光

网站开发进阶(五十三)浅谈JS、Ajax、JQuery之间的关系

No Silver Bullet

JavaScript jquery ajax 5月月更

appiun滑动的简单封装

爱好编程进阶

Java 程序员 后端开发

AI 顶会 NeurIPS 收录:淘系技术自研3D AI 算法

爱好编程进阶

Java 程序员 后端开发

IDEA整合jeesite4

爱好编程进阶

程序员 后端开发

NFT 智能合约中的元数据(Metadata)

devpoint

区块链 智能合约 元数据 NFT

新作!分布式系统韧性架构压舱石OpenChaos

华为云开发者联盟

Serverless 容器 分布式系统 混沌工程 OpenChaos

12-Redis持久化

爱好编程进阶

Java 程序员 后端开发

如何实现金服业务流程动态化_语言 & 开发_赫杰辉_InfoQ精选文章