导语 | 本文将带大家深入聊聊微搭的技术架构,快来了解微搭是如何安全、稳定、可靠地支撑商业级应用从搭建到发布上线的。
腾讯云微搭低代码是高效、高性能的企业级低代码平台。帮助开发者快速搭建支持多种业务场景的小程序、H5、PC WEB应用,通过简单的拖拉拽操作,而不用编写复杂的代码,实现少写代码或者不写代码,就能快速高效完成业务目标。
腾讯云微搭低代码官方网址:
https://cloud.tencent.com/product/weda
一、低代码平台演进
(一)低代码概念
低代码是无需编码(0代码)或通过少量代码就可以快速生成应用程序的开发平台。
通过可视化进行应用程序开发的方法,具有不同经验水平的开发人员可以通过图形化的用户界面,使用拖拽组件和模型驱动的逻辑来创建网页和移动应用程序。
(二)低代码衍生历程
(三)为什么要用低代码?
低代码开发能够为企业降低成本,提升效率。在过去,低代码平台出现之前,传统的原生代码开发平台需要进行代码开发,开发完成之后需要进行测试以及bug修复的一系列繁琐工作。
此外,传统的原生代码开发平台涉及到一些上下游合作方是紧耦合的串行开发模型,依赖方不提供接口,上游服务也没有办法进行该接口的开发工作。这增加了开发过程中大量的沟通成本和时间成本。
低代码开发平台出现后,研发人员可以通过前端图形化的拖拉拽实现需求,实现了研发效率的提高,使用低代码平台降低了研发人员的工作量和对编码人员开发技能的要求。低代码平台套用封装代码,基本消除测试修复bug的环节。同时,低代码开发平台是松耦合的并发开发模型,大大降低开发中对合作方的依赖性,从而降低沟通和时间成本。
传统开发模式下:业务、产品、设计、开发、测试与运维人员各司其职,且各有一套领域内的工具和语言,长久以来很容易形成一个个“竖井”,让跨职能的沟通变得困难而低效。
有了低代码后,我们能够基于低代码快速的进行开发,这一状况将得到改善。由于低代码上手容易,无需经过太多专业的训练,业务人员也可以快速上手,通过“拖拉拽”,基于模板或者可视化界面快速生成应用,从而打破业务壁垒。
企业可以利用低代码平台发可以轻松地更改应用和业务流程,而无需花费大量时间编写代码。应用和系统的灵活性、可操作性和可更改性大大提高。
在经济新常态下,为了提高经营效率和经营表现,数字化转型是大多数传统企业的目标,而低代码技术可以帮助企业更快更好地完成数字化转型。
相比于纯代码开发,使用低代码开发企业应用能将项目的交付周期大幅缩短,从而更敏捷地完成项目交付,大幅提升企业数字化的速度。敏捷交付的背后是更多次数的迭代,以及软件系统与企业贴合度的大幅提升,而这点是企业数字化转型成败的关键。
此处用一个象限图来说明业界低代码的演进方向,首先从看到图中的箭头,左下到右上,我们从传统的编程模式是逐渐向无码化来演进的。
左下的代码编程,就是我们传统的编程阶段。前提是需要有一些比较强的编程能力。从早期的低级语言、到高级语言、进而到类库的提供、以及组件的使用。
右上的无码操作,指的是无代码、通用SaaS类的产品是可以让我们进行简单快捷的进行操作生成应用,但他们的灵活性是不够的,如果要支持灵活性和扩展性往往需要我们改变他们。
有没有一种更好的方式,能够支持这种情况?我认为最理想的情况是,在开发者不懂前端语言(JavaScript等)或者不懂后端语言(Php、Java等)的情况下,依然能开发一个足够灵活、足够通用的应用。我认为,低代码平台就是最接近这一个领域的手段,因其可以同时兼顾灵活性和业务逻辑,从而达到最适合开发小白的需求的理想状态。
低代码行业最近几年一直被知名咨询机构Gartner所关注。目前,国内外都有很多企业在加入低代码平台搭建,足以说明这个行业的市场认可程度。
从咨询机构Gartner的市场分析来看,2023年全球超过50%的大中型企业将把低代码应用平台作为主要的占领应用平台之一。预计到2024年,低代码应用程序开发将占总应用开发的65%以上。
低代码的平台具备的核心能力要素,我认为有四点:
下面针对以上四点逐一分析:
业务人员基于可视化的页面或工具能够进行简单拖拉拽、可以形成一个页面信息。
他们也能够基于可视化界面来配置定义数据源和数据模型、简单定义一个流程,可以执行工作流。
总而言之,就是前端拖拉拽可以形成前端的交互语言,进而生成后端可以执行的计算机语言。
低代码平台,能够可以通过页面上的操作进行定义一个模型定义,可以灵活的定义模型中的字段、也可以进行相关数据表的关联操作,以及设置数据模型的规则和索引。
进行数据库模型的设计、添加字段,设置字段的类型以及索引。
建立数据库表与表之间的关系,具体表现为1对n、n对n、n对1、1对1等关联关系。
基于数据库表对外提供一个CRUD的操作,让应用能够操作该数据模型。
是指低代码平台是否可以提供一些机制来进行扩展。具体的扩展方式有以下三点:
低代码平台是否能够我熟悉的语言来扩展,假如我是前端开发者,能否提供前端熟悉的语言来扩展,假如我是后端开发者,能否基于写一些后端代码(Java、Go等)来扩展。
低代码平台能否通过定义一些流程图也进行业务逻辑的扩展,来执行业务if、else的流程来做业务上的一些调用。
低代码平台是否可以通过低码平台搭建的应用与第三方公司已有的系统或者服务做集成,能否在低码中通过API做集成过来,供我的应用来调用集成。
低代码平台是否可以进行本地开发调试、版本控制、自动构建发布上线、免运费以及监控的一些能力。简单来说是否在该平台上一站式配套的能力。
低代码平台要能够进行本地的开发调试。
低代码平台可以进行版本回退操作,以及有能力可以预留体验,回退体验的时候不会影响到发布态的产物。
低代码平台可以自动构建发布上线、免运费以及配套监控的一站式能力。
二、微搭低代码架构和开发简介
(一)微搭低代码介绍
微搭低代码平台是高效、高性能的拖拽式低代码开发平台,向上连接前端的行业业务,向下连接云计算的海量能力,助力企业垂直上云。微搭以云开发作为底层支撑,云原生能力将应用搭建的全链路打通,提供高度开放的开发环境。
微搭低代码是低代码应用程序平台(LCAPS)+多维体验开发平台(MXDP)的结合体。
我们有以下能力:
一套代码,可以同时支持多端、小程序、web、pc都可用。
我们内部集成了腾讯文档,腾讯会议、微信支付、企微等能力,可以一站式用用户提供能力。
内部提供了模型组件、企业工作台等高阶组件。
提供了开箱即用的能力,可以通过我们的应用市场、模板中心可以快速的进行业务开发和发布。
底层是serverless云原生技术,业务开发完成之后,业务上的是免运维免部署。
提供了框架开发的规范,便于统一的管理。
支持高扩展性,高扩展性能够自定义组件、第三方数据源完成自定义逻辑的扩展。
业务模式上支持可视化开发、低代码开发的能力。
(二)微搭低代码产品架构
微搭低代码提供了应用开发的一站式低代码开发服务,从底层能力迭代至行业级方案,云原生全链路支撑为您的应用保驾护航,让您能够完全专注于业务场景,小白也可以极速搭建出成熟、专业的应用。
(三)微搭低代码后端实践
我们看下微搭低代码的后端实践,那么我们思考下后端低代码需要解决什么问题?我认为应该有四点,以及具体在微搭低代码平台是如何实践的:
微搭低代码抽象出了数据模型。
微搭低代码基于工作流来进行业务流程流转。
微搭低代码建立了用户权限平台,来进行人员角色的控制。
微搭低代码通过云函数来实现后端服务的自定义扩展能力。
所以我们微搭低代码后端开发实践分为以下四种:数据模型、工作流、角色权限、服务端扩展。
我们逐一看下具体每个是如何设计的:
数据模型基于业界标准的能力JSONSchema来进行扩展,数据模型分为内部数据源和外部数据源两种。
连接器:
连接器可以打通外部应用数据或调用外部应用开放的服务,开发者只需要对连接器完成授权或少量填写一些配置信息,即可使用对应产品的服务接口。
我们内部集成一些企业级的应用,比如腾讯会议、腾讯文档、腾讯地图、微信支付等应用,方便快速提供一些企业级的能力给到开发者。
自定义连接器
自定义连接器支持调用第三方服务接口或使用代码来实现业务逻辑。开发者可以在应用、工作流、自定义数据模型中使用。
分为http和云函数模式:
http:开放式API,用户来链接外部的服务,与外部API来做集成。
云函数模式:完全自定义,当用户以上所有的场景均不能满足的时候,可以通过云函数的来手动写一些代码来自定义一些逻辑,实现业务上的逻辑扩展。
工作流基于业界标准bpmn协议来扩展,数据展示和存储基于标准JSON来处理可读性更高。
微搭工作流的触发时间:
角色权限整体遵循RBAC模型来进行设计的,业务上可灵活的支持扩展。具体用户能够访问哪些页面、数据源、以及流程权限等,我们也支持设置一些权限集,以便于灵活地进行业务上权限的扩展。
从下边的图可以看到,我们可以控制普通应用的访问权限,页面权限以及页面下的按钮权限,也可以控制模型应用的权限;
可以控制数据源的行记录,数据源方法权限,数据源列权限,也能够对流程的访问权限做控制,还可以控制企业工作的访问和登录权限等操作。
服务端的扩展基于云函数的能力,通过页面可视化编写代码来进行服务端逻辑的扩展。可以做一些数据表的聚合,以及CRUD等操作方法。
*云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。
(四)微搭应用开发流程
此处将介绍基于微搭拖拉拽来快速构建一个应用的生命周期,整个低码应用开发和运行的生命周期,以及低码在设计态和运行态做了什么。
在微搭的应用开发流程中,微搭应用的生命周期分为设计态和开发态。
我们通过前端可视化的界面和组件,进行表单定义模型及定义模型关联关系。我们还可以针对表单配置用户和权限、也可以通过页面来操作配置一些工作流。我们可以拖拉拽配置一些页面,生成页面的DSL。配置数据模型,生成数据的JSONSchema DSL。配置流程生成流程的BPMN扩展,基于角色绑定用户权限,生成RBAC模型的DSL。
在发布的时候,我们前端H5会生成Reat代码、小程序会生成小程序代码。发布之后,前端代码会发布在静态托管中,服务端自定义扩展服务逻辑是部署在云函数中。
客户会从web或者小程序发起调用,会经过访问经过我们的静态托管以及云函数和云数据库,进而将请求分为到微搭侧后端中心化服务,和企业第三方服务。
(五)微搭高可用服务能力
一个高可用的服务需要从部署、变更、预案、监控、安全等多方面考虑。达到99.99%服务高可用的目标,需要各角色的工程师共同努力。本文简单介绍下微搭在消除单点和弹性伸缩这块的实践。
单点有两种场景:一种是某个模块仅部署了一个实例;第二种是某个模块虽然部署了多个实例,但任意实例故障都会导致服务整体或者大面积不可用。如何识别系统单点?通过排查模块的实例数量和进行破坏性测试来发现系统中是否存在单点。对于已知的单点,则应该尽量做好预案,减少故障时长。
针对这种情况,微搭一是在每个集群部署了多个POD来消除集群内单点,另外一块针对集群1整体挂掉的情况下,也可快速切换集群来消除单点,保障服务的稳定性。
弹性伸缩是根据业务需求和策略,针对无状态的服务,通过定时、阈值设定等方式,自动调整集群规模,举例来说,对于大促,机房故障等灾难场景,能够很好的提升可用性。伸缩顾名思义,有伸也有缩,缩的特性,可能让集群维持在一个合理的规模上,从而避免造成不必要的成本浪费。因此,弹性伸缩也是常态下系统保持可用性的重要手段。
微搭是基于serverless自动弹性伸缩云原生的能力,来保证我们后端服务整体的高可用。当流量高的时候自动来扩容机器,当流量低的来实时缩容服务器。
三、微低代码的未来趋势
从2020年开始,低代码成为了业界热点,无论是资本市场还是企业用户都纷纷追捧。那么在未来,低代码平台会如何发展呢?在我个人理解中,低代码平台开发将会沿两个维度演进:
通用性,也就是语言属性维度;随着低代码开发平台的不断成熟和发展,低代码开发平台逐渐具备通用场景的开发能力,例如可以开发网站、游戏、3D场景、电商、企业应用、个人应用;支持的系统也会更加全面,例如支持WebApp、iOS/Android、Windows/Mac/Linux、小程序等各种应用。
便捷性,也就是指代码量不断降低的过程,最终将实现0代码编程。
但是通用性和便捷性要想同时实现,是非常困难的,这也是低代码开发平台急需解决的问题和下一个挑战。最终使“去掉程序语法,保留程序逻辑”成为可能。
最后也回答下大家比较关心的一个问题:低代码会取代程序员吗?
我认为低代码解决的是可抽象的,通用的且可复用的产品能力,程序员作为高端技术人才,市场缺口巨大,低代码工具是将程序员从现有的重复的枯燥的接口开发中解放出来。程序员应该更关注业务创造方面的技术研究和开发。低代码是工具,低代码与程序员之间的关系就像翻译软件与译者,数据统计系统与数据分析师,工具的目的是减少重复的劳作而将人力投入更有意义、有价值的研究之中。
本文作者:谢艳祥,腾讯云微搭高级工程师,专注于后端研发效能提升,工程化体系建设。在性能优化、研发效能、架构高可用设计等方向有一定的落地实践经验。