魯班-58房產(chǎn)低代碼平臺(tái)設(shè)計(jì)與實(shí)踐
1
導(dǎo)讀
魯班全棧式低代碼開(kāi)發(fā)平臺(tái)(以下簡(jiǎn)稱魯班)是58房產(chǎn)自研的全棧式低代碼開(kāi)發(fā)平臺(tái),我們的目標(biāo)是:人人都可以成為全棧開(kāi)發(fā)工程師。讓后端人員可以干一些簡(jiǎn)單的前端工作,讓前端人員可以干一些簡(jiǎn)單的后端工作。2023年4月初上線,截止目前已經(jīng)擁有300 的用戶,開(kāi)發(fā)了40 的應(yīng)用,并上線了270 模型、900 頁(yè)面、1600 的接口。
圖1:魯班目前的使用情況(這個(gè)圖表也是用魯班開(kāi)發(fā))
2
背景
2.1 傳統(tǒng)開(kāi)發(fā)模式的不足
場(chǎng)景1: 我是一個(gè)后端開(kāi)發(fā)工程師,日常工作是后端系統(tǒng)開(kāi)發(fā),主要精力更關(guān)注于高并發(fā)、大數(shù)據(jù)、高性能的架構(gòu)設(shè)計(jì)、服務(wù)優(yōu)化等。但是偶爾也會(huì)有需求要做一兩個(gè)前端頁(yè)面,為產(chǎn)品或者運(yùn)維提供后端的數(shù)據(jù)查詢、報(bào)表展示、配置操作等。比如房產(chǎn)這邊做真房源項(xiàng)目中,產(chǎn)品上線一個(gè)新的治理策略之前,希望能夠先通過(guò)一個(gè)搜索頁(yè)面把一些房源搜索出來(lái),手動(dòng)處理一部分看看效果。這種情況下在后端基礎(chǔ)能力已經(jīng)存在的情況下,就需要前端支持開(kāi)發(fā)這個(gè)頁(yè)面,需要跨部門協(xié)作、PMO排期、開(kāi)發(fā)測(cè)試上線。如果按照傳統(tǒng)開(kāi)發(fā)模式,走需求評(píng)審,排期,開(kāi)發(fā),測(cè)試,交付周期會(huì)很長(zhǎng),且資源緊張情況下,還存在被更高優(yōu)需求替代的現(xiàn)象。
場(chǎng)景2: 我是一個(gè)前端開(kāi)發(fā)工程師/IOS/安卓開(kāi)發(fā)工程師,日常工作是主要前端頁(yè)面與樣式的開(kāi)發(fā)和功能實(shí)現(xiàn)。但是偶爾也會(huì)有一些小的需求,需要做數(shù)據(jù)庫(kù)的增刪改查操作,需要將這些操作封裝成接口供前端調(diào)用。比如房產(chǎn)做的58房產(chǎn)門戶網(wǎng)站內(nèi)部系統(tǒng),前端同學(xué)就需要自己設(shè)計(jì)數(shù)據(jù)庫(kù)存儲(chǔ)各網(wǎng)站的url地址、分類關(guān)系等,并需要提供增刪改查等操作。前端同學(xué)對(duì)于數(shù)據(jù)庫(kù)的設(shè)計(jì)、調(diào)用、接口封裝等并不熟悉,需要后端同學(xué)支持。
隨著軟件開(kāi)發(fā)規(guī)模的增加和復(fù)雜度的提升,將軟件開(kāi)發(fā)人員劃分為不同的角色,如前端開(kāi)發(fā)、后端開(kāi)發(fā)、數(shù)據(jù)庫(kù)工程師、算法工程師、測(cè)試人員等,這種劃分使得不同開(kāi)發(fā)人員能夠?qū)W⒆约旱念I(lǐng)域,但是同時(shí)也帶來(lái)一些缺點(diǎn):
1.知識(shí)隔離:過(guò)于精細(xì)的分工可能導(dǎo)致不同角色之間的知識(shí)隔離,缺乏全局視野。這可能使得團(tuán)隊(duì)難以應(yīng)對(duì)快速變化的需求和市場(chǎng)環(huán)境。
2.溝通成本:不同角色之間的溝通可能會(huì)增加,需要花費(fèi)更多時(shí)間解釋和協(xié)調(diào)工作,這可能增加溝通成本。
3.資源浪費(fèi):用造飛機(jī)的人員分工和流程管理來(lái)造一輛自行車,對(duì)于一些輕量級(jí)的需求也要調(diào)動(dòng)前后端資源和走一遍全部開(kāi)發(fā)流程,高射炮打蚊子,殺雞用牛刀。
圖2: 低代碼平臺(tái)和傳統(tǒng)開(kāi)發(fā)的比較
2.2 低代碼平臺(tái)調(diào)研分析
在魯班項(xiàng)目啟動(dòng)之初,我們調(diào)研了市場(chǎng)上的低代碼和零代碼平臺(tái),這些平臺(tái)對(duì)魯班的設(shè)計(jì)和研發(fā)提供了參考和借鑒。
企業(yè) | 日期 | 產(chǎn)品 | 定位 | 功能特性 |
騰訊 | 2022年公測(cè) | 微搭 | 小程序、H5 應(yīng)用、Web 應(yīng)用等 | 1.面向前端,拖拽式開(kāi)發(fā) |
阿里 | 2019年發(fā)布 | 宜搭 | 低代碼企業(yè)級(jí)應(yīng)用搭建SAAS平臺(tái) | 1.可視化搭建應(yīng)用 3.集成釘釘快速應(yīng)用 |
ClickPass | 2017年創(chuàng)立 | ClickPaas | 企業(yè)級(jí)低代碼開(kāi)發(fā)平臺(tái) | 1.開(kāi)發(fā)速度快,項(xiàng)目周期短 |
明道云 | 2013年成立 | 明道云 | 零代碼,銷售、運(yùn)營(yíng)、人事、采購(gòu)等核心業(yè)務(wù)應(yīng)用 | 1.云原生架構(gòu) |
碼匠 | 2018年成立 | 碼匠 | 面向開(kāi)發(fā)者的低代碼平臺(tái),可以幫助企業(yè)快速構(gòu)建和部署應(yīng)用程序 | 1.模型驅(qū)動(dòng)開(kāi)發(fā)模式 |
百度 | 暫無(wú) | 愛(ài)速搭 | 更靈活、更強(qiáng)大、更智能應(yīng)用可視化設(shè)計(jì)與發(fā)布平臺(tái) | 1.零代碼搭建 |
攜程 | 2023年3月 | PGClowcode | 客戶端(App、小程序、網(wǎng)頁(yè))和運(yùn)營(yíng)后臺(tái) | 1.拖拽生成頁(yè)面 |
表1:低代碼零代碼產(chǎn)品調(diào)研
考慮到我們的實(shí)際應(yīng)用場(chǎng)景,我們面對(duì)C端的場(chǎng)景,要求功能復(fù)雜、交互友好、流量大、性能要求高的場(chǎng)景,肯定還是優(yōu)先選擇傳統(tǒng)的開(kāi)發(fā)模式。只有面對(duì)B端的場(chǎng)景和一些內(nèi)部系統(tǒng),不要求界面精美,可用就行,能夠開(kāi)發(fā)簡(jiǎn)單,快速上線。所以魯班低代碼平臺(tái)的定位就是面對(duì)B端場(chǎng)景和一些內(nèi)部系統(tǒng)。
這些內(nèi)部系統(tǒng)需要支持58的OA賬號(hào)登錄鑒權(quán)、需要能夠私有化部署在58私有云、需要能夠支持58的通用底層框架訪問(wèn)(例如58的內(nèi)部RPC系統(tǒng)SCF服務(wù)、分布式消息WMB、存儲(chǔ)系統(tǒng)WOS等)、需要能夠通過(guò)內(nèi)網(wǎng)訪問(wèn)58的內(nèi)部其他系統(tǒng)(例如經(jīng)紀(jì)人賬號(hào)、商業(yè)訂單等)。這些訴求就決定了我們不可能采用外部的低代碼平臺(tái),只能自研。
2.3 魯班的目標(biāo)
魯班全棧式低代碼開(kāi)發(fā)平臺(tái),可以幫助后端開(kāi)發(fā)人員做一些輕量級(jí)前端的工作,幫助前端開(kāi)發(fā)人員做一些輕量級(jí)后端的工作,人人都可以成為全棧開(kāi)發(fā)工程師。降低技術(shù)門檻,減少溝通成本,提高開(kāi)發(fā)效率,快速迭代和修改,易于集成和擴(kuò)展。
3
魯班的功能介紹
3.1 拖轉(zhuǎn)生成頁(yè)面
魯班可以通過(guò)可視化拖拽的方式,讓開(kāi)發(fā)人員能夠快速創(chuàng)建和布局應(yīng)用界面。以下是魯班拖拽生成頁(yè)面功能的詳細(xì)介紹:
1.直觀的可視化拖拽界面:低代碼開(kāi)發(fā)平臺(tái)提供了一個(gè)直觀的可視化拖拽界面,開(kāi)發(fā)人員可以通過(guò)簡(jiǎn)單的拖拽操作來(lái)創(chuàng)建和布局應(yīng)用界面。這種方式使得界面設(shè)計(jì)更加快速和靈活,無(wú)需編寫繁瑣的代碼。
2.豐富的組件庫(kù):低代碼開(kāi)發(fā)平臺(tái)提供了豐富的組件庫(kù),包括文本框、按鈕、表單、圖片、圖表等常見(jiàn)元素,以及各種業(yè)務(wù)單據(jù)和業(yè)務(wù)邏輯組件。這些組件可以滿足不同應(yīng)用程序所需的通用核心功能,因此可以重復(fù)使用,以更快地開(kāi)發(fā)不同的解決方案。
3.可重用性:低代碼開(kāi)發(fā)平臺(tái)擁有完善的功能模塊體系,不同模塊可以滿足不同應(yīng)用程序所需的通用核心功能,因此可以重復(fù)使用,以更快地開(kāi)發(fā)不同的解決方案。
4.可擴(kuò)展性:為了實(shí)現(xiàn)各個(gè)信息系統(tǒng)的整合,方便統(tǒng)一管理和用戶訪問(wèn),低代碼開(kāi)發(fā)平臺(tái)提供了豐富的集成接口,支持。
5.多種集成方式:可以很方便地與第三方系統(tǒng)集成,包括市場(chǎng)上多個(gè)領(lǐng)域的主流產(chǎn)品,都可以實(shí)現(xiàn)無(wú)縫對(duì)接??缙脚_(tái)可訪問(wèn)性:低代碼開(kāi)發(fā)平臺(tái)的全生命周期管理使得應(yīng)用程序可以輕松地實(shí)現(xiàn)跨平臺(tái)訪問(wèn),包括PC端、移動(dòng)端、平板電腦等設(shè)備。
總的來(lái)說(shuō),魯班拖拽生成頁(yè)面功能通過(guò)直觀的可視化拖拽界面和豐富的組件庫(kù),使得開(kāi)發(fā)人員能夠快速創(chuàng)建和布局應(yīng)用界面,提高了開(kāi)發(fā)效率和質(zhì)量。同時(shí),該功能還具有可重用性、可擴(kuò)展性和跨平臺(tái)可訪問(wèn)性等特點(diǎn),能夠滿足不同應(yīng)用程序的開(kāi)發(fā)需求。
圖3:魯班頁(yè)面設(shè)計(jì)器
圖4:多端支持
3.2 數(shù)據(jù)可視化
魯班的數(shù)據(jù)可視化功能是其重要的組成部分,它可以幫助開(kāi)發(fā)人員快速、直觀地展示數(shù)據(jù),提供更好的決策支持。以下是對(duì)魯班低代碼平臺(tái)數(shù)據(jù)可視化功能的介紹:
1.數(shù)據(jù)驅(qū)動(dòng)的可視化設(shè)計(jì):低代碼平臺(tái)的數(shù)據(jù)可視化功能通常采用數(shù)據(jù)驅(qū)動(dòng)的方式進(jìn)行設(shè)計(jì),用戶可以通過(guò)簡(jiǎn)單的拖拽和配置操作,將數(shù)據(jù)源與可視化組件進(jìn)行綁定,實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)展示。
2.豐富的可視化組件:低代碼平臺(tái)提供了豐富的可視化組件,如折線圖、柱狀圖、餅圖、地圖等,用戶可以根據(jù)需要選擇合適的組件進(jìn)行數(shù)據(jù)展示。同時(shí),這些組件通常支持自定義樣式和交互行為,以滿足不同場(chǎng)景下的需求。
3.數(shù)據(jù)實(shí)時(shí)更新:低代碼平臺(tái)的數(shù)據(jù)可視化功能支持?jǐn)?shù)據(jù)實(shí)時(shí)更新,當(dāng)數(shù)據(jù)源發(fā)生變化時(shí),可視化組件會(huì)自動(dòng)更新展示內(nèi)容,無(wú)需人工干預(yù)。這使得用戶可以及時(shí)了解數(shù)據(jù)變化,做出相應(yīng)決策。
4.數(shù)據(jù)交互與聯(lián)動(dòng):低代碼平臺(tái)的數(shù)據(jù)可視化功能還支持?jǐn)?shù)據(jù)交互與聯(lián)動(dòng),用戶可以通過(guò)點(diǎn)擊、滑動(dòng)等操作,對(duì)數(shù)據(jù)進(jìn)行篩選、排序等操作,實(shí)現(xiàn)數(shù)據(jù)的個(gè)性化展示。同時(shí),不同組件之間也可以實(shí)現(xiàn)聯(lián)動(dòng)效果,提高用戶體驗(yàn)。
總之,魯班平臺(tái)的數(shù)據(jù)可視化功能為用戶提供了直觀、高效的數(shù)據(jù)展示方式,幫助用戶更好地理解和分析數(shù)據(jù),為決策提供有力支持。
圖5:數(shù)據(jù)源與可視化組件綁定
圖6:豐富的可視化組件
3.3 快速生成接口
魯班支持根據(jù)一張表生成CRUD一組http接口,同時(shí)能支持將現(xiàn)有的SCF接口(58自研RPC框架)導(dǎo)入并轉(zhuǎn)換成http接口的能力。生成的接口支持直接訪問(wèn)和在頁(yè)面綁定數(shù)據(jù)源展示使用兩種方式。
魯班生成的接口,可以直接作為后臺(tái)http接口對(duì)外提供接口服務(wù),也可以作為頁(yè)面數(shù)據(jù)源方式與頁(yè)面組件進(jìn)行綁定。
圖7:根據(jù)數(shù)據(jù)庫(kù)表生成http接口
圖8:SCF接口導(dǎo)入生成http接口
3.4 角色與權(quán)限
魯班的用戶分為開(kāi)發(fā)用戶和應(yīng)用使用用戶兩套用戶體系。
同樣角色和權(quán)限也分為開(kāi)發(fā)用戶角色和權(quán)限、應(yīng)用使用用戶角色及權(quán)限。
圖9: 開(kāi)發(fā)用戶及權(quán)限
3.5 擴(kuò)展性支持
低代碼平臺(tái)通過(guò)拖拉拽的方式生成頁(yè)面,通過(guò)sql方式或者接口導(dǎo)入方式生成接口,這種方式方便快捷,但是也有缺點(diǎn),就是靈活性不足。比如接口返回日期數(shù)據(jù)是時(shí)間戳,但是頁(yè)面想展示成日期格式?;蛘呤窃趯?dǎo)入的接口調(diào)用之后,對(duì)出入?yún)?shù)進(jìn)行加工。
為了解決這個(gè)問(wèn)題,魯班支持?jǐn)U展代碼方式對(duì)現(xiàn)有功能進(jìn)行擴(kuò)展,同時(shí)能夠支持前端擴(kuò)展代碼(js代碼)對(duì)頁(yè)面數(shù)據(jù)進(jìn)行擴(kuò)展和后端擴(kuò)展代碼java方式對(duì)接口調(diào)用做before()和after()的執(zhí)行。
圖10: 前端擴(kuò)展代碼
圖11: 后端擴(kuò)展代碼
對(duì)于后端擴(kuò)展代碼,為了開(kāi)發(fā)方便及開(kāi)發(fā)習(xí)慣,支持代碼下載到本地進(jìn)行IDEA進(jìn)行編輯,并支持將運(yùn)行時(shí)數(shù)據(jù)調(diào)用本地代碼進(jìn)行本地調(diào)試。
圖12: 本地debug模式
4
魯班的設(shè)計(jì)與實(shí)現(xiàn)
4.1 整體架構(gòu)設(shè)計(jì)
圖13: 魯班整體架構(gòu)圖
魯班整體上分為開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境:開(kāi)發(fā)環(huán)境是供開(kāi)發(fā)人員使用的系統(tǒng),提供頁(yè)面、接口開(kāi)發(fā)、數(shù)據(jù)源配置、打包部署上線等功能。運(yùn)行環(huán)境是應(yīng)用的運(yùn)行環(huán)境,是一個(gè)web系統(tǒng),對(duì)外提供http接口,每個(gè)應(yīng)用一個(gè)獨(dú)立的運(yùn)行環(huán)境,互相隔離。
整體上分為4層:基礎(chǔ)設(shè)施層、中間件層、引擎層、業(yè)務(wù)中臺(tái)層,其中前端引擎和后端引擎是核心。
同時(shí)提供了openApi功能可以對(duì)外提供服務(wù),和內(nèi)置了一些58內(nèi)部系統(tǒng)的登錄、訪問(wèn)、鑒權(quán)等能力。
4.2 元數(shù)據(jù)設(shè)計(jì)
1.前端頁(yè)面設(shè)計(jì):
頁(yè)面設(shè)計(jì)的內(nèi)容以元數(shù)據(jù)DSL格式存儲(chǔ)在mongodb數(shù)據(jù)庫(kù)中,在運(yùn)行時(shí)動(dòng)態(tài)加載,并通過(guò)頁(yè)面解析器解析展示。
魯班的前端頁(yè)面代碼是把頁(yè)面信息編輯成JSON Schema,平臺(tái)生成JSON Schema是在formily/json-schema規(guī)范的基礎(chǔ)上擴(kuò)展了部分字段,以來(lái)兼容非form組件的渲染。其中大部分字段可以在formily的文檔中找到屬性描述。
圖14: 前端頁(yè)面元數(shù)據(jù)設(shè)計(jì)
2.接口出入?yún)⒛0嬖O(shè)計(jì):
魯班目前支持14種接口類型,新增、修改、單條刪除、批量刪除、分頁(yè)列表、無(wú)分頁(yè)列表、下拉框列表、數(shù)量查詢、批量id查詢、詳情、全部導(dǎo)出、批量導(dǎo)出、自定義導(dǎo)出、自定義類型。這些接口類型主要是定義了出入?yún)⒛0妫╉?yè)面或者直接使用。這些接口出入?yún)⒌亩x,也是用JSON Schema方式存儲(chǔ)下來(lái)作為元數(shù)據(jù)使用。
使用的場(chǎng)景有:接口出入?yún)⒄故?、格式校?yàn)、數(shù)據(jù)轉(zhuǎn)換等。
圖15: 接口出入?yún)⒛0嬖獢?shù)據(jù)設(shè)計(jì)
4.3 前端引擎
前端引擎主要有頁(yè)面設(shè)計(jì)器、圖標(biāo)設(shè)計(jì)器、js擴(kuò)展代碼等組成。
圖16: DSL解析器
首先設(shè)計(jì)器會(huì)加載所需組件庫(kù)、組件屬性設(shè)置器等物料,接著開(kāi)發(fā)人員根據(jù)產(chǎn)品需求在畫布中進(jìn)行布局設(shè)置、組件 CRUD 操作、API屬性配置和邏輯編排等操作,這些操作會(huì)不斷生成操作節(jié)點(diǎn)模型,然后設(shè)計(jì)器將操作節(jié)點(diǎn)模型轉(zhuǎn)化成頁(yè)面描述即JSON chema,此為設(shè)計(jì)器的產(chǎn)物。最后經(jīng)過(guò)解析器進(jìn)行生命周期、事件流、數(shù)據(jù)綁定等邏輯處理并渲染成真實(shí)頁(yè)面。
組件與數(shù)據(jù)層的綁定:組件需要被魯班特定方法包裹,該方法判斷組件是否為受控組件,如果是則將組件的value、onchange方法與數(shù)據(jù)字段模型Field綁定,從而實(shí)現(xiàn)第三方組件數(shù)據(jù)與頁(yè)面數(shù)據(jù)雙綁的能力。除組件數(shù)據(jù)外,組件的描述、校驗(yàn)狀態(tài)、校驗(yàn)方法等均可綁定。整個(gè)方案不會(huì)破壞存量組件庫(kù),改造動(dòng)作小,且不影響其在傳統(tǒng)開(kāi)發(fā)項(xiàng)目中的正常使用。
圖17:組件與數(shù)據(jù)層綁定
4.4 多租戶、多環(huán)境與隔離性
4.4.1 多租戶
魯班低代碼開(kāi)發(fā)平臺(tái)是一種典型的Saas模式,每個(gè)應(yīng)用都是獨(dú)立一套云集群環(huán)境,集群間重啟、版本部署、元數(shù)據(jù)、網(wǎng)絡(luò)鏈路等皆互不影響。
圖18:多租戶
4.4.2 多環(huán)境
魯班低代碼平臺(tái)分為開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境。
開(kāi)發(fā)環(huán)境是開(kāi)發(fā)人員開(kāi)發(fā)接口、設(shè)計(jì)頁(yè)面的開(kāi)發(fā)平臺(tái),用戶開(kāi)發(fā)設(shè)計(jì)的頁(yè)面、數(shù)據(jù)庫(kù)元數(shù)據(jù)、接口元數(shù)據(jù)、變量、擴(kuò)展代碼等都存儲(chǔ)在開(kāi)發(fā)環(huán)境。
運(yùn)行環(huán)境是系統(tǒng)實(shí)際運(yùn)行的平臺(tái),分為開(kāi)發(fā)環(huán)境和正式環(huán)境,部署在K8s集群,以及58集團(tuán)私有云環(huán)境。用戶開(kāi)發(fā)完的應(yīng)用,可以不用上線,直接在開(kāi)發(fā)環(huán)境云行及預(yù)覽。
待開(kāi)發(fā)完成在開(kāi)發(fā)環(huán)境測(cè)試聯(lián)調(diào)通過(guò)之后,可以在魯班一鍵打包并部署到正式環(huán)境,同時(shí)根據(jù)部署包支持回滾到某個(gè)指定版本。
圖19: 多環(huán)境支持
多環(huán)境環(huán)境變量:
魯班運(yùn)行環(huán)境分為開(kāi)發(fā)環(huán)境和正式環(huán)境,開(kāi)發(fā)環(huán)境是根據(jù)用戶開(kāi)發(fā)的內(nèi)容實(shí)時(shí)顯示,正式環(huán)境需要打包上線之后才會(huì)更新內(nèi)容。在日常的開(kāi)發(fā)過(guò)程中,有些配置信息需要開(kāi)發(fā)環(huán)境和正式環(huán)境不同,比如使用的數(shù)據(jù)庫(kù)配置,開(kāi)發(fā)環(huán)境用測(cè)試庫(kù),正式環(huán)境用線上庫(kù);調(diào)用的接口開(kāi)發(fā)時(shí)用開(kāi)發(fā)環(huán)境的接口,上線之后用正式環(huán)境的接口。在使用的變量的環(huán)節(jié)用luban.${var_name}表示,在運(yùn)行時(shí)會(huì)從變量定義中進(jìn)行替換。
圖20: 多環(huán)境環(huán)境變量
4.4.3 隔離性
設(shè)計(jì)時(shí)環(huán)境與運(yùn)行時(shí)環(huán)境相隔離,設(shè)計(jì)時(shí)開(kāi)發(fā)存儲(chǔ)于元數(shù)據(jù),運(yùn)行時(shí)只依賴于元數(shù)據(jù)并提供緩存功能。即使運(yùn)行時(shí)出現(xiàn)問(wèn)題,不影響運(yùn)行時(shí)的原型。
運(yùn)行時(shí)的開(kāi)發(fā)環(huán)境和正式環(huán)境相隔離,開(kāi)發(fā)環(huán)境依賴開(kāi)發(fā)環(huán)境的元數(shù)據(jù),隨著用戶的開(kāi)發(fā)實(shí)時(shí)變化,正式環(huán)境的元數(shù)據(jù)只有打包部署之后才會(huì)更新,開(kāi)發(fā)環(huán)境的變動(dòng)不會(huì)影響運(yùn)行環(huán)境,保證了運(yùn)行環(huán)境的穩(wěn)定性。
魯班不同的應(yīng)用互相隔離,運(yùn)行在各自不同的docker容器中,互相不會(huì)影響。
4.5 版本管理
圖21: 版本管理
魯班的node運(yùn)行環(huán)境、java運(yùn)行環(huán)境都是容器(docker鏡像)。這些運(yùn)行環(huán)境的容器都是通用的,可以運(yùn)行任何一個(gè)應(yīng)用。
魯班低代碼平臺(tái)將頁(yè)面元數(shù)據(jù)、接口元數(shù)據(jù)、配置信息、擴(kuò)展代碼等打成一個(gè)運(yùn)行時(shí)版本包。
在部署環(huán)節(jié)只要將某個(gè)版本的運(yùn)行環(huán)境部署,并將這些應(yīng)用元數(shù)據(jù)信息加載,加載A應(yīng)用的元數(shù)據(jù)信息就是A應(yīng)用的運(yùn)行環(huán)境,加載B應(yīng)用的運(yùn)行信息就是B應(yīng)用的運(yùn)行環(huán)境。
這種設(shè)計(jì)實(shí)現(xiàn)了應(yīng)用和運(yùn)行環(huán)境的隔離,可以實(shí)現(xiàn)同一個(gè)應(yīng)用的部署升級(jí)、回滾、灰度等操作。
4.6 路由規(guī)則
魯班的運(yùn)行環(huán)境和應(yīng)用是相互隔離的,魯班通過(guò)統(tǒng)一的網(wǎng)關(guān)來(lái)進(jìn)行路由分發(fā)。路由規(guī)則有三層,分別是:環(huán)境、組織、應(yīng)用。魯班的接口調(diào)用規(guī)則如下:luban.58corp.com/{env}/{org}/{app}/path。其中env表示環(huán)境信息:開(kāi)發(fā)環(huán)境offline or 線上環(huán)境online。org表示組織代碼,app表示應(yīng)用代碼。
圖22: 路由規(guī)則
4.7 擴(kuò)展性設(shè)計(jì)
4.7.1 接口參數(shù)映射
有時(shí)候,原始導(dǎo)入的接口參數(shù),并不滿足用戶希望提供的接口參數(shù)訴求,魯班支持對(duì)接口的出入?yún)⑦M(jìn)行映射擴(kuò)展。
圖23: 出入?yún)⒂成?/span>
4.7.2 接口擴(kuò)展代碼
圖24: 接口擴(kuò)展代碼
魯班支持對(duì)每個(gè)接口做切面擴(kuò)展,在接口的調(diào)用之前執(zhí)行before方法和執(zhí)行之后再執(zhí)行after方法。
魯班對(duì)于接口的擴(kuò)展代碼,以元數(shù)據(jù)的方式存儲(chǔ)在代碼倉(cāng)庫(kù)中,在運(yùn)行時(shí)動(dòng)態(tài)加載動(dòng)態(tài)編譯方式加載到運(yùn)行環(huán)境中,當(dāng)代碼有更新時(shí),開(kāi)發(fā)環(huán)境動(dòng)態(tài)拉取最新代碼重新加載編譯,線上環(huán)境為了系統(tǒng)的穩(wěn)定性,只有在用戶點(diǎn)擊打包上線之后才會(huì)更新代碼。
因?yàn)轫?yè)面自帶開(kāi)發(fā)工具不如本地IDEA好用,魯班平臺(tái)支持將擴(kuò)展代碼下載到本地進(jìn)行編輯調(diào)試,并可以在本地啟動(dòng)一個(gè)web系統(tǒng),在運(yùn)行時(shí)通過(guò)本地debug開(kāi)關(guān)和ip port的方式,將before/after的接口請(qǐng)求轉(zhuǎn)發(fā)到本地進(jìn)行調(diào)試。
調(diào)試成功的接口,可以通過(guò)push方式更新到代碼倉(cāng)庫(kù)。
luban-SDK提供了魯班低代碼平臺(tái)常用的一些能力,比如獲取應(yīng)用信息、用戶登錄信息、調(diào)用平臺(tái)其他接口功能等。
5
接入案例分享
5.1 安心交易
為推進(jìn)二手房交易規(guī)范化,幫助更多用戶實(shí)現(xiàn)安心交易,58同城、安居客攜手合和致遠(yuǎn)、邦安家,為全國(guó)用戶提供“安心交易保障”,目前,“安心交易保障”已經(jīng)在武漢、太原、長(zhǎng)沙、西安、杭州 、南京、鄭州、珠海、青島等10幾個(gè)城市的糯家、邦安家、安個(gè)家等合作門店推行。
安心交易主要用到了魯班根據(jù)數(shù)據(jù)庫(kù)表自動(dòng)生成CRUD接口和操作頁(yè)面,開(kāi)發(fā)了53個(gè)接口,14個(gè)頁(yè)面。降低了開(kāi)發(fā)難度,提高了開(kāi)發(fā)效率,減少了人員投入,相比傳統(tǒng)開(kāi)發(fā)方式,人力投入從2人減少到1.5人,開(kāi)發(fā)周期從24天減少到17天。
圖25: 安心交易
5.2 房產(chǎn)SKU管理后臺(tái)
房產(chǎn)SKU管理后臺(tái)是為開(kāi)發(fā)、測(cè)試、運(yùn)營(yíng)人員提供的一個(gè)查詢后臺(tái),提供了SKU信息、掛靠關(guān)系、操作日志能的查詢功能。這些能力是通過(guò)后臺(tái)服務(wù)提供接口(SCF服務(wù),58內(nèi)部RPC服務(wù)),魯班通過(guò)接口設(shè)計(jì)功能將這些接口轉(zhuǎn)換成http接口,并通過(guò)拖拉拽方式設(shè)計(jì)查詢或者操作頁(yè)面進(jìn)行數(shù)據(jù)綁定,從而實(shí)現(xiàn)了對(duì)后臺(tái)數(shù)據(jù)的訪問(wèn)。
主要用到了魯班后臺(tái)接口導(dǎo)入和頁(yè)面拖拉拽編輯功能,所有功能都完全由SKU后臺(tái)開(kāi)發(fā)人員負(fù)責(zé),降低了開(kāi)發(fā)難度,減少了跨部門協(xié)作和業(yè)務(wù)溝通成本。人員投入由傳統(tǒng)開(kāi)發(fā)方式的2人將低到1人,開(kāi)發(fā)周期從13天減少為5天。
圖26: 房產(chǎn)sku后臺(tái)
5.3 房產(chǎn)門戶網(wǎng)站
房產(chǎn)門戶網(wǎng)站是58房產(chǎn)內(nèi)部系統(tǒng),將所有房產(chǎn)業(yè)務(wù)群常用的網(wǎng)站進(jìn)行分類整理,統(tǒng)一門戶。房產(chǎn)的產(chǎn)品、開(kāi)發(fā)、運(yùn)營(yíng)、測(cè)試可以一站直達(dá)任意網(wǎng)站。
58房產(chǎn)門戶網(wǎng)站的開(kāi)發(fā)模式是為前端開(kāi)發(fā)人員提供后端開(kāi)發(fā)的能力,前端開(kāi)發(fā)人員利用魯班配置連接數(shù)據(jù)庫(kù),并對(duì)數(shù)據(jù)庫(kù)表提供CRUD的功能,對(duì)外提供訪問(wèn)接口,這些數(shù)據(jù)庫(kù)表存儲(chǔ)了分類網(wǎng)站的類別、網(wǎng)站url地址等信息。
因?yàn)檎麄€(gè)開(kāi)發(fā)都只有前端同學(xué)參與,人員投入由傳統(tǒng)開(kāi)發(fā)方式的2人降低到1.5人,開(kāi)發(fā)周期從21天減少為15天。
圖27:房產(chǎn)門戶網(wǎng)站
6
總結(jié)及展望
6.1 總結(jié)
1.目前市場(chǎng)上的常見(jiàn)的低代碼平臺(tái),例如阿里宜搭、騰訊微搭、簡(jiǎn)道云、輕流等,基本上是偏前端的使用場(chǎng)景,注重頁(yè)面設(shè)計(jì),對(duì)于后端支持一般比較弱,擴(kuò)展性不足。魯班低代碼平臺(tái)是前后端結(jié)合的低代碼平臺(tái),后端功能甚至要重于前端設(shè)計(jì),主要體現(xiàn)在快速接口搭建、后端擴(kuò)展代碼的支持等方面。
2.魯班低代碼平臺(tái)對(duì)58的基礎(chǔ)能力的支持,比如針對(duì)58內(nèi)部RPC框架SCF的接口一鍵導(dǎo)入、58內(nèi)部OA賬號(hào)登錄等,提升了內(nèi)部用戶使用效率。同時(shí)依托58提供的私有云,部署運(yùn)行環(huán)境時(shí)即可以部署原生k8s,也可以部署在58私有云平臺(tái),兼顧了靈活性和穩(wěn)定性的要求。
3.魯班低代碼平臺(tái)的高擴(kuò)展性,尤其是后端擴(kuò)展代碼 SDK結(jié)合的能力,甚至可以當(dāng)作一個(gè)獨(dú)立的web開(kāi)發(fā)框架使用,開(kāi)發(fā)便捷、部署靈活。
6.2 未來(lái)規(guī)劃
1.流程引擎,常用的業(yè)務(wù)場(chǎng)景有工作流、審批流等。
2.內(nèi)嵌的模式,魯班開(kāi)發(fā)的頁(yè)面或者接口能夠內(nèi)嵌到其他系統(tǒng)使用,其他系統(tǒng)的接口或者頁(yè)面能夠內(nèi)嵌到魯班應(yīng)用中使用,取長(zhǎng)補(bǔ)短,互相補(bǔ)充。這種方式目前可以部分支持,未來(lái)希望能夠做到無(wú)縫連接,更便捷。
3.交互設(shè)計(jì)優(yōu)化,在實(shí)際使用中我們發(fā)現(xiàn),在一些開(kāi)發(fā)場(chǎng)景中,對(duì)開(kāi)發(fā)者的使用引導(dǎo)還有欠缺,初次使用有一定的學(xué)習(xí)成本,未來(lái)希望能夠做到不需要閱讀文檔,拿來(lái)就會(huì)用。
4.房產(chǎn)通用服務(wù)內(nèi)置模塊化, 比如房源庫(kù)基礎(chǔ)服務(wù),樓盤字典基礎(chǔ)服務(wù)等,用戶用到這些服務(wù)不需要自己再去申請(qǐng),通過(guò)魯班內(nèi)置SDK就可以訪問(wèn)。
5.AI賦能(需求抽象、代碼生成、數(shù)據(jù)分析、智能輔助等)。
參考文獻(xiàn)
例如:
[1] 百度低代碼平臺(tái):https://mp.weixin.qq.com/s/4tyZnBCwJkzEWn-zfWFqIA
[2] 低代碼vs.傳統(tǒng)開(kāi)發(fā)一個(gè)全面的比較:https://mp.weixin.qq.com/s/riu_itoEipSdArMjVKuyWw
[3] 攜程后臺(tái)低代碼平臺(tái)的探究與實(shí)踐:https://mp.weixin.qq.com/s/_atcGO_J5C2lx13gZCrp6g
[4] 如何讓低代碼平臺(tái)發(fā)揮出真正的價(jià)值:https://mp.weixin.qq.com/s/5pRaajrP8oeb9w6P6viCGw
[5] 騰訊微搭:https://weda.cloud.tencent.com/learn
[6] 阿里宜搭:https://yida-pro.ding.zj.gov.cn/
作者簡(jiǎn)介:
李春雷:58安居客-房產(chǎn)技術(shù)部后端架構(gòu)師。致力于高并發(fā)、大數(shù)據(jù)、高性能的后端服務(wù)研發(fā);曾成功實(shí)現(xiàn)了58、趕集、安居客房產(chǎn)三網(wǎng)業(yè)務(wù)融合與數(shù)據(jù)融合,目前專注于云原生與低代碼方向的研發(fā)工作。
馬震:58安居客-房產(chǎn)技術(shù)部后端架構(gòu)師。致力于設(shè)計(jì)高效、穩(wěn)定、可擴(kuò)展的系統(tǒng)架構(gòu),具備深厚的技術(shù)功底和豐富的實(shí)踐經(jīng)驗(yàn);目前負(fù)責(zé)房產(chǎn)核心基礎(chǔ)服務(wù)、AI智能對(duì)話、低代碼平臺(tái)等方向的架構(gòu)設(shè)計(jì)與研發(fā)工作。
周軍:58安居客-房產(chǎn)技術(shù)部后端架構(gòu)師。曾負(fù)責(zé)58房產(chǎn)詳情頁(yè)微服務(wù)化、房源搜索、房產(chǎn)開(kāi)放平臺(tái)等;目前負(fù)責(zé)房產(chǎn)核心基礎(chǔ)服務(wù)、低代碼平臺(tái)等方向的架構(gòu)設(shè)計(jì)與研發(fā)工作。
來(lái)源-微信公眾號(hào):58技術(shù)
出處:https://mp.weixin.qq.com/s/DAJhQjGatYASZfvV0lA7ig