阿里开源低代码引擎和生态建设实战及思考

目录
  • 前言
  • 第一部分 - 低代码体系的架构设计思考
  • 第二部分 - 求同:阿里低代码引擎&UIPaaS
  • 第三部分 - 存异:百花齐放的低代码平台
  • 彩蛋 - 协议对外开放 & 低代码引擎开源

前言

大家好,今天很开心有机会跟大家分享最近几年阿里在低代码领域的思考和实战。

我是力皓,目前已经在前端和后端岗位工作了十多年了,近 3 年专注在低代码领域,是阿里低代码引擎项目负责人。

我的部门是企业智能事业部,我们部门有大量中后台场景,所以我们在 6 年前就开始低代码领域的探索了,并且一直在持续投入,我们用将近 3 年的时间,牵头打造了一套全集团通用的低代码基础设施,目前被集团 70% 的低代码平台依赖。

分享内容主要分为 3 块:首先会介绍,在阿里纷繁复杂的业务背景下,用户角色繁多,技术栈各异,我们是如何思考低代码技术体系架构的;然后,我会介绍低代码技术体系的架构实战,重点介绍过程中沉淀的两个技术产品;最后,我会跟大家分享阿里的几个具体的低代码场景以及平台建设。

最后的最后,还有一个小彩蛋。

在正式开始之前,先冒昧地问大家一个问题:如今,PHP 还是最好的语言吗?是?不是?当然不是,DnD 才是!DnD 是 drag & drop,相信使用过低代码平台的同学肯定知道我的意思。

第一部分 - 低代码体系的架构设计思考

好啦,先跟大家聊聊「低代码体系的架构设计思考」。

咱们先一起回顾下什么叫低代码?来看下维基百科的定义,低代码开发平台提供了一种让开发人员通过可视化+配置的方式来创建应用,而不是通过手写代码。再来看下 Forrester 的定义,平台提供了一种快捷交付业务应用的能力,而不需要我们手写太多的代码,也不需要了解常规开发中的前置工作,比如了解编程语言、设置开发环境等。

字不少,尝试提取几个关键词,可视化、配置化、低门槛、快捷交付(GUI、Configuration、Minimal Upfront Investment 和 Rapid Delivery)。我们先不深究这几个词的意思,来看几个例子。

办公室行政人员小 A,主任让他收集全办公室100个人的行程信息,他用一个 表单低代码平台 快速搭建了行程记录表单应用,同事填完后,还能从后台实时通过图表看数据。

营销人员小 B,总监让他做个营销小程序,他用一个 小程序低代码平台,拖拖拽拽完成了小程序的搭建,然后一键发布,完成了本不可能完成的任务。

开发人员小 C,天天苦于写标准化的表单、表格页面,他感觉是重复劳动,但又不得不做,直到某天他发现用一个 模型驱动的低代码平台,通过定义数据模型后,可以自动化生成页面 CRUD,又快又好。

好了,相信通过这几个例子,大家对低代码有了更形象、更深的理解。

总结一下,我们可以通过可视化界面来配置完成传统的应用程序开发 & 交付过程,而不需要了解太多的开发技能,让办公室行政人员、营销人员等非技术人员轻松完成「研发」工作,让开发人员更快地研发。

所以,我理解的低代码的核心价值是「降本提效」和「角色赋能」。

正因为有了这两点核心价值,阿里有一些部门很早就已经在低代码领域探索并产生了一些平台,平台之间相互独立,属于典型的烟囱架构,烟囱架构从公司整体视角来看有一些问题,比如有一些通用能力没法复用,导致平台建设的成本高且质量稂莠不齐。而这些问题正是我们阿里巴巴前端委员会中后台小组要解决的。

为了避免低水平重复建设,从而降低各业务场景中低代码平台的建设成本,提升低代码体系中物料、插件、解决方案、产物等的可流通性,由前端委员会牵头,决定对低代码技术体系进行拉通共建,制定统一的底层协议,并合力打造一套统一的低代码基础设施。

我们有各种技术栈,有 react / vue / 小程序,我们有各种用户角色,有产品经理、设计师、业务人员、前后端开发,当然,我们还有各种业务场景,有淘宝 toC 业务,有企业智能 toB 业务,有做数据类业务,有做设计研发一体化的业务。

