基于xstate实现携程金服业务流程动态化

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

简介

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

方案背景

随着互联网金融的日益壮大,传统银行与互联网公司合作寻求共赢成为一种常见的模式。携程作为在线旅游的领导者也主动顺应这一潮流,积极开拓了金融服务领域的业务。在具体应用中,某场景需要对用户资格进行在线审核。熟悉金融相关业务的开发人员应该知道,在线审核一般包含多个步骤与判断,是个比较复杂的流程。这些流程,步骤和判断都需要与一定国家的法律、规则和准则相一致,简称合规。当政策发生变化,系统也会必然随之调整以做到继续保持合规。传统的做法一般是通过代码来实现审核流程,升级的办法主要是修改代码,测试和重新发布。这种做法在携程这种量级的系统里无疑是极具挑战性的,具体表现在以下几个方面:

  1. 开发与维护难度大。传统的开发方式是用代码来实现合规,在合规逻辑本身比较复杂,条件判断复杂的情况下,通过读代码的方式来理解和修改系统非常低效。复杂代码往往非常难以理解和维护,修改老系统非常容易破坏正确逻辑或者引进新的bug,导致开发质量低下。
  2. 上线时间难以保证。新合规的出现是无法预测的,而某些新合规往往会规定较紧迫的上线时间。在开发工作安排的非常饱满,开发进度非常紧张的时候,为新合规上线划拨资源,安排进度从项目管理角度是上线很困难的事情。甚至曾经出现过虽然国家发布了新合规和规定了上线时间,但由于各个公司实在无法按时上线,最终国家不得不推迟上线时限的情况。
  3. 无法保证系统质量。现代互联网公司往往是大规模并行开发,有固定的发布节奏,并且一次发布多个功能同时上线是常态。这种情况下,新合规功能可能会与有缺陷的功能一同上线,当缺陷版本回退的时候,会导致合规功能一起回退,从而影响新合规的实际上线时间节点和效果。

简而言之,携程金服团队希望合规开发能降低成本,缩短周期;合规维护能做到快速理解,修改和验证现有系统;合规发布能精准,高效,影响面小,不可控干扰因素少;合格回退能独立实时,副作用小。理想情况下,最好能够做到不停机发布。

解决方案

金融团队的技术leader在评估各种方案时,也向携程框架部门寻求了技术支持。根据他们的需求,我向他们推荐了xstate。

 5168b4f49401114306ec30f283560e6a8740cce6

xstate是一个基于状态机模型的开源框架,利用与IDE紧密结合的模型编辑器,用户可以用可视化的方式直观地开发模型。xstate编辑器的功能非常完备,可以灵活地构建任意的复杂模型,模型存储格式为XML。xstate引擎对运行环境无特殊要求,可以内嵌到任意容器或单独运行。为了适应各种使用场景,xstate引擎提供了灵活多样的模型数据读取方式,包括读取file,url,classpath甚至stream等。

相对于类似框架,xstate的优点在于:

  1. 二次开发工作量小。Xstate的开发非常轻量级,即可以在不写一行代码的情况下实现一个功能完备的状态机,必要时也可以利用定义良好的接口实现灵活扩展。
  2. 概念简洁完备。Xstate仅仅包含状态机,状态,变迁,事件等最少核心概念。而很多类似产品的模型过于复杂,包括很多与核心模型无关的辅助模型。例如role,人员,组等。往往要完成繁琐配置才能真正用起来。
  3. 开发环境友好。Xstate的编辑器紧密结合在用户熟悉的主流开发环境里。用户无需离开当前开发环境,无需在多个不同的编辑器中切换。类似产品往往是与IDE无关的独立的编辑器。
  4. 使用方便。Xstate的产出只是模型文件。而且提供多种灵活的读取方式。类似产品往往依赖数据库,环境部署复杂。

在进一步沟通了解之后,携程金融团队认为该框架符合他们的各项要求,并在现有系统改造和新合规发布中加以采用。

使用效果

采用xstate后,当新合规下发时,开发人员一般只需在IDE里面打开已有xstate模型文件,在交互式的图形编辑器里面以所见即所得的方式修改状态机即可完成开发。测试人员可以通过状态机的可视化模型进行直观的理解和验证测试。测试通过后,模型可以单独发布到携程的配置中心,无需应用重新发布或重启。应用在监听到变更请求的时,通知xstate引擎读取新的模型数据并创建模型,即可实现合规的在线发布或升级。

使用xstate后,合规的开发与维护做到了简单高效,发布做到了灵活即时,最终的实际效果让用户很满意。同时xstate还吸收了用户在使用过程中提出的改进意见,促进了框架的进一步完善。合作做到了双赢。

Xstate使用心得

最近需要对目前的业务进行重构,考虑引入类工作流来完成业务流程。对比了好几款工作流引擎,如activiti,JBPM等,最后选择了Xstate来作为重构业务流程方案。

对比的几款开源软件都能完成我的业务需求,最终选择Xstate理由有以下几点:

