自 2020 年来,网易数帆探索可视化低代码编程已两年有余,打造了 CodeWave 智能开发平台(原轻舟低代码平台)用于企业应用开发。然而,不少编程技术人员对这一领域还比较陌生。我们开设《低代码技术内幕》专栏,旨在讨论低代码编程领域中的困难、问题,以及高效的解决方案。本文为第三篇,与读者共同探讨数字化转型背景下的低代码平台架构设计。
专栏内容回顾:
在低代码市场篇中我们概述了低代码的定义和低代码产品的主要定位,描绘了低代码在近年的高速发展和其在未来 5~10 年国内外的巨大市场,其中聚焦到了国内数字化转型的背景和机遇,及其对低代码发展的推动作用。当前国内企业面对数字化转型仍然有很多挑战,因此低代码得到越来越多的企业的青睐。那么 为了帮助企业应对这些挑战,低代码平台需要具备哪些不可或缺及辅助增强的能力?为了支持这些能力,低代码平台架构又需要怎样合格及完善的设计? 本文会一一揭秘。
企业面对数字化转型有哪些挑战?
近年来,我国数字化转型政策持续向好,各部委陆续发布多个政策,强调加速企业数字化转型,促进企业高质量发展,大力推动我国数字经济建设。2021 年国家发布《中华人民共和国国民经济和社会发展第十四个五年规划和 2035 年远景目标纲要》,其中第五篇“加快数字化发展,建设数字中国”明确了“数字化”在十四五国家发展战略中的重要地位。
然而,随着企业规模的扩张和系统更新速度的加快,企业在数字化发展中亟需解决 有限的开发运维能力与日益增长的数字化转型需求之间的矛盾,它主要体现在以下几个方面:
开发人力成本高:专业开发人员门槛高、招聘难、稳定性差;
项目建设效率低:项目研发周期长,创新思路无法及时验证;
缺乏软件生产最佳实践:缺少标准的软件生产实践,流程与规范无法落地;
软件资产利用率低:软件资产复用性差,重复造轮子。
经过对国内软件发展趋势和技术发展趋势的分析,我们认为 传统的开发模式无法很好地解决以上问题。例如,如果应用开发工程师要实现一套普通的 IT 系统,他不仅要掌握业务,往往还需要同时掌握以前繁多的技术概念和知识:
运维:云计算、k8s、中间件、微服务、DevOps
语言:Java、JavaScript、CSS、HTML、SQL
框架:Spring、Vue/React
其他:用户认证鉴权、业务流程管理、CSR/SSR、小程序多端开发等
…
对于大部分开发工程师来说,掌握各种技术栈等等大量业务无关的专业知识是件令人沮丧的事情。要知道不少中型的互联网公司在养了不少专业方向的技术人才的情况下,尚且不能打通任督二脉,为上层业务开发者提供友好业务开发环境,何况急需数字化转型的大量传统企业?同时,伴随着国内 IT 领域人才的高流动率,一个企业内部往往各种不同技术栈和架构并存,最终不堪重负。
低代码平台需要具备哪些能力?
可视化开发与协作:应用开发往往会涉及多个专业的子领域,比如数据定义子领域、数据查询子领域、页面子领域、流程子领域等。经过大量的研究分析,在多数领域可视化相比于文本会包含更丰富的信息,阅读性起来更直观更友好,对普通人来说更易于学习。另一方面,复杂软件往往需要多人协作来完成,这是因为其通常需要涉及多个领域的专业知识和技能,一个人难以胜任。协作功能使得每个开发者专注于不同模块,紧密合作以高效完成各自的任务,并确保项目的整体一致性和准确性。因此开发平台、工具还需要提供诸如分支版本控制、冲突解决等协作的能力,以有效地帮助团队的每一位开发在整个软件开发周期中追踪和管理代码变化。
统一的前后端语言:复杂的应用程序通常需要多个组件之间协同工作,这些组件涉及到前端(用户界面)和后端(服务器端)两个部分。使用统一的前端、后端语言可以有效提高开发效率和减少沟通成本,例如开发人员可以更轻松地共享代码、知识和工具,减少技术转换成本和学习成本。统一的前端、后端语言还可以提高应用程序的可维护性和可扩展性,例如一段函数既可以在客户端运行也可以在服务端运行,而无需额外的实现和转换成本。
资产中心:随着用户群体增长,应用平台往往会形成大量优质资产,因此需要提供一个分享、管理这些优质资产的平台。另一方面,针对企业在发展过程中已经沉淀下来的高质量资产,平台需要提供适当的方式来接入;此外,企业的专业开发人员应有办法为低代码应用定制高级功能。
集成:指集成更多应用程序和数据源:企业内部往往具有多个系统以及已有的技术栈体系,各系统之间有着丰富的交互逻辑和数据互访需求。通过集成能力可以提升低代码平台的灵活性和扩展性,从数据源、协议、应用等各个层面实现企业各系统之间的数据和服务交互,从而提升低代码应用的价值和可用性。
可用、安全:可用性是软件的一个重要方面。企业软件通常是企业中关键的业务应用程序,例如企业资源规划(ERP)、客户关系管理(CRM)和财务管理系统等。这些应用程序与企业中的日常业务紧密相关,在发生故障或停机时,可能会导致企业的财务损失、服务中断和信誉问题。因此,企业软件需要是高度可用的,以确保企业的继续运营和稳定发展。另一方面,企业软件往往涉及到用户的敏感数据和信息,如个人身份信息、财务信息、医疗记录等。如果这些信息被泄露或被黑客攻击,将会对用户造成极大的损失和伤害,甚至会让公司面临法律问题。
轻舟低代码平台的架构
针对上述数字化转型背景和低代码平台的能力要求,我们决定提供一门图灵完备的可视化编程语言以及一套功能完备的集成开发环境,来达到语言统一,开发高效,程序安全,扩展性强,门槛低上限高的目标;借助于云原生的优势,打造一个故障隔离,灵活安全,可观测性完善的一站式平台,并通过资产中心完成数字资产的沉淀和复用。
我们的平台架构整体上可以划分成平台服务,集成开发环境,NASL 语言及其配套设施,资产中心,云原生基座五大模块,设计如下:
轻舟低代码平台产品架构设计
平台服务
低代码平台服务的设计目标是“提供一站式应用开发平台,维护应用从开发到运维监控的全生命周期管理,并满足不同企业软件工程实践规范”。为此,平台分为以下几个部分,各司其职:
应用管理:包含应用创建、列表与详情、运维、删除等应用管理能力,其中运维包括应用的部署规格,服务启停,WebSQL 等操作 。
多租户管理:租户是低代码资源的顶层隔离单位,不同租户之间的资源互不相通,从而保证平台资源安全,包含应用资源、资产资源、底层运行资源等。
多环境管理:平台可以一键创建 / 销毁一整套应用开发环境,在 CI / CD 的设计上可以快速对接云原生 DevOps,从而满足不同企业不同的软件工程实践规范。
应用集成信息管理:低代码平台提供了 API、数据源、文件存储、认证源等应用三方集成能力,需要对集成相关的配置信息做注册,权限等管理,如数据库地址,API 地址等。
IAM:即 Identity and Access Management,包括身份验证,各类授权,账户管理,用户行为与活动的审计与监控,是平台安全实践的重要体现之一。
应用监控:通过应用可观测性监控,低代码开发者可以及时获知制品应用的内部运行状态,从而在制品应用页面响应缓慢、访问报错等异常情况发生时,能够及时定位异常发生的原因,并及时查看修复。应用监控目前包含日志和维度监控,其中日志既支持 NASL(平台所定义的语言,下述)日志,也支持源代码日志,未来还会对应用程序在运行时的执行路径和行为做追踪记录。
集成开发环境
低代码集成开发环境的设计目标是“以提高开发效率为中心,同时注重应用集成、多人协作、版本控制等方面的需求”。为此,平台提供了可视化设计器、应用调试与预览、一站式部署发布、三方集成能力、依赖管理等功能。
平台的集成开发环境(IDE)部署在云端,是一款与 CodeSpace 有些类似的 WebIDE,它能够支撑日常软件研发所需和软件工程所需,同时提供应用三方集成的有效手段,以提高开发者应用构建效率和可能性。它包括以下组件:
可视化设计器:可视化设计器提供了 NASL 语言的可视化投影,使得低代码开发者可以通过可视化拖拉拽的形式来编写 NASL 语言。包含页面设计器、数据设计器、逻辑设计器、流程设计器等。同时可视化设计器提供了撤销重做、复制粘贴等便捷操作能力。
应用调试与预览:应用调试的技术实现主要依赖 Debugger 提供的一整套高性能 API,包含 breakpoint、step into、step over、resume、evaluation 等能力。此外,集成开发环境支持应用的快速预览,我们通过状态机设计,预热和热加载等一系列技术优化,大大加快了预览速度。应用调试和预览,都是在 NASL 语言阶段性编写完成后,及时验证程序正确性的手段。
多人协作和版本控制:基于 NASL 仓库实现的版本控制功能和多人协作功能。技术选型上,我们选取了基于基线研发的工程规范,是低代码开发过程中小范围协作的最佳实践。
应用集成:提供 API、数据库、文件存储、认证源等三方集成能力,使得低代码应用可以便捷快速地与其他应用,PaaS 中间件,开放平台等三方能力对接,从而方便构建更加复杂的业务解决方案。
应用部署与导出:支持集成平台一站式部署发布,同时也支持应用的导出,其中导出包括源代码导出和 Docker 镜像导出,此外集成开发环境还支持将应用一键部署到公有云运行(如阿里云),这也是我们相对于引擎式低代码平台的最大区别。
依赖管理:设计与实现了一套依赖管理协议,支持模板和库的导入、导出、版本检测等,并托管到资产中心。
NASL 语言及其配套设施
低代码语言及其配套设施的设计目标是”高效表达应用编程意图,快速构建软件应用,同时注重代码与程序的安全性”。为此,我们设计了 NetEase Application Specific Language(简称 NASL),即网易轻舟低代码用于描述 Web 应用的领域特定语言,它主要包含基础语言和 Web 应用特定领域的子语言(如数据定义、数据查询、页面、流程、权限等)两部分。NASL 语言作为整个低代码平台的内核,是对应用编程语义模型的核心抽象,用于承接用户应用编程意图的高效表达。借助于 NASL 和配套的语言设施,低代码开发者可以快速构建软件应用。它包括以下组件:
Language Server:NASL 语义的最佳实践,包含类型检查、推断、跳转定义、自动补全等能力,在低代码应用编辑期提供辅助手段,减少编程出错概率,提高编程效率,一定程度保证了程序安全性。架构设计上,我们采取 LSP (Language Server Protocol) 标准化的协议,研发出针对 NASL 语言的编辑器和 IDE 的语言服务。
Debugger:针对与 NASL 语言研发的调试器,设计并定义了 breakpoint、step into、step over、resume、evaluation 等调试 API,是集成开发环境可以实现 NASL 断点调试的基础。
Generator:NASL 语义编译器。低代码平台借助于 Generator,将 NASL 语言编译为 java、js 等通用语言,再借助底层通用语言的运行时设施如 jvm,将 NASL 语言运行在计算机上。
NASL 仓库:用于实时保存用户构建应用所产生的 NASL 代码,并满足高性能、高可用、高可靠等特性,技术选型上,我们选取了 mongodb 作为存储。同时设计并实现了一套提供了代码合并、拉取、冲突检测、合并、暂存、标签等基础 API,是集成开发环境实现多人协作和版本控制的基础。
资产中心
低代码资产中心的设计目标是“方便用户进行软件资产的管理、复用和查询,以提高开发效率和质量”。资产中心提供了多种多样的应用和局部模板,并支持根据自身需求场景一键生成应用,有利于快速构建符合平台标准的库以及提高代码重用性。
模板管理:对集成开发平台自身导出的模板的管理。模板中心提供了各种应用和局部模板,根据不同的需求场景,开发者可以选择相应的模板,一键生成应用,并在此基础上进行个性化修改,以适应自身业务需求。
库管理:对 NASL 库和扩展库的管理。库是一组可被低代码应用依赖使用的编程能力,按照产生方式的不同被分为 NASL 库和扩展库。NASL 库是一组在低代码平台上开发好的通用功能,供所有应用程序共享使用。扩展库是由专业程序员使用 Java 或 JavaScript 开发的,可以被低代码应用依赖使用的编程能力,它们通过平台脚手架导入到资产中心来使用。
此外,资产中心还遵循着信息管理中“标签化”、“分类化”、“规范化”的原则,使得软件资产可以更好地进行管理、维护和查询。资产中心是平台构建软件资产和复用软件资产的(最)直接体现。
云原生基座
低代码作为一个 APaaS 平台,我们选取了云原生技术作为支撑整个平台和应用运行的基座,其设计目标是“提供支持高度可扩展、高度可观测、快速部署、故障隔离、运行安全”的上层应用程序。主要技术如下:
K8s 与容器云技术。目前支持开源 K8s 以及网易 kubecube 容器云平台,其中开源 K8s 作为我们首推的轻量部署最佳实践。未来根据前方市场需求还可以支持各类容器云平台,如华为 CCE,阿里 ACS。
CI / CD。目前平台的 CI / CD 云原生可扩展性强,跨平台兼容性优秀的 Jenkins 实现。
可观测性技术。可观测性技术主要包含 logging、metrics 和 tracing 三个部分,目前技术选型上选取了业界公认的 Prometheus 作为平台的监控核心组件,日志服务通过 Loggie 和 ElasticSearch 搭建了一套云原生日志平台。
对象存储。低代码平台存在大量运行时需要依赖的静态资源,我们选取了云原生对象存储中的佼佼者, 兼容 S3 的 MinIO,其轻量部署和高性能低延迟的特性完美契合了低代码平台的核心要素。
结语
我们在这篇文章中讨论了低代码架构设计的背景、挑战和需求,并展示了 CodeWave 智能开发平台前身轻舟低代码平台的架构设计:我们首先分析了企业在数字化转型过程中面临的挑战,如开发人力成本高、项目建设效率低、缺乏软件生产最佳实践等。我们提议使用低代码平台来解决这些问题,而该平台需要具备缩减概念、可视化的开发环境、资产中心、统一的前后端语言、可用性、安全性以及协作等能力。针对这些需求,我们展示了轻舟低代码平台的架构设计并详细介绍了平台的五大模块:平台服务、集成开发环境、NASL 语言及其配套设施、资产中心和云原生基座。这种设计的宗旨乃是帮助企业提高数字化转型的效率和质量。
作者: 网易数帆低代码架构团队 & 编程语言实验室
网易数帆编程语言实验室:负责轻舟低代码平台核心编程能力的设计,包括类型系统、语义语法、声明式编程、可视化交互等 NASL 的语言设计,Language Server、可视化引擎等,以及后续演进方案的规划和预研,旨在创造低门槛高上限的低代码开发体验。
评论 1 条评论