如何找到平台的共同点?以及支撑平台差异点?这是架构能否成功的关键!思考再三,我们确定了十二字设计原则:协议先行,最小内核和最强生态。

最终我们设计了这样一套分层架构,自下而上分别是协议 - 引擎 - 生态 - 平台。底层协议栈定义的是标准,标准的统一让上层产物的互通成为可能,**引擎是对协议的实现,同时通过能力的输出,向上支撑生态开放体系,提供各种生态扩展能力,**那么生态就好理解了,是基于引擎核心能力上扩展出来的,比如物料、设置器、插件等,还有工具链支撑开发体系,最后,各个平台基于引擎内核以及生态中的产品组合、衔接形成满足其需求的低代码平台。

每一层都明确自身的定位,各司其职,协议不会去思考引擎如何实现,引擎也不会实现具体上层平台功能,上层平台的定制化均通过插件来实现,这些理念将会贯穿我们体系设计、实现的过程。

第二部分 - 求同:阿里低代码引擎&UIPaaS

首先聊聊协议栈,目前我们有两个:一个叫《阿里巴巴中后台前端搭建协议规范》,另一个叫《阿里巴巴中后台前端物料规范》。这两份协议是阿里在低代码领域最资深的同学编写的,历经了半年之久。因为协议是整个体系的基石,我觉得值得。

内容很多,我这里简单做个概括,两份协议定义了 3 方面的内容,分别是术语、结构和行为。

  • 术语是我们沟通的基础,概念相通,我们才能高效沟通。我们根据物料的颗粒度,定义了基础组件、区块、低代码组件、模板等术语,另外还包括低代码生产过程中一些模块名称,比如编辑器、画布、事件绑定、数据绑定、渲染、出码、设置器之类的术语,
  • 结构,包括页面描述的结构,如何定义页面组件树、数据源、生命周期、页面状态等等。
  • 行为,不同的业务场景,我们对物料的配置、约束、扩展各不相同,所以我们在物料描述中有各种各样的钩子来支持自定制。

正是有了几份协议,让上层的互通成为可能,概念互通,物料互通,生态互通。另外,协议也是实现多技术栈的关键,后面我会进一步阐述。

低代码引擎分为 4 大模块,入料、编排、渲染、出码。

  • 入料模块就是将外部的物料,比如海量的 npm 组件,按照《物料描述协议》进行描述。注意,这里仅是增加描述,而非重写一套,这样我们能最大程度复用ProCode体系已沉淀的组件。将描述后的数据通过引擎 API 注册后,在编辑器中使用。
  • 编排,本质上来讲,就是不断在生成符合《搭建协议》的页面描述,将编辑器中的所有物料,进行布局设置、组件 CRUD 操作、以及 JS/CSS编写/逻辑编排等,最终转换成页面描述,技术细节待会儿我们再展开讲讲。
  • 渲染,顾名思义,就是将编排生成的页面描述结构渲染成视图的过程,视图是面向用户的,所以必须处理好内部数据流、生命周期、事件绑定、国际化等。
  • 出码,就是将页面描述结构解析和转换成应用代码的机制。

下面我们展开来聊聊编排,首先我们得有一个工作台,我们叫编辑器骨架,分为几个默认可视的区域,以及一些可以展开的区域,可以弹窗显示的区域。中心区域,是编排和渲染的画布。

前面说过,编排的本质是不断生成符合《搭建协议》的页面描述的过程,然后通过渲染器将页面描述渲染成真正的视图。

协议是文本协议,是一个 json 结构,理论上手写也能完成,但是考虑到可编程性,我们设计了一套节点和属性模型,类似于 DOM,这样操作节点 + 配置属性就等价于在操作页面描述,也就是操作 json 结构了。

除了节点模型和属性模型之外,上层还有文档&项目模型,对于物料的管理,有物料注册机制和物料模型,另外我们提供了通用的面板管理、拖拽引擎、resize引擎,设计器辅助层、原地编辑、快捷键等二十几个模块,这里就不细说了。

