【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

  • 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:092854

评论

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

燃烧吧!开发者们,一起在云端构建开放成熟的 ARM 生态!

亚马逊云科技 (Amazon Web Services)

史上超强拷贝仓——GitHub 热点速览 v.21.11

HelloGitHub

GitHub 开源

你的头发还好吗?大数据分析脱发城市哪里强

不脱发的程序猿

大数据 程序员 程序人生 数据分析 3月日更

几个你不知道的dubbo注册中心细节

捉虫大师

zookeeper dubbo 注册中心

Apache Oozie 深入原理讲解

五分钟学大数据

大数据 28天写作 3月日更 oozie

滚雪球学 Python 之内置 random 模块

梦想橡皮擦

28天写作 3月日更

哪有简单的满足——自我决定论

Justin

心理学 28天写作 游戏设计

掌握了开源框架还不够,你更需要掌握源代码

华为云开发者联盟

开源 Element 源代码 Vue 3

第一个mybatis程序,实现CRUD

xiezhr

mybatis 中间件 crud

OpenCV萌新福音:易上手的数字识别实践案例

华为云开发者联盟

OpenCV 图像处理 数字 图像预处理 信用卡

不愧为Java程序员福音 2021阿里巴巴中台架构实战重磅来袭!

比伯

Java 编程 架构 面试 程序人生

初识Golang之声明变量

Kylin

读书笔记 3月日更 21天挑战 Java转go Go 语言

办公自动化:Day01

缭乱地男神

办公自动化 IT蜗壳教学

白话解读 WebRTC 音频 NetEQ 及优化实践

阿里云视频云

阿里云 音视频 WebRTC 音频技术 视频云

APP搜索如何又快又准?

华为云开发者联盟

elasticsearch App 搜索 云搜索 词库

前端开发:Mac环境的Chrome浏览器设置跨域请求的SameSite解决方法

三掌柜

vue.js 大前端 3月日更

协助市场监督管理局,打造质量基础设施“一站式”服务平台

源中瑞-龙先生

JVM笔记--如果你写JVM,最需要考虑的重要结构是什么?

秦怀杂货店

Java JVM

Rancher 2.5.6发布,支持Kubernetes 1.20

Rancher

大作业--联合运营平台

ALone

为什么MySQL不推荐使用子查询和join

Java小咖秀

MySQL MySQL优化

EFT是什么?EGG公链又是什么?一文带你了解

币圈那点事

公链 挖矿 #区块链#

我帮大厂做架构之——微信的“N个朋友读过”怎么实现

臧萌

成长 架构师 职场成长

Java面试“圣经”,已助朋友拿到7个Offer!2021年金三银四面试知识点合集

Java架构追梦

Java 阿里巴巴 面试 架构师

【LeetCode】螺旋矩阵 II Java 题解

Albert

算法 LeetCode 28天写作 3月日更

带你全面认识CMMI V2.0(二)

IPD产品研发管理

项目管理 CMMI

语音通话 2.0

anyRTC开发者

音视频 WebRTC RTC 语音通话

看了 GitHub 上的这些面试题项目后,我飘了!

JackTian

GitHub 开源 面试

网易 Duilib:功能全面的开源桌面 UI 开发框架

有道技术团队

开源

华为在数字化浪潮下的API变革实践

华为云开发者联盟

华为 架构 数字化 API API战略

软件匠艺

Teobler

敏捷 敏捷开发 软件匠艺 伪敏捷

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