作者:京东科技 常姜洲
一、背景
二、低代码平台整体技术架构设计
1、低代码开发三阶段
平台为开发者的三个阶段提供的核心功能:
-
部署阶段:生成、托管、获取、构建和打包代码。
-
运维阶段:为 Serverless 应用提供部署和服务支持。提供友好的日志系统,能够帮助平台工具使用者快速定位问题,提供对各种使用中间件状态监控,避免工具平台成为一个黑盒子
开发阶段:服务编排能力,提供可组合的方式绑定事件源和事件消费者(函数、API、数据源管理等基础能力)
2、低代码平台功能架构设计
角色与主功能说明:
Low Code 开发面板:
Low Code 控制面板:
基础功能说明:
• 提供多环境配置文件隔离
• 提供应用工程所有源文件、各环境配置数据的的版本管理
部署功能说明:
特色功能:
依赖:
• 与统一配置平台打通进行在线配置变更的存储与变更,平台基础配置的存储与变更
• 监控功能依赖贡献现有的监控平台 UMP 、SGM的 的OPEN API 实现
3、低代码应用开发流程
应用生命周期4阶段
开发与测试、构建保存、发布、运行
-
开发完成后可以根据属性配置、语言环境构建打包函数镜像,同时生成版本号。
-
应用实例在运行时提供服务
广义流程编排
• 可视化创建触发器
• 支持脚本编写创建函数,支持多语言:Groovy,Java
• 支持配置通用函数、触发器、连接器等监控,健康度指标收集配置
4、低代码平台技术架构
-
流量入口主要分为京东内外部两种流量入口
-
对于JSF接口可以使用低代码应用的JSF接口触发器调用
-
下层主要依赖其他业务部门提供的JSF接口、各大中间件、存储层以及外部的一些HTTP接口、特殊协议的接口,消息等
5、低代码平台应用部署架构
-
低代码应用不改变现有应用的通信方式和现有的JSF接口、数据库、缓存等中间件使用原有方式通信
-
数据收集中心:负责收集低代码运行时配置的健康度指标源数据、流量等其他运行数据收集
6、低代码平台各角色系统工作机制
7、低代码平台单机应用架构
单机运行环境简介
单机应用架构
-
平台应用本身核心
-
执行引擎,负责对低代码应用连接器的加载、函数加载、触发器配加载,加载完成后对外提供服务,等待各种触发器的流量触发、
-
触发器为应用的流量入口:如接口、MQ消费者,定时任务回调等等,平台支持自定义触发器开发
-
连接器负责和下游RPC接口,存储数据源、中间件平台的消息通信
-
以上几个核心构件的有机组合共同在应用层基础能力至之上提供了
三、低代码平台详细设计
由于是小组共创设计,我在详细设计中主要负责了连接器与触发器的设计部分,其他如函数、配置部分的设计与此详细设计这里不再赘述。大概思路如下
多环境配置:需要支持测试、生产、预发等环境配置文件
1、连接器的设计
连接器定义
-
可以在脚本函数中直接调用连接器,也可以在流程函数中直接调用连接器
连接器的0代码开发与部署流程
2、自定义连接器
2、预留使用连接器使用的配置信息,为引入的通信中间件预留未来使用该触发器的使用方需要0代码配置的配置信息,如数据库的地址,账号密码等信息
4、调试无误后保存触发器,提交平台审核,审核通过后平台可上架该触发器
3、自定义触发器
2、预留使用触发器使用的配置信息,为引入的通信中间件预留未来使用该触发器的使用方需要0代码配置的配置信息,如JSF的接口地址,别名等
4、调试无误后保存触发器,提交平台审核,审核通过后平台可上架该触发器
四、低代码应用源文件
1、触发器配置信息:
▪ 调用函数的函数名称
2、连接器配置信息
▪ 是否打印日志,日志是否脱敏
◦ 可视化流程编排产生的源文件,如bpmn流程文件
c、多环境配置,0代码,包含各个环境的配置文件
d、日志组件配置
◦ 日志输出路径
e、监控组件配置
◦ 监控埋点打印格式
执行引擎、LC Proxy、中间件依赖的jar、应用框架springboot的jar等,这部分跟随不同的构建部署方式为可选项
五、低代码应用的构建部署方式
这种方式应对于低代码平台的租户使用低代码平台所有集群的共享资源,选取一部分可用资源以后在控制面板进行选择发布,可以使用指定ip的模式应对相关权限问题,也可以不指定ip使用平台自定义分配。
▪ 日志与监控埋点由 LC Proxy 采集到平台提供的日志平台和监控平台
这种方式应对于有自己的主机用户,拿到成品后即可部署无状态应用,打的包中不包含LC Proxy部分,执行引擎在应用启动的时候自动加载包中特定路径的流程文件、脚本文件等。
▪ 埋点文件按照特定格式打印到特定目录,供自己的日志采集器采集
这种方式应对于有自己的容器用户,拿到成品后即可部署无状态应用,打的包中不包含LC Proxy部分,执行引擎在应用启动的时候自动加载包中特定路径的流程文件、脚本文件等。
▪ 埋点文件按照特定格式打印到特定目录,供自己的日志采集器采集
◦ 内部
▪ 1、共享资源模式:平台租户共享平台资源池,适用于消耗资源不大并发量不高的应用,使用低代码平台本身提供的日志平台、监控平台结合做到各个维度的立体监控
◦ 外部
▪ 外部需求为低代码平台私有化部署的时候,需要将方案设计中的几大应用为用户做私有化部署
六、一些问题的思考与收获
2、团队小伙伴对HTTP 触发器的设计输出,让我联想到 JSF注册中心等通用类注册中心都要解决的高可用问题,举一反三,同场景的同类解决方案的核心问题是相通的
4、流程驱动的低代码可以和数据驱动的低代码很好地结合起来
低代码平台适合的场景的一些思考
2、可以用在流程较为通用的场景如:消息转化、数据统计、接口转发
4、 面对同样一个业务需求是使用低代码开发还是使用纯代码开发,没有明确的可量化的分水岭,但是建议尝试,从中获到提效之后下一次面临需求的时候就会有较为明确的答案
案例2:大促的时的业务数据大屏的制作相信很多人都经历过,我们最近两次大促采取的方案都是使用星链对已有的数据接口和新的数据指标进行简单编排加工,提供JSF服务,再结合我们内部的网关系统将接口协议转化为HTTP, 直接在展示平台(如莫奈大屏)上直接使用,大促过后资源也可随之释放,非常方便与高效,同时也降低了研发成本
七、结语
1、感谢马老师的指导和各位评委老师的指点,感恩大家的信任,感谢同组的大佬们,从大家身上学习到不同的思路。每个人来此不同团队,通过和大家的讨论,发掘了很多新的看待产品与架构的视角
3、整体感觉训练营节奏紧凑,干货满满,架构设计方面对平台扩展性的思考充分得到训练