而这所有的模块的能力,也就是 API,都通过插件进行调用,于是插件成为了扩展编辑器的唯一载体。你可以定制你的面板,可以操作节点树,可以定制节点的扩展操作,可以去操作物料模型,可以去绑定快捷键,可以设定画布大小,可以定制拖拽行为等等。

再来聊聊出码,对于一些常规场景,直接由渲染模块渲染即可。但是考虑到一些特殊情况,比如一些不支持动态化的场景,小程序,或者为了更好的性能,转码成 ProCode 打包部署,或者需要二次开发,因此,我们设计了出码框架。出码框架提供一套流水线式的处理流程,类似 babel 的机制,通过一个个的出码插件 / preset 来定制你的出码产物,市面上的 react 框架、vue 框架、小程序框架都可以支持。

再来聊聊引擎生态的设计,前面也提到,最小内核最强生态是我们的设计原则,因此如何定义什么是内核能力,什么是生态以及如何支撑生态,是我们整个体系设计的重中之重。

经过我们支撑众多平台的经验,我们发现平台的差异性体现在这 3 点,物料、设置器和插件,其中插件是扩展的入口,包括物料和设置器也是通过插件才能注册到引擎。我们定义了引擎的约束,这是唯一不可变的部分,以及引擎 API 的能力,包括面板、画布、物料管理、拖拽等所有能力,都可以通过插件来使用。同时,插件我们设计成高内聚、显性化配置、可流通的形态,这支撑了插件生态的形成,甚至更高层面,让自定义设计器也可以通过可视化配置实现。多说一嘴,因为生态体系如此重要,我们在生态元素调试能力上也下了一番功夫,目前我们通过工具链 + 调试插件让一切生态元素均可调试,可相互组合调试,可线上调试。

我们具象化一点来看引擎生态,这是一个标准的中后台设计器页面。蓝色部分是插件,这些都是能被看到的插件,因为调用的是面板 API,不仅如此,还有一些不能被看到,比如调用了快捷键 API,拖拽 API、事件 API 等。红色部分就是设置器了,可以定制我们如何给一个节点的属性赋值。橙色部分就是物料了,其实物料本质上是一个模型,也是不可见的,不过这里通过物料面板调用了物料 API 来显性化展示了物料,再通过拖拽 API 和 节点 API 来拖拽并插入到画布中。

丰富的生态,让快速、低成本打造低代码平台成为可能。我们有物料生态、设置器生态、插件生态,因此,我们推导出一个简单的公式,打造低代码的设计器等价于引擎 + 选择物料 + 选择设置器 + 选择插件。

再来聊聊我们如何通过协议来支持多技术栈。不管是《阿里巴巴中后台前端搭建协议规范》,还是《阿里巴巴中后台前端物料规范》,都是与语言无关的。你定义一套物料描述,而具体实现可以是 react / vue 或者任何技术栈,而对于搭建页面,你可以在设计态用 react 组件,渲染时也用 react 组件,但注意,因为设计和渲染的中间产物页面描述也是语言无关的,所以渲染时可以是任意语言,可以是 react,可以是 vue,当然也可以是小程序。

当然混搭的场景不是我臆想的哈,阿里内部有不少混搭的实践。

再来聊聊编排和渲染的双层架构设计,通过这个架构,我们实现了绝对纯净的编辑态渲染,即模拟器实现。

这个图相信大家都很熟悉,编辑器中内嵌一个所见即所得的渲染模块,但这会有一个问题,css 污染的问题,因为编辑器中各个模块,物料、设置器、插件都来自不同的团队,很容易产生 css 污染。编辑器中的元素互相污染问题都不算太大,但是污染了渲染视图就很严重了,大家可以思考下为什么?

我们的解法是将模拟器放入到一个新的 iframe 中运行,通过编辑器将相关资源注入到模拟器,建立数据通道,使用 facade 模式,即在编辑器和模拟器中各有一个 facade 对象来负责对外的方法暴露和调用,避免深度耦合。

低代码引擎通过协议先行,最小内核,最强生态的理念,形成了 4 大模块以及生态扩展性的整体设计,在灵活性上足以支撑各种类型低代码平台。

