作者:京东科技 常姜洲
一、背景
近期参加公司组织的极客中餐厅训练营,我们所在的小组接到的课题是微服务的低代码平台架构设计。目标是:结合京东业务研发实际情况,针对后端研发人员,设计一个微服务低代码平台,助力更高效低交付业务需求。现已结业,将我在本次项目中沉淀设计出的设计文档整理成文,期待与大家有进一步的碰撞沟通
二、低代码平台整体技术架构设计
1、低代码开发三阶段
平台为开发者的三个阶段提供的核心功能:
整个3阶段如下图所示:
2、低代码平台功能架构设计
角色与主功能说明:
本低代码开发平台的服务对象为开发者,旨在使用低代码开发平台,进行快速的微服务应用开发与部署,相对于传统的开发与部署方式减少研发时间,降低成本
Low Code 开发面板:
提供整个低代码应用开发生命周期的全功能的运营后台面板,可以在此面板完成开发阶段的各项配置、流程编排、脚本编写与调试、部署等功能。
Low Code 控制面板:
提供各种服务治理,告警配置管理,配置管理等服务控制功能模块
基础功能说明:
部署功能说明:
提供在线构建应用工程,在线调试函数、触发器、连接器等功能,调试完毕后可一键进行发布
特色功能:
为进一步提升业务域功能复用度,进一步减少重复功能开发的成本,同样提供基于模板,函数扩展点等功能的快速复用湖开发
依赖:
3、低代码应用开发流程
应用生命周期4阶段
开发与测试、构建保存、发布、运行
广义流程编排
4、低代码平台技术架构
5、低代码平台应用部署架构
6、低代码平台各角色系统工作机制
7、低代码平台单机应用架构
单机运行环境简介
单机应用架构
三、低代码平台详细设计
由于是小组共创设计,我在详细设计中主要负责了连接器与触发器的设计部分,其他如函数、配置部分的设计与此详细设计这里不再赘述。大概思路如下
函数:支持各种语言的表达式函数、支持BPMN可视化流程编排
多环境配置:需要支持测试、生产、预发等环境配置文件
日志: 支持平台开发者自定义日志是否打印,打印格式,是否有掩码等
1、连接器的设计
连接器定义
连接器的0代码开发与部署流程
2、自定义连接器
1、为了适应内外部不同的连接器诉求,平台提供自定义触发器的能力
2、预留使用连接器使用的配置信息,为引入的通信中间件预留未来使用该触发器的使用方需要0代码配置的配置信息,如数据库的地址,账号密码等信息
3、连接器需要实现平台提供的API,这样以便函数或者触发器可以直接调用该连接器
4、调试无误后保存触发器,提交平台审核,审核通过后平台可上架该触发器
3、自定义触发器
1、为了适应内外部不同的触发器诉求,平台提供自定义触发器的能力
2、预留使用触发器使用的配置信息,为引入的通信中间件预留未来使用该触发器的使用方需要0代码配置的配置信息,如JSF的接口地址,别名等
3、使用纯代码写出该触发器的源代码,并预留调用低代码函数的入口,以便将来使用该触发器的使用者可以0代码配置触发器所调用的函数
4、调试无误后保存触发器,提交平台审核,审核通过后平台可上架该触发器
四、低代码应用源文件
a、元信息,0代码,包含低代码应用的0代码开发部分的触发器元信息、连接器元信息
1、触发器配置信息:
2、连接器配置信息
b、源文件,0代码,包含:流程文件、脚本文件
c、多环境配置,0代码,包含各个环境的配置文件
d、日志组件配置
e、监控组件配置
d、低代码平台应用底座:
执行引擎、LC Proxy、中间件依赖的jar、应用框架springboot的jar等,这部分跟随不同的构建部署方式为可选项
五、低代码应用的构建部署方式
1、源文件热部署
这种方式应对于低代码平台的租户使用低代码平台所有集群的共享资源,选取一部分可用资源以后在控制面板进行选择发布,可以使用指定ip的模式应对相关权限问题,也可以不指定ip使用平台自定义分配。
2、构建jar包、war包
这种方式应对于有自己的主机用户,拿到成品后即可部署无状态应用,打的包中不包含LC Proxy部分,执行引擎在应用启动的时候自动加载包中特定路径的流程文件、脚本文件等。
3、构建镜像
这种方式应对于有自己的容器用户,拿到成品后即可部署无状态应用,打的包中不包含LC Proxy部分,执行引擎在应用启动的时候自动加载包中特定路径的流程文件、脚本文件等。
4、低代码平台和部署平台的关系
六、一些问题的思考与收获
1、扩展性不仅仅是在某一项功能上的扩展,站在全局视角看在架构设计中所有产品功能理论上都要尽可能考虑模块化,可插拔,进而搭积木成平台化,真正做到全场景和全链路可扩展
2、团队小伙伴对HTTP 触发器的设计输出,让我联想到 JSF注册中心等通用类注册中心都要解决的高可用问题,举一反三,同场景的同类解决方案的核心问题是相通的
3、对于未来业务发展生命周期没那么长,数据要求没有强隔离诉求的场景,能否基于数据模型做一层数据层的0代码开发?
4、流程驱动的低代码可以和数据驱动的低代码很好地结合起来
5、低代码平台产出物的多样化,为之后交付项目的产出物打开了思路,很多时候要站在客户角度考虑,客户的应用场景是什么,需要什么,那么我们就提供什么,张宇轩单元可跑,也可圈定某一部分功能集合,打包输出
低代码平台适合的场景的一些思考
1、可以应用在上层营销系统的开发中
2、可以用在流程较为通用的场景如:消息转化、数据统计、接口转发
3、可以应用在已有成熟的业务线进行外围的业务开发,如支付、结算等稳定系统上层要做一些简单业务编排的场景用
4、 面对同样一个业务需求是使用低代码开发还是使用纯代码开发,没有明确的可量化的分水岭,但是建议尝试,从中获到提效之后下一次面临需求的时候就会有较为明确的答案
案例1:我们曾在一个上层营销活动系统重尝试基于表达式引擎做了一个半配置化的活动配置系统(那个时候还没听过低代码这个词),现在想来算是比较原始的支持低代码系统,上新一个活动原本需要3个人日的开发量,基于对以往流程的复用,使用脚本语言,使用表达式进行编排和发布,0.5人日就搞定了,且系统无需重新发布。不得不说在合适的场景,低代码还是非常有空的。
案例2:大促的时的业务数据大屏的制作相信很多人都经历过,我们最近两次大促采取的方案都是使用星链对已有的数据接口和新的数据指标进行简单编排加工,提供JSF服务,再结合我们内部的网关系统将接口协议转化为HTTP, 直接在展示平台(如莫奈大屏)上直接使用,大促过后资源也可随之释放,非常方便与高效,同时也降低了研发成本
七、结语
参加训练营后还是有一些感触想分享给大家
1、感谢马老师的指导和各位评委老师的指点,感恩大家的信任,感谢同组的大佬们,从大家身上学习到不同的思路。每个人来此不同团队,通过和大家的讨论,发掘了很多新的看待产品与架构的视角
2、流程驱动的低代码平台可以和数据驱动的低代码以及部分0代码开发组件可以很好地有机整合成统一的低代码平台,进一步提升研发效率
3、整体感觉训练营节奏紧凑,干货满满,架构设计方面对平台扩展性的思考充分得到训练