AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

评论

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

网络协议之:redis protocol详解

程序那些事

网络协议 程序那些事 6月月更

喜报|海泰方圆通过CMMI-3资质认证,研发能力获国际认可

电子信息发烧客

华为发布两大昇腾计划 推动AI人才发展和科研创新

郝俸🦁好棒

昇腾

中断操作:AbortController学习笔记

zhoulujun

web内容如何保护:如何有效地保护 HTML5 格式的视频内容?

zhoulujun

DRM 视频版权保护 数字版权保护 h5视频版权

新一代构建工具(1):对比rollup/parcel/esbuild—esbuild脱颖而出

zhoulujun

Rollup webpack esbuild

社招两年半10个公司28轮面试面经(含字节、拼多多、美团、滴滴......)

CoderW

Java 面试 简历模板 大厂

Wireshark网卡无法找到或没有显示的问题

岚哲

网络 Wireshark 域名 vpn 网卡

TML转义字符:xss攻击与HTML字符的转义和反转义

zhoulujun

XSS xss攻击 转义字符 反转义

微博评论的计算架构

极客土豆

Java中的字符串之字符串常量池

未见花闻

6月月更

Flutter 网络请求封装之Dio(Cookie管理、添加拦截器、下载文件、异常处理、取消请求等)

yechaoa

flutter android 6月月更 dio

HotSpot JVM 「01」类加载、链接和初始化

Samson

学习笔记 hotspot 6月月更

SDN系统方法 | 10. SDN的未来

俞凡

架构 网络 sdn SDN系统方法

Tiger DAO VC产品正式上线,Seektiger生态的有力补充

鳄鱼视界

Pipenv中安装Django

宇宙之一粟

django 6月月更

数据治理,说起来容易,做起来难

奔向架构师

数据治理 数据资产 6月月更

源码其实很简单!阿里巴巴最新出品Spring学习脑图+视频+文档真香

Java全栈架构师

Java spring 源码 程序员 面试

居家办公让我绩效拿了C | 社区征文

大菠萝

初夏征文

Java内存模型

卢卡多多

volatile 6月日更

微服务之consul初体验

迷彩

微服务 中间件 Consul 微服务治理 6月月更

TLog 助力盘古框架实现微服务链路日志追踪

码农大熊

盘古开发框架

面对AI人才培养的“产学研”鸿沟,昇腾AI如何做厚产业人才黑土地?

脑极体

Maven 基础

zarmnosaj

6月月更

六大专题全方位优化,阿里巴巴性能优化小册终开源,带你直抵性能极致

Java全栈架构师

Java 程序员 面试 性能优化

什么是算子?

华为云开发者联盟

人工智能 算子

IET出席2022世界科技社团发展与治理论坛 为构建国际科技共同体献言献策

E科讯

先到先得!“阿里爸爸”全新出品SpringBoot高级笔记(全彩版)

Java全栈架构师

Java 源码 程序员 面试 springboot

《网络是怎么样连接的》读书笔记 - 集线器、路由器和路由器(三)

懒时小窝

网络编程 网络

MyBatis 执行流程及源码解析

码农参上

mybatis java实战

揭秘GES超大规模图计算引擎HyG:图切分

华为云开发者联盟

人工智能 图计算 图切分

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