但是,大家此时可能会有些疑问,这引擎 + 生态的组合似乎还是偏底层,离一个真正生产可用的低代码平台有点距离。比如:

  • 搭建出来的页面描述保存到哪里去?
  • 搭建完成后,产物打包系统哪家强?
  • 页面多人编辑冲突如何解决?
  • 研发流程如何定义?
  • 版本管理,多分支咋搞?
  • 页面区块 / 低代码组件 怎么搭建?怎么使用?

这里的问题可以列出上百个,因为这都是我们遇到并已经解决的问题。

所以,我们在引擎之上再加上一层,形成一个低代码平台的基座,或者叫孵化器。我们把这个低代码平台的孵化器叫做 UIPaaS,在阿里内部,我们更多是基于 UIPaaS 来开始打造低代码平台,这样会更轻松一点。为什么要做 UIPaaS?两点原因:

  • 解决产品能力的问题,实现了应用管理、研发流程、打包流程、发布流程 等一系列能力
  • 解决快速在找到符合需求的生态元素组合

我们来看看它包含哪些能力以及支持哪些定制化:

  • 设计器:提供一个开箱即用的标准版页面设计器,开箱即用意味着整合了一批插件,插件都已经跟后端服务相绑定了;提供简单版、进阶版设计器定制方案。
  • 运行时:提供稳定的,功能丰富的运行时 SDK,包括页面描述的获取、路由、layout,甚至还有一套运行时中间件机制
  • 生态:提供「生态中心」,大量组件、插件、解决方案唾手可得;提供「一站式研发平台」,可开发、调试低代码领域的所有物料
  • 管理后台:提供功能完善、方便定制的管理后台模板应用,包括研发流程、应用依赖管理、打包配置、路由配置等
  • 后端服务:官方提供 140+ 网关接口,覆盖设计器、运行时、管理后台等全流程;允许上层平台注册服务到 UIPaaS,供其他平台使用。

第三部分 - 存异:百花齐放的低代码平台

最后来看一下百花齐放的低代码平台。我们有各种业务场景,各种用户角色,各种技术栈,因此产生形形色色的低代码平台几乎是个必然结果。唯一的问题是如何低成本、快速地支撑各个平台的开发,在阿里,我们通过 UIPaaS 孵化器来支撑。

总结了一下目前我们打造的垂直类平台,有耳熟能详的中后台,有运营场景,数据报表类场景,还有以设计类为代表的角色协同、产物互通的平台,还有移动应用、IoT、aPaaS 等类型。

平台很多,因为各种原因没法一一展示,这里我们来看几个典型的平台:这是一个中后台平台,功能包含页面大纲树、组件面板、源码面板、国际化、模型编排等核心能力,以及打包系统、研发管理等模块。

这是一个数据报表类的平台,会对图表库、数据模块、账号权限体系、设置器等做深度定制。

这是一个小程序编排平台,核心是接入一套小程序的组件,定制一些小程序特有的配置,以及对接各个发布渠道。

虽然提到了很多低代码平台,似乎让使用低代码开发成为了一种风潮。但是我建议不要盲目跟风,低代码研发也只是一种研发范式,跟以往任何一种研发范式相比,没有孰高孰低。适合的,才是最好的,评估标准只有两点:是否能研发提效?以及是否能角色赋能?

彩蛋 - 协议对外开放 & 低代码引擎开源

最后,就是喜闻乐见的彩蛋了~

跟大家介绍一下低代码引擎在阿里的发展史,大家注意,我将协议起草这个节点标注成了橙色,因为这个节点代表了整个集团从分兵作战转成集团军作战的关键里程碑。之后的协议发布、集团引擎、UIPaaS 等各个节点也就顺理成章了~

低代码协议和低代码引擎经过了近3年在阿里内部不断捶打和磨练,在生态建设以及平台支撑上都取得了不错的成绩。后续我们会将其开源,让大家共享这套低代码基础设施,继续接受社会的捶打和磨练

以上就是阿里开源低代码引擎和生态建设实战及思考的详细内容,更多关于阿里低代码引擎生态建设的资料请关注我们其它相关文章!

(0)