1,无环境依赖

对数据库,环境都无特殊要求。相比其余的引擎需要一系列的搭建工作,如建表,编写配置文件等,Xstate只需引入jar包就可直接使用。

2,快速上手

一款框架产品可以快速上手是非常重要的。Xstate是一款非常轻量级的基于状态机的框架,通过阅读文档,运行sample即可快速了解整个框架的运作机制,从而进行自己的开发工作。十分符合目前互联网环境快速迭代的开发节奏。

3,快速融入现有系统

Xstate提供了状态扭转所需要的所有基本步骤,使用配套的可视化工具可以快速搭建一套包含各个业务节点的工作流。通过简单配置可以迅速绑定节点和指定业务代码的关系,无需对已有的业务代码进行重构。这大大降低了二次开发的成本。

4,可视化工具

Xstate配套有Xtools工具,通过可视化界面,快速完成功能设计,同时如上述第三点,通过配置节点和业务代码的关系,简单的操作就串起整个业务流程。

总结:

Xstate是一款可以快速上手的基于状态机的框架。很适合使用在各个有多个状态流转的业务场景中,满足多状态节点的互相流转。

目前我重构的业务功能已经完成,流程如下图。

a712910ac08c1341872252dd9aa549a2b9595380

原文发布时间为:2018-01-12

本文作者:赫杰辉&怀立德

本文来自云栖社区合作伙伴“中生代技术”,了解相关信息可以关注“中生代技术”微信公众号

相关文章
|
8月前
|
存储 人工智能 边缘计算
Gartner 魔力象限:数据中心网络交换机 2025
Gartner 魔力象限:数据中心网络交换机 2025
571 0
Gartner 魔力象限:数据中心网络交换机 2025
|
5月前
|
存储 人工智能 数据挖掘
StarRocks Connect 2025 圆满落幕:AI Native 时代,数据分析未来已来
StarRocks Connect 2025 聚焦“连接”,汇聚全球技术领袖,探讨数据分析的现在与未来。从性能引擎到AI Native平台,StarRocks 持续进化,赋能 Shopee、携程、Cisco 等企业实现高效实时分析,并推动开源生态与商业化协同发展。
|
机器学习/深度学习 存储 自然语言处理
从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
1343 4
|
Ubuntu TensorFlow 算法框架/工具
NVIDIA Triton系列05-安装服务器软件
本文介绍了NVIDIA Triton推理服务器的安装方法,涵盖源代码编译、可执行文件安装及Docker容器部署三种方式。重点讲解了在NVIDIA Jetson AGX Orin设备上的安装步骤,适合Ubuntu 18及以上系统。通过检查HTTP端口状态确认服务器运行正常,为后续客户端软件安装做准备。
1030 0
NVIDIA Triton系列05-安装服务器软件
|
机器学习/深度学习 编解码 定位技术
【小样本图像分割-2】UniverSeg: Universal Medical Image Segmentation
UniverSeg是一种用于医学图像分割的小样本学习方法,通过大量医学图像数据集的训练,实现了对未见过的解剖结构和任务的泛化能力。该方法引入了CrossBlock机制,以支持集和查询集之间的特征交互为核心,显著提升了分割精度。实验结果显示,UniverSeg在多种任务上优于现有方法,特别是在任务多样性和支持集多样性方面表现出色。未来,该方法有望扩展到3D模型和多标签分割,进一步提高医学图像处理的灵活性和效率。
445 0
【小样本图像分割-2】UniverSeg: Universal Medical Image Segmentation
余三码和8421码的关系以及使用场景
余三码与8421码是两种不同的二进制编码方式,常用于表示十进制数。余三码是8421码加上3形成的无权码,具有自补性和进位信号特点,适合错误检测,但求和需修正。8421码是恒权码,方便二进制与十进制转换,常用于数字显示、数据传输和精确十进制运算。在计算机领域,两者各有应用场景,如BCD码用于七段显示器和精确计算,余三码则用于错误检测和简化算术操作逻辑设计。
2395 21
|
消息中间件 存储 NoSQL
18)Redis 的发布订阅模型
18)Redis 的发布订阅模型
244 0
|
算法 搜索推荐
信息流短视频时长多目标优化
背景       信息流短视频排序目前使用的是基于CTR预估Wide&Deep排序模型。在此基础上继续一系列优化,通过引入相关性信号、体感信号、多场景的样本融合、高层排序模型取得了不错收益。       信息流短视频模型优化可分为两部分优化: 感知相关性优化——点击模型以优化(CTR/CLICK为
8556 0
|
Java Spring 程序员
Spring Cloud Gateway 之 服务注册与发现
上几篇主要讲解了网关在单个服务的使用,在实际的工作中,服务的相互调用都是依赖于服务中心提供的入口来使用,服务中心往往注册了很多服务,如果每个服务都需要单独配置的话,非常麻烦。Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所有服务,下面就具体讲解下。
3569 0
|
人工智能 算法 搜索推荐