写点什么

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

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

评论

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

TypeScript里string和String,真不是仅仅是大小写的区别

华为云开发者联盟

JavaScript typescript string ts

EventBridge 事件总线及 EDA 架构解析

阿里巴巴云原生

性能指标、响应时间、并发量…聊聊性能优化的衡量指标

华为云开发者联盟

性能优化 高并发 响应时间 性能指标 并发量

女性开发者为您解读数据库的未来机遇与挑战

亚马逊云科技 (Amazon Web Services)

Hero 专栏

华为云企业级Redis揭秘第17期:集群搭载多DB,多租隔离更降本

华为云开发者联盟

数据库 redis 集群 GaussDB(for Redis) 多DB

4种典型限流实践保障应用高可用|云效工程师指北

阿里云云效

云计算 阿里云 云原生 系统安全 研发

【Zeekr_Tech】为自动驾驶保驾护航—谈谈主流中间件设计

Zeekr_Tech

自动驾驶 软件架构

阿里云云原生应用平台总经理丁宇:“连接、合作、赋能”,携手加速器伙伴助力企业云上创新

阿里巴巴云原生

NextArch基金会微服务技术组成立,腾讯为创始单位之一

科技热闻

数字经济“双碳”目标下,“东数西算”数据中心为何依靠液冷散热技术节能减排?

GPU算力

东数西算 GPU服务器

OpenHarmony 标准系统 HDF 框架之 I2C 驱动开发

Anna

开源 后端 直播 OpenHarmony I2C

Flink 在米哈游的落地实践

Apache Flink

大数据 flink 编程 流计算 实时计算

尚硅谷监控告警系统(Zabbix)视频教程发布

@零度

大数据 zabbix

大数据培训Flink中常见问题定位

@零度

大数据 flink

平衡树:为什么Redis内部实现用跳跃表

华为云开发者联盟

redis 数据结构 集合 跳跃表 平衡树

关于 Nvm

隔壁的猫

node.js 前端 NVM 3月月更

面试官:你在项目中用过 多线程 吗?

田维常

Java 开发 多线程编发编程

超级app+轻应用=未来?

發財KK

移动应用 轻应用 快应用 App生态

数盾科技加入,携手龙蜥社区提升网络安全整体防护能力

OpenAnolis小助手

开源 网络安全 数盾科技 密码算法

web前端培训JS解构赋值知识点分享

@零度

JavaScript web前端

DevSecOps邂逅云原生:云原生时代下的持续安全

火线安全

DevOps 云原生 云安全 云原生安全

阿里云 VPC 内网性能测试最佳实践

阿里巴巴云原生

浅谈SaaS多租户数据隔离和共享

数商云

SASS

java培训SpringBoot性能优化

@零度

Java springboot

有奖互动|中国信通院联合 OceanBase 邀您参加《数据库发展研究报告(2022)》调研问卷

OceanBase 数据库

产品经理必看的高效产品文档撰写指南

小炮

产品文档

小程序加入智能家居行业,共创未来美好生活

發財KK

物联网 小程序容器 智慧生活 全屋智能 智能家居生态平台

面试官:你在项目中用过 多线程 吗?

田维常

面试 java面试

技术平台&应用开发专题月 | 国产化替代的本质是价值替代

用友BIP

用友 用友iuap

都是让小程序在app运行,FinClip 与 uniapp有什么区别?

發財KK

小程序 uni-app 前端开发 sdk

Android技术分享|【自定义View】实现Material Design的Loading效果

anyRTC开发者

android 音视频 移动开发 自定义view loading

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