鲁班-58房产低代码平台设计与实践
1
导读
鲁班全栈式低代码开发平台(以下简称鲁班)是58房产自研的全栈式低代码开发平台,我们的目标是:人人都可以成为全栈开发工程师。让后端人员可以干一些简单的前端工作,让前端人员可以干一些简单的后端工作。2023年4月初上线,截止目前已经拥有300 的用户,开发了40 的应用,并上线了270 模型、900 页面、1600 的接口。
图1:鲁班目前的使用情况(这个图表也是用鲁班开发)
2
背景
2.1 传统开发模式的不足
场景1: 我是一个后端开发工程师,日常工作是后端系统开发,主要精力更关注于高并发、大数据、高性能的架构设计、服务优化等。但是偶尔也会有需求要做一两个前端页面,为产品或者运维提供后端的数据查询、报表展示、配置操作等。比如房产这边做真房源项目中,产品上线一个新的治理策略之前,希望能够先通过一个搜索页面把一些房源搜索出来,手动处理一部分看看效果。这种情况下在后端基础能力已经存在的情况下,就需要前端支持开发这个页面,需要跨部门协作、PMO排期、开发测试上线。如果按照传统开发模式,走需求评审,排期,开发,测试,交付周期会很长,且资源紧张情况下,还存在被更高优需求替代的现象。
场景2: 我是一个前端开发工程师/IOS/安卓开发工程师,日常工作是主要前端页面与样式的开发和功能实现。但是偶尔也会有一些小的需求,需要做数据库的增删改查操作,需要将这些操作封装成接口供前端调用。比如房产做的58房产门户网站内部系统,前端同学就需要自己设计数据库存储各网站的url地址、分类关系等,并需要提供增删改查等操作。前端同学对于数据库的设计、调用、接口封装等并不熟悉,需要后端同学支持。
随着软件开发规模的增加和复杂度的提升,将软件开发人员划分为不同的角色,如前端开发、后端开发、数据库工程师、算法工程师、测试人员等,这种划分使得不同开发人员能够专注自己的领域,但是同时也带来一些缺点:
1.知识隔离:过于精细的分工可能导致不同角色之间的知识隔离,缺乏全局视野。这可能使得团队难以应对快速变化的需求和市场环境。
2.沟通成本:不同角色之间的沟通可能会增加,需要花费更多时间解释和协调工作,这可能增加沟通成本。
3.资源浪费:用造飞机的人员分工和流程管理来造一辆自行车,对于一些轻量级的需求也要调动前后端资源和走一遍全部开发流程,高射炮打蚊子,杀鸡用牛刀。
图2: 低代码平台和传统开发的比较
2.2 低代码平台调研分析
在鲁班项目启动之初,我们调研了市场上的低代码和零代码平台,这些平台对鲁班的设计和研发提供了参考和借鉴。
企业 | 日期 | 产品 | 定位 | 功能特性 |
腾讯 | 2022年公测 | 微搭 | 小程序、H5 应用、Web 应用等 | 1.面向前端,拖拽式开发 |
阿里 | 2019年发布 | 宜搭 | 低代码企业级应用搭建SAAS平台 | 1.可视化搭建应用 3.集成钉钉快速应用 |
ClickPass | 2017年创立 | ClickPaas | 企业级低代码开发平台 | 1.开发速度快,项目周期短 |
明道云 | 2013年成立 | 明道云 | 零代码,销售、运营、人事、采购等核心业务应用 | 1.云原生架构 |
码匠 | 2018年成立 | 码匠 | 面向开发者的低代码平台,可以帮助企业快速构建和部署应用程序 | 1.模型驱动开发模式 |
百度 | 暂无 | 爱速搭 | 更灵活、更强大、更智能应用可视化设计与发布平台 | 1.零代码搭建 |
携程 | 2023年3月 | PGClowcode | 客户端(App、小程序、网页)和运营后台 | 1.拖拽生成页面 |
表1:低代码零代码产品调研
考虑到我们的实际应用场景,我们面对C端的场景,要求功能复杂、交互友好、流量大、性能要求高的场景,肯定还是优先选择传统的开发模式。只有面对B端的场景和一些内部系统,不要求界面精美,可用就行,能够开发简单,快速上线。所以鲁班低代码平台的定位就是面对B端场景和一些内部系统。
这些内部系统需要支持58的OA账号登录鉴权、需要能够私有化部署在58私有云、需要能够支持58的通用底层框架访问(例如58的内部RPC系统SCF服务、分布式消息WMB、存储系统WOS等)、需要能够通过内网访问58的内部其他系统(例如经纪人账号、商业订单等)。这些诉求就决定了我们不可能采用外部的低代码平台,只能自研。
2.3 鲁班的目标
鲁班全栈式低代码开发平台,可以帮助后端开发人员做一些轻量级前端的工作,帮助前端开发人员做一些轻量级后端的工作,人人都可以成为全栈开发工程师。降低技术门槛,减少沟通成本,提高开发效率,快速迭代和修改,易于集成和扩展。
3
鲁班的功能介绍
3.1 拖转生成页面
鲁班可以通过可视化拖拽的方式,让开发人员能够快速创建和布局应用界面。以下是鲁班拖拽生成页面功能的详细介绍:
1.直观的可视化拖拽界面:低代码开发平台提供了一个直观的可视化拖拽界面,开发人员可以通过简单的拖拽操作来创建和布局应用界面。这种方式使得界面设计更加快速和灵活,无需编写繁琐的代码。
2.丰富的组件库:低代码开发平台提供了丰富的组件库,包括文本框、按钮、表单、图片、图表等常见元素,以及各种业务单据和业务逻辑组件。这些组件可以满足不同应用程序所需的通用核心功能,因此可以重复使用,以更快地开发不同的解决方案。
3.可重用性:低代码开发平台拥有完善的功能模块体系,不同模块可以满足不同应用程序所需的通用核心功能,因此可以重复使用,以更快地开发不同的解决方案。
4.可扩展性:为了实现各个信息系统的整合,方便统一管理和用户访问,低代码开发平台提供了丰富的集成接口,支持。
5.多种集成方式:可以很方便地与第三方系统集成,包括市场上多个领域的主流产品,都可以实现无缝对接。跨平台可访问性:低代码开发平台的全生命周期管理使得应用程序可以轻松地实现跨平台访问,包括PC端、移动端、平板电脑等设备。
总的来说,鲁班拖拽生成页面功能通过直观的可视化拖拽界面和丰富的组件库,使得开发人员能够快速创建和布局应用界面,提高了开发效率和质量。同时,该功能还具有可重用性、可扩展性和跨平台可访问性等特点,能够满足不同应用程序的开发需求。
图3:鲁班页面设计器
图4:多端支持
3.2 数据可视化
鲁班的数据可视化功能是其重要的组成部分,它可以帮助开发人员快速、直观地展示数据,提供更好的决策支持。以下是对鲁班低代码平台数据可视化功能的介绍:
1.数据驱动的可视化设计:低代码平台的数据可视化功能通常采用数据驱动的方式进行设计,用户可以通过简单的拖拽和配置操作,将数据源与可视化组件进行绑定,实现数据的实时展示。
2.丰富的可视化组件:低代码平台提供了丰富的可视化组件,如折线图、柱状图、饼图、地图等,用户可以根据需要选择合适的组件进行数据展示。同时,这些组件通常支持自定义样式和交互行为,以满足不同场景下的需求。
3.数据实时更新:低代码平台的数据可视化功能支持数据实时更新,当数据源发生变化时,可视化组件会自动更新展示内容,无需人工干预。这使得用户可以及时了解数据变化,做出相应决策。
4.数据交互与联动:低代码平台的数据可视化功能还支持数据交互与联动,用户可以通过点击、滑动等操作,对数据进行筛选、排序等操作,实现数据的个性化展示。同时,不同组件之间也可以实现联动效果,提高用户体验。
总之,鲁班平台的数据可视化功能为用户提供了直观、高效的数据展示方式,帮助用户更好地理解和分析数据,为决策提供有力支持。
图5:数据源与可视化组件绑定
图6:丰富的可视化组件
3.3 快速生成接口
鲁班支持根据一张表生成CRUD一组http接口,同时能支持将现有的SCF接口(58自研RPC框架)导入并转换成http接口的能力。生成的接口支持直接访问和在页面绑定数据源展示使用两种方式。
鲁班生成的接口,可以直接作为后台http接口对外提供接口服务,也可以作为页面数据源方式与页面组件进行绑定。
图7:根据数据库表生成http接口
图8:SCF接口导入生成http接口
3.4 角色与权限
鲁班的用户分为开发用户和应用使用用户两套用户体系。
同样角色和权限也分为开发用户角色和权限、应用使用用户角色及权限。
图9: 开发用户及权限
3.5 扩展性支持
低代码平台通过拖拉拽的方式生成页面,通过sql方式或者接口导入方式生成接口,这种方式方便快捷,但是也有缺点,就是灵活性不足。比如接口返回日期数据是时间戳,但是页面想展示成日期格式。或者是在导入的接口调用之后,对出入参数进行加工。
为了解决这个问题,鲁班支持扩展代码方式对现有功能进行扩展,同时能够支持前端扩展代码(js代码)对页面数据进行扩展和后端扩展代码java方式对接口调用做before()和after()的执行。
图10: 前端扩展代码
图11: 后端扩展代码
对于后端扩展代码,为了开发方便及开发习惯,支持代码下载到本地进行IDEA进行编辑,并支持将运行时数据调用本地代码进行本地调试。
图12: 本地debug模式
4
鲁班的设计与实现
4.1 整体架构设计
图13: 鲁班整体架构图
鲁班整体上分为开发环境和运行环境:开发环境是供开发人员使用的系统,提供页面、接口开发、数据源配置、打包部署上线等功能。运行环境是应用的运行环境,是一个web系统,对外提供http接口,每个应用一个独立的运行环境,互相隔离。
整体上分为4层:基础设施层、中间件层、引擎层、业务中台层,其中前端引擎和后端引擎是核心。
同时提供了openApi功能可以对外提供服务,和内置了一些58内部系统的登录、访问、鉴权等能力。
4.2 元数据设计
1.前端页面设计:
页面设计的内容以元数据DSL格式存储在mongodb数据库中,在运行时动态加载,并通过页面解析器解析展示。
鲁班的前端页面代码是把页面信息编辑成JSON Schema,平台生成JSON Schema是在formily/json-schema规范的基础上扩展了部分字段,以来兼容非form组件的渲染。其中大部分字段可以在formily的文档中找到属性描述。
图14: 前端页面元数据设计
2.接口出入参模版设计:
鲁班目前支持14种接口类型,新增、修改、单条删除、批量删除、分页列表、无分页列表、下拉框列表、数量查询、批量id查询、详情、全部导出、批量导出、自定义导出、自定义类型。这些接口类型主要是定义了出入参模版,供页面或者直接使用。这些接口出入参的定义,也是用JSON Schema方式存储下来作为元数据使用。
使用的场景有:接口出入参展示、格式校验、数据转换等。
图15: 接口出入参模版元数据设计
4.3 前端引擎
前端引擎主要有页面设计器、图标设计器、js扩展代码等组成。
图16: DSL解析器
首先设计器会加载所需组件库、组件属性设置器等物料,接着开发人员根据产品需求在画布中进行布局设置、组件 CRUD 操作、API属性配置和逻辑编排等操作,这些操作会不断生成操作节点模型,然后设计器将操作节点模型转化成页面描述即JSON chema,此为设计器的产物。最后经过解析器进行生命周期、事件流、数据绑定等逻辑处理并渲染成真实页面。
组件与数据层的绑定:组件需要被鲁班特定方法包裹,该方法判断组件是否为受控组件,如果是则将组件的value、onchange方法与数据字段模型Field绑定,从而实现第三方组件数据与页面数据双绑的能力。除组件数据外,组件的描述、校验状态、校验方法等均可绑定。整个方案不会破坏存量组件库,改造动作小,且不影响其在传统开发项目中的正常使用。
图17:组件与数据层绑定
4.4 多租户、多环境与隔离性
4.4.1 多租户
鲁班低代码开发平台是一种典型的Saas模式,每个应用都是独立一套云集群环境,集群间重启、版本部署、元数据、网络链路等皆互不影响。
图18:多租户
4.4.2 多环境
鲁班低代码平台分为开发环境和运行环境。
开发环境是开发人员开发接口、设计页面的开发平台,用户开发设计的页面、数据库元数据、接口元数据、变量、扩展代码等都存储在开发环境。
运行环境是系统实际运行的平台,分为开发环境和正式环境,部署在K8s集群,以及58集团私有云环境。用户开发完的应用,可以不用上线,直接在开发环境云行及预览。
待开发完成在开发环境测试联调通过之后,可以在鲁班一键打包并部署到正式环境,同时根据部署包支持回滚到某个指定版本。
图19: 多环境支持
多环境环境变量:
鲁班运行环境分为开发环境和正式环境,开发环境是根据用户开发的内容实时显示,正式环境需要打包上线之后才会更新内容。在日常的开发过程中,有些配置信息需要开发环境和正式环境不同,比如使用的数据库配置,开发环境用测试库,正式环境用线上库;调用的接口开发时用开发环境的接口,上线之后用正式环境的接口。在使用的变量的环节用luban.${var_name}表示,在运行时会从变量定义中进行替换。
图20: 多环境环境变量
4.4.3 隔离性
设计时环境与运行时环境相隔离,设计时开发存储于元数据,运行时只依赖于元数据并提供缓存功能。即使运行时出现问题,不影响运行时的原型。
运行时的开发环境和正式环境相隔离,开发环境依赖开发环境的元数据,随着用户的开发实时变化,正式环境的元数据只有打包部署之后才会更新,开发环境的变动不会影响运行环境,保证了运行环境的稳定性。
鲁班不同的应用互相隔离,运行在各自不同的docker容器中,互相不会影响。
4.5 版本管理
图21: 版本管理
鲁班的node运行环境、java运行环境都是容器(docker镜像)。这些运行环境的容器都是通用的,可以运行任何一个应用。
鲁班低代码平台将页面元数据、接口元数据、配置信息、扩展代码等打成一个运行时版本包。
在部署环节只要将某个版本的运行环境部署,并将这些应用元数据信息加载,加载A应用的元数据信息就是A应用的运行环境,加载B应用的运行信息就是B应用的运行环境。
这种设计实现了应用和运行环境的隔离,可以实现同一个应用的部署升级、回滚、灰度等操作。
4.6 路由规则
鲁班的运行环境和应用是相互隔离的,鲁班通过统一的网关来进行路由分发。路由规则有三层,分别是:环境、组织、应用。鲁班的接口调用规则如下:luban.58corp.com/{env}/{org}/{app}/path。其中env表示环境信息:开发环境offline or 线上环境online。org表示组织代码,app表示应用代码。
图22: 路由规则
4.7 扩展性设计
4.7.1 接口参数映射
有时候,原始导入的接口参数,并不满足用户希望提供的接口参数诉求,鲁班支持对接口的出入参进行映射扩展。
图23: 出入参映射
4.7.2 接口扩展代码
图24: 接口扩展代码
鲁班支持对每个接口做切面扩展,在接口的调用之前执行before方法和执行之后再执行after方法。
鲁班对于接口的扩展代码,以元数据的方式存储在代码仓库中,在运行时动态加载动态编译方式加载到运行环境中,当代码有更新时,开发环境动态拉取最新代码重新加载编译,线上环境为了系统的稳定性,只有在用户点击打包上线之后才会更新代码。
因为页面自带开发工具不如本地IDEA好用,鲁班平台支持将扩展代码下载到本地进行编辑调试,并可以在本地启动一个web系统,在运行时通过本地debug开关和ip port的方式,将before/after的接口请求转发到本地进行调试。
调试成功的接口,可以通过push方式更新到代码仓库。
luban-SDK提供了鲁班低代码平台常用的一些能力,比如获取应用信息、用户登录信息、调用平台其他接口功能等。
5
接入案例分享
5.1 安心交易
为推进二手房交易规范化,帮助更多用户实现安心交易,58同城、安居客携手合和致远、邦安家,为全国用户提供“安心交易保障”,目前,“安心交易保障”已经在武汉、太原、长沙、西安、杭州 、南京、郑州、珠海、青岛等10几个城市的糯家、邦安家、安个家等合作门店推行。
安心交易主要用到了鲁班根据数据库表自动生成CRUD接口和操作页面,开发了53个接口,14个页面。降低了开发难度,提高了开发效率,减少了人员投入,相比传统开发方式,人力投入从2人减少到1.5人,开发周期从24天减少到17天。
图25: 安心交易
5.2 房产SKU管理后台
房产SKU管理后台是为开发、测试、运营人员提供的一个查询后台,提供了SKU信息、挂靠关系、操作日志能的查询功能。这些能力是通过后台服务提供接口(SCF服务,58内部RPC服务),鲁班通过接口设计功能将这些接口转换成http接口,并通过拖拉拽方式设计查询或者操作页面进行数据绑定,从而实现了对后台数据的访问。
主要用到了鲁班后台接口导入和页面拖拉拽编辑功能,所有功能都完全由SKU后台开发人员负责,降低了开发难度,减少了跨部门协作和业务沟通成本。人员投入由传统开发方式的2人将低到1人,开发周期从13天减少为5天。
图26: 房产sku后台
5.3 房产门户网站
房产门户网站是58房产内部系统,将所有房产业务群常用的网站进行分类整理,统一门户。房产的产品、开发、运营、测试可以一站直达任意网站。
58房产门户网站的开发模式是为前端开发人员提供后端开发的能力,前端开发人员利用鲁班配置连接数据库,并对数据库表提供CRUD的功能,对外提供访问接口,这些数据库表存储了分类网站的类别、网站url地址等信息。
因为整个开发都只有前端同学参与,人员投入由传统开发方式的2人降低到1.5人,开发周期从21天减少为15天。
图27:房产门户网站
6
总结及展望
6.1 总结
1.目前市场上的常见的低代码平台,例如阿里宜搭、腾讯微搭、简道云、轻流等,基本上是偏前端的使用场景,注重页面设计,对于后端支持一般比较弱,扩展性不足。鲁班低代码平台是前后端结合的低代码平台,后端功能甚至要重于前端设计,主要体现在快速接口搭建、后端扩展代码的支持等方面。
2.鲁班低代码平台对58的基础能力的支持,比如针对58内部RPC框架SCF的接口一键导入、58内部OA账号登录等,提升了内部用户使用效率。同时依托58提供的私有云,部署运行环境时即可以部署原生k8s,也可以部署在58私有云平台,兼顾了灵活性和稳定性的要求。
3.鲁班低代码平台的高扩展性,尤其是后端扩展代码 SDK结合的能力,甚至可以当作一个独立的web开发框架使用,开发便捷、部署灵活。
6.2 未来规划
1.流程引擎,常用的业务场景有工作流、审批流等。
2.内嵌的模式,鲁班开发的页面或者接口能够内嵌到其他系统使用,其他系统的接口或者页面能够内嵌到鲁班应用中使用,取长补短,互相补充。这种方式目前可以部分支持,未来希望能够做到无缝连接,更便捷。
3.交互设计优化,在实际使用中我们发现,在一些开发场景中,对开发者的使用引导还有欠缺,初次使用有一定的学习成本,未来希望能够做到不需要阅读文档,拿来就会用。
4.房产通用服务内置模块化, 比如房源库基础服务,楼盘字典基础服务等,用户用到这些服务不需要自己再去申请,通过鲁班内置SDK就可以访问。
5.AI赋能(需求抽象、代码生成、数据分析、智能辅助等)。
参考文献
例如:
[1] 百度低代码平台:https://mp.weixin.qq.com/s/4tyZnBCwJkzEWn-zfWFqIA
[2] 低代码vs.传统开发一个全面的比较:https://mp.weixin.qq.com/s/riu_itoEipSdArMjVKuyWw
[3] 携程后台低代码平台的探究与实践:https://mp.weixin.qq.com/s/_atcGO_J5C2lx13gZCrp6g
[4] 如何让低代码平台发挥出真正的价值:https://mp.weixin.qq.com/s/5pRaajrP8oeb9w6P6viCGw
[5] 腾讯微搭:https://weda.cloud.tencent.com/learn
[6] 阿里宜搭:https://yida-pro.ding.zj.gov.cn/
作者简介:
李春雷:58安居客-房产技术部后端架构师。致力于高并发、大数据、高性能的后端服务研发;曾成功实现了58、赶集、安居客房产三网业务融合与数据融合,目前专注于云原生与低代码方向的研发工作。
马震:58安居客-房产技术部后端架构师。致力于设计高效、稳定、可扩展的系统架构,具备深厚的技术功底和丰富的实践经验;目前负责房产核心基础服务、AI智能对话、低代码平台等方向的架构设计与研发工作。
周军:58安居客-房产技术部后端架构师。曾负责58房产详情页微服务化、房源搜索、房产开放平台等;目前负责房产核心基础服务、低代码平台等方向的架构设计与研发工作。
来源-微信公众号:58技术
出处:https://mp.weixin.qq.com/s/DAJhQjGatYASZfvV0lA7ig