相关推荐

  • 阿里云OSS实践文件直传基于服务端

    目录 前言 优缺点 流程 逻辑拆解 代码实现 OSS 配置 policy 内容 有效期 文件名 转化 policy 进一步分析 完整代码 前言 在日常开发中,客户端上传文件的一般流程是:客户端向服务端发送文件,再由服务端将文件转储到专门的存储服务器或云计算厂商的储存服务(例如阿里云 OSS)上,这样做的一个弊端是上传环节占用服务器的带宽,个位数的并发上传就能把带宽占满,从而导致用户体验下降.而如果直接将文件从客户端直传到第三方的存储服务上,就可以避免这个问题. ​ 本文以阿里云 OSS(Obje

  • 阿里云windows server2019配置FTP服务的完整步骤

    1.在windowsserver菜单中打开服务器管理器 2. 在快速启动仪表盘中选择配置角色服务 3. 直接下一步 4. 选择基于角色或基于功能的安装,下一步 5. 选择要配置ftp服务的服务器,下一步 6. 选择Web服务器下面的选项 7. 功能选项里网上有些帖子说需要选,但是我看没有ftp相关的功能,所以我就没选,直接安装 安装完成后打开windowsserver菜单,选择windows管理工具 打开iis服务 鼠标右键服务器名称,选择添加ftp站点 填写ftp站点名称和服务路径 ip选择未

  • springboot框架阿里开源低代码工具LowCodeEngine

    目录 前言 LowCodeEngine简介 搭建低代码平台 使用低代码平台 目标效果 总结 前言 解放双手!推荐一款阿里开源的低代码工具,YYDS! 之前分享过一些低代码相关的文章,发现大家还是比较感兴趣的.之前在我印象中低代码就是通过图形化界面来生成代码而已,其实真正的低代码不仅要负责生成代码,还要负责代码的维护,把它当做一站式开发平台也不为过!最近体验了一把阿里开源的低代码工具LowCodeEngine,确实是一款面向企业级的低代码解决方案,推荐给大家! SpringBoot实战电商项目ma

  • 阿里云ECS云服务器快照概念及使用教程

    目录 阿里云ECS云服务器快照概念以及使用 1.快照的概念 1.1.什么是快照 1.2.云盘增量快照 2.为云盘手动创建快照 2.1.创建快照 2.3.模拟ECS服务器故障 2.3.根据快照回滚磁盘恢复ECS 2.4.登陆ECS查看系统是否正常 3.为云盘设置自动创建快照 3.1.创建自动快照策略 3.2.为云盘设置自动快照策略 3.3.在购买时ECS就为云盘设置自动快照策略 3.4.自动快照已生效 阿里云ECS云服务器快照概念以及使用 1.快照的概念 1.1.什么是快照 阿里云快照FAQ文档:

  • 阿里开源低代码引擎和生态建设实战及思考

    目录 前言 第一部分 - 低代码体系的架构设计思考 第二部分 - 求同:阿里低代码引擎&UIPaaS 第三部分 - 存异:百花齐放的低代码平台 彩蛋 - 协议对外开放 & 低代码引擎开源 前言 大家好,今天很开心有机会跟大家分享最近几年阿里在低代码领域的思考和实战. 我是力皓,目前已经在前端和后端岗位工作了十多年了,近 3 年专注在低代码领域,是阿里低代码引擎项目负责人. 我的部门是企业智能事业部,我们部门有大量中后台场景,所以我们在 6 年前就开始低代码领域的探索了,并且一直在持续投入,

  • pyCaret效率倍增开源低代码的python机器学习工具

    目录 PyCaret 时间序列模块 加载数据 初始化设置 统计测试 探索性数据分析 模型训练和选择 保存模型 PyCaret 是一个开源.低代码的 Python 机器学习库,可自动执行机器学习工作流.它是一种端到端的机器学习和模型管理工具,可以以指数方式加快实验周期并提高您的工作效率.欢迎收藏学习,喜欢点赞支持,文末提供技术交流群. 与其他开源机器学习库相比,PyCaret 是一个替代的低代码库,可用于仅用几行代码替换数百行代码. 这使得实验速度和效率呈指数级增长. PyCaret 本质上是围绕

  • Go语言驱动低代码应用引擎工具Yao开发管理系统

    目录 前言 Yao简介 安裝 使用 基本使用 创建数据模型 编写接口 编写界面 总结 前言 之前写过一篇关于阿里的低代码工具LowCodeEngine的文章,发现大家还是挺感兴趣的.最近又发现了一款很有意思的低代码工具Yao,支持使用JSON的形式开发管理系统,不仅可以用来开发后端API,还能用来开发前端界面,简洁而且高效,推荐给大家! SpringBoot实战电商项目mall(50k+star)地址:https://github.com/macrozheng/mall Yao简介 Yao是一款

  • Umi4集成阿里低代码框架lowcode-engine实现

    目录 前言 实现 搭建umi4项目 集成lowcode-engine 结束语 前言 最近准备研究下阿里低代码框架lowcode-engine, 官方Demo是提供好的脚手架,由于我们的框架使用的是umi,官方文档提供了一些教程,在此记录下在umi4集成lowcode-engine. 实现 搭建umi4项目 1.通过官方文档的快速开始,我们可以快速创建出项目 先找个地方建个空目录 mkdir myapp && cd myapp 通过官方工具创建项目, 这里我们采用pnpm包管理工具 $ pn

  • JS前端可扩展的低代码UI框架Sunmao使用详解

    目录 引言 设计原则 1. 明确不同角色的职责 2. 发挥代码的威力,而不是限制 3. 各个层面的可扩展性 4. 专注而不是发散 Sunmao 的工作原理 响应最新的状态 组件间交互 布局与样式 类型安全 在组件间复用代码 可扩展的可视化编辑器 保持开放 引言 尽管现在越来越多的人开始对低代码开发感兴趣,但已有低代码方案的一些局限性仍然让大家有所保留.其中最常见的担忧莫过于低代码缺乏灵活性以及容易被厂商锁定. 显然这样的担忧是合理的,因为大家都不希望在实现特定功能的时候才发现低代码平台无法支持,

  • Spring Boot整合阿里开源中间件Canal实现数据增量同步

    目录 前言 Canal是什么? Canal数据如何传输? 数据同步还有其他中间件吗? Canal服务端安装 1.打开MySQL的binlog日志 2.设置MySQL的配置 3.设置RabbitMQ的配置 4.RabbitMQ新建exchange和Queue 5.启动服务端 6.测试 Canal客户端搭建 1.创建消息实体类 2.MQ消息监听业务 3.测试 总结 前言 数据同步一直是一个令人头疼的问题.在业务量小,场景不多,数据量不大的情况下我们可能会选择在项目中直接写一些定时任务手动处理数据,例

  • 低代码从0到1创建小程序项目详解流程

    目录 1 搭建开发工具 2 创建项目 3 功能开发 4 后端实现 总结 我们使用代码编程的时候,前端是写标签,后端是写if/else.for循环来执行逻辑处理. 那低代码如何体系化的学习呢?这里我们按照代码方式学习做个对照. 1 搭建开发工具 一般如果我们使用微信开发者工具,开发小程序需要安装工具.低码工具不需要安装,是在线进行编程.但和开发者工具一样,低码也是需要绑定小程序的.我们在开发者工具里一般是需要配置自己小程序的appid,如果使用了云开发的,还需要开通云开发. 我们使用低码开发需要在

  • OpenDataV低代码平台新增组件流程详解

    目录 正文 创建组件目录和文件 初始化组件文件 组件配置项 样式配置 属性配置 属性使用 总结 正文 OpenDataV计划采用子库的方式添加子组件,即每一个组件都当做一个子库,子库有自己的依赖,而项目本身的依赖只针对框架,因此每一个组件我们都当做一个子库来开发.下面我带着大家一步步详细的开发一个数字展示组件. 创建组件目录和文件 进入组件库目录下 所有的可拖拽组件都存放在src/resource/components目录下 cd src/resource/components 根据组件名称创建

  • PHP代码加密和扩展解密实战

    这种方案是通过对代码进行加密,然后利用C语音写解密的PHP扩展.破解难度会有提升,但依然是会被破解的. 从网上找过各种代码加密的开源方案. 一旦开源,就不可能保证安全性.毕竟加密和解密的东西都是公开的. 目前我们没有能力自己去写扩展.还是需要采用开源的方案. 我找到的比较好用的是php-beast. https://github.com/liexusong/php-beast 实战开始 1.下载源码 wget https://github.com/liexusong/php-beast/arch

随机推荐