騰訊雲微搭低程式碼是高效、高效能的企業級低程式碼平臺。幫助開發者快速搭建支援多種業務場景的小程式、H5、PC WEB應用,通過簡單的拖拉拽操作,而不用編寫複雜的程式碼,實現少寫程式碼或者不寫程式碼,就能快速高效完成業務目標。
本文將帶大家深入聊聊微搭的技術架構,來了解下微搭是如何安全、穩定、可靠地支撐商業級應用從搭建到釋出上線的。
01低程式碼平臺演進
1. 低程式碼概念
低程式碼是無需編碼(0程式碼)或通過少量程式碼就可以快速生成應用程式的開發平臺。
通過視覺化進行應用程式開發的方法,具有不同經驗水平的開發人員可以通過圖形化的使用者介面,使用拖拽元件和模型驅動的邏輯來建立網頁和移動應用程式。
2. 低程式碼衍生歷程
- 20世紀80年代,第四代程式語言出現。
- 2000年 VPL 視覺化程式語言的誕生,是低程式碼產品的前驅,都可以通過一些視覺化的介面來進行操作。
- 2014年 業界諮詢機構 Forrester 低程式碼/零程式碼概念。
- 2016年 國內低程式碼平臺相繼釋出。
- 2018年 業界諮詢機構 Gartner 提出 aPaaS 和 iPaas 的概念。
- 2021年 中國市場低程式碼生態體系逐步建立。
3. 為什麼要用低程式碼 ?
1)降本增效,便捷開發
低程式碼開發能夠為企業降低成本,提升效率。在過去,低程式碼平臺出現之前,傳統的原生程式碼開發平臺需要進行程式碼開發,開發完成之後需要進行測試以及bug修復的一系列繁瑣工作。
此外,傳統的原生程式碼開發平臺涉及到一些上下游合作方是緊耦合的序列開發模型,依賴方不提供介面,上游服務也沒有辦法進行該介面的開發工作。這增加了開發過程中大量的溝通成本和時間成本。
低程式碼開發平臺出現後,研發人員可以通過前端圖形化的拖拉拽實現需求,實現了研發效率的提高,使用低程式碼平臺降低了研發人員的工作量和對編碼人員開發技能的要求。低程式碼平臺套用封裝程式碼,基本消除測試修復bug的環節。同時,低程式碼開發平臺是鬆耦合的併發開發模型,大大降低開發中對合作方的依賴性,從而降低溝通和時間成本。
2)打破業務豎井,增強跨職能溝通
傳統開發模式下:業務、產品、設計、開發、測試與運維人員各司其職,且各有一套領域內的工具和語言,長久以來很容易形成一個個 “豎井” ,讓跨職能的溝通變得困難而低效。
有了低程式碼後,我們能夠基於低程式碼快速的進行開發,這一狀況將得到改善。由於低程式碼上手容易,無需經過太多專業的訓練,業務人員也可以快速上手,通過“拖拉拽”,基於模板或者視覺化介面快速生成應用,從而打破業務壁壘。
3)提高產品的靈活性
企業可以利用低程式碼平臺發可以輕鬆地更改應用和業務流程,而無需花費大量時間編寫程式碼。應用和系統的靈活性、可操作性和可更改性大大提高。
4)加快數字化轉型
在經濟新常態下,為了提高經營效率和經營表現,數字化轉型是大多數傳統企業的目標,而低程式碼技術可以幫助企業更快更好地完成數字化轉型。
相比於純程式碼開發,使用低程式碼開發企業應用能將專案的交付週期大幅縮短,從而更敏捷地完成專案交付,大幅提升企業數字化的速度。敏捷交付的背後是更多次數的迭代,以及軟體系統與企業貼合度的大幅提升,而這點是企業數字化轉型成敗的關鍵。
4.全程式碼&低程式碼&無程式碼對比
此處用一個象限圖來說明業界低程式碼的演進方向,首先從看到圖中的箭頭,左下到右上,我們從傳統的程式設計模式是逐漸向無碼化來演進的。
左下的程式碼程式設計,就是我們傳統的程式設計階段。前提是需要有一些比較強的程式設計能力。從早期的低階語言、到高階語言、進而到類庫的提供、以及元件的使用。
右上的無碼操作,指的是無程式碼、通用SaaS類的產品是可以讓我們進行簡單快捷的進行操作生成應用,但他們的靈活性是不夠的,如果要支援靈活性和擴充套件性往往需要我們改變他們。
有沒有一種更好的方式,能夠支援這種情況?我認為最理想的情況是,在開發者不懂前端語言(JavaScript等)或者不懂後端語言(Php、Java等)的情況下,依然能開發一個足夠靈活、足夠通用的應用。我認為,低程式碼平臺就是最接近這一個領域的手段,因其可以同時兼顧靈活性和業務邏輯,從而達到最適合開發小白的需求的理想狀態。
5.低程式碼市場分析
低程式碼行業最近幾年一直被知名諮詢機構 Gartner 所關注。目前,國內外都有很多企業在加入低程式碼平臺搭建,足以說明這個行業的市場認可程度。
從諮詢機構Gartner的市場分析來看,2023年全球超過 50% 的大中型企業將把低程式碼應用平臺作為主要的佔領應用平臺之一。預計到2024年,低程式碼應用程式開發將佔總應用開發的 65%以上。
6.低碼平臺核心能力
低程式碼的平臺具備的核心能力要素,我認為有四點:
- 視覺化開發
- 資料模型驅動
- 擴充套件性
- 工程化
下面針對以上四點逐一分析:
(1) 視覺化開發
業務人員基於視覺化的頁面或工具能夠進行簡單拖拉拽、可以形成一個頁面資訊。
他們也能夠基於視覺化介面來配置定義資料來源和資料模型、簡單定義一個流程,可以執行工作流。
總而言之,就是前端拖拉拽可以形成前端的互動語言,進而生成後端可以執行的計算機語言。
(2) 資料模型驅動
低程式碼平臺,能夠可以通過頁面上的操作進行定義一個模型定義,可以靈活的定義模型中的欄位、也可以進行相關資料表的關聯操作,以及設定資料模型的規則和索引。
a. 模型定義
進行資料庫模型的設計、新增欄位,設定欄位的型別以及索引
b. 模型關聯
建立資料庫表與表之間的關係,具體表現為1對n,n對n,n對1、1對1等關聯關係
c. 資料操作
基於資料庫表對外提供一個CRUD 的操作,讓應用能夠操作該資料模型
(3) 擴充套件性
是指低程式碼平臺是否可以提供一些機制來進行擴充套件。
具體的擴充套件方式有以下三點:
a. 擴充套件語言
低程式碼平臺是否能夠我熟悉的語言來擴充套件,假如我是前端開發者,能否提供前端熟悉的語言來擴充套件,假如我是後端開發者,能否基於寫一些後端程式碼(Java 、Go等)來擴充套件。
b. 邏輯擴充套件
低程式碼平臺能否通過定義一些流程圖也進行業務邏輯的擴充套件,來執行業務if、else的流程來做業務上的一些呼叫。
c. API 整合
低程式碼平臺是否可以通過低碼平臺搭建的應用與第三方公司已有的系統或者服務做整合,能否在低碼中通過API做整合過來,供我的應用來呼叫整合。
(4) 工程化
低程式碼平臺是否可以進行本地開發除錯、版本控制、自動構建釋出上線、免運費以及監控的一些能力。簡單來說是否在該平臺上一站式配套的能力。
a. 擴充套件語言
低程式碼平臺要能夠進行本地的開發除錯。
b. 版本管理
低程式碼平臺可以進行版本回退操作,以及有能力可以預留體驗,回退體驗的時候不會影響到釋出態的產物。
c. 自動化
低程式碼平臺可以自動構建釋出上線、免運費以及配套監控的一站式能力
02微搭低程式碼架構和開發簡介
1. 微搭低程式碼介紹
微搭低程式碼平臺是高效、高效能的拖拽式低程式碼開發平臺,向上連線前端的行業業務,向下連線雲端計算的海量能力,助力企業垂直上雲。微搭以雲開發作為底層支撐,雲原生能力將應用搭建的全鏈路打通,提供高度開放的開發環境。
微搭低程式碼是低程式碼應用程式平臺(LCAPS)+ 多維體驗開發平臺(MXDP)的結合體。
我們有以下能力:
1)多端支援
一套程式碼,可以同時支援多端、小程式、web、pc 都可用。
2)生態整合
我們內部整合了騰訊文件,騰訊會議、微信支付、企微等能力,可以一站式用使用者提供能力。
3)高階元件
內部提供了模型元件、企業工作臺等高階元件。
開箱即用
提供了開箱即用的能力,可以通過我們的應用市場、模板中心可以快速的進行業務開發和釋出。
雲端一體
底層是serverless雲原生技術,業務開發完成之後,業務上的是免運維免部署。
統一管理
提供了框架開發的規範,便於統一的管理。
高擴充套件性
支援高擴充套件性,高擴充套件效能夠自定義元件、第三方資料來源完成自定義邏輯的擴充套件。
混合開發
業務模式上支援 視覺化開發、低程式碼開發的能力。
2. 微搭低程式碼產品架構
微搭低程式碼提供了應用開發的一站式低程式碼開發服務,從底層能力迭代至行業級方案,雲原生全鏈路支撐為您的應用保駕護航,讓您能夠完全專注於業務場景,小白也可以極速搭建出成熟、專業的應用。
3. 微搭低程式碼後端實踐
我們看下微搭低程式碼的後端實踐,那麼我們思考下後端低程式碼需要解決什麼問題?我認為應該有四點,以及具體在微搭低程式碼平臺是如何實踐的:
1、業務資料如何存?如何實現自定義資料儲存?
微搭低程式碼抽象出了資料模型。
2、如何實現業務流程流轉?
微搭低程式碼基於工作流來進行業務流程流轉。
3、業務資料和流程流轉,那些人可以訪問和控制?
微搭低程式碼建立了使用者許可權平臺,來進行人員角色的控制。
4、如何進行服務端邏輯的自定義擴充套件?
微搭低程式碼通過雲函式來實現後端服務的自定義擴充套件能力。
所以我們微搭低程式碼後端開發實踐分為以下四種:
資料模型、工作流、角色許可權、服務端擴充套件。
我們逐一看下具體每個是如何設計的:
1、資料模型
資料模型基於業界標準的能力JSONSchema來進行擴充套件,資料模型分為內部資料來源和外部資料來源兩種。
資料模型 - 內部資料來源:
為我們提供資料模型定義,索引、以及各種資料模型的關係。
我們可以靈活的來自定義資料欄位,以及欄位的索引功能。
也能過提供標準通用的能力,比如新增、刪除、查詢、更新等。
資料模型 - 外部資料來源
聯結器:
聯結器可以打通外部應用資料或呼叫外部應用開放的服務,開發者只需要對聯結器完成授權或少量填寫一些配置資訊,即可使用對應產品的服務介面。
我們內部整合一些企業級的應用,比如騰訊會議、騰訊文件、騰訊地圖、微信支付等應用,方便快速提供一些企業級的能力給到開發者。
自定義聯結器
自定義聯結器支援呼叫第三方服務介面或使用程式碼來實現業務邏輯。開發者可以在應用、工作流、自定義資料模型中使用。
分為http和雲函式模式:
http:開放式API,使用者來連結外部的服務,與外部API來做整合。
雲函式模式:完全自定義,當使用者以上所有的場景均不能滿足的時候,可以通過雲函式的來手動寫一些程式碼來自定義一些邏輯,實現業務上的邏輯擴充套件。
2、工作流
工作流基於業界標準bpmn協議來擴充套件,資料展示和儲存基於標準JSON來處理可讀性更高。
微搭工作流的觸發時間:
- 可配置觸發時機:
即時時機、也支援定時觸發。可以通過配置一些節點,來執行業務邏輯的操作。
- 操作節點:
我們支援審批節點、自動化節點、資料來源變更通知、加簽、轉籤等操作。通知節點與訊息模板整合,可以傳送系統站內信、與企微打通,可以傳送企微系統訊息。我們也支援本地除錯,支援版本回溯能力。
3、角色許可權
角色許可權整體遵循RBAC模型來進行設計的,業務上可靈活的支援擴充套件。具體使用者能夠訪問哪些頁面、資料來源、以及流程許可權等,我們也支援設定一些許可權集,以便於靈活地進行業務上許可權的擴充套件。
從下邊的圖可以看到,我們可以控制普通應用的訪問許可權,頁面許可權以及頁面下的按鈕許可權,也可以控制模型應用的許可權;
可以控制資料來源的行記錄,資料來源方法許可權,資料來源列許可權,也能夠對流程的訪問許可權做控制,還可以控制企業工作的訪問和登入許可權等操作。
4、服務端擴充套件
服務端的擴充套件基於雲函式的能力,通過頁面視覺化編寫程式碼來進行服務端邏輯的擴充套件。可以做一些資料表的聚合,以及CRUD等操作方法。
雲函式(Serverless Cloud Function,SCF)是騰訊云為企業和開發者們提供的無伺服器執行環境,幫助您在無需購買和管理伺服器的情況下執行程式碼。您只需使用平臺支援的語言編寫核心程式碼並設定程式碼執行的條件,即可在騰訊雲基礎設施上彈性、安全地執行程式碼。
4. 微搭應用開發流程
此處將介紹基於微搭拖拉拽來快速構建一個應用的生命週期,整個低碼應用開發和執行的生命週期,以及低碼在設計態和執行態做了什麼。
在微搭的應用開發流程中,微搭應用的生命週期分為設計態和開發態。
1)設計態
我們通過前端視覺化的介面和元件,進行表單定義模型及定義模型關聯關係。我們還可以針對表單配置使用者和許可權、也可以通過頁面來操作配置一些工作流。我們可以拖拉拽配置一些頁面,生成頁面的DSL。配置資料模型,生成資料的JSONSchema DSL。配置流程生成流程的BPMN擴充套件,基於角色繫結使用者許可權,生成RBAC 模型的DSL。
在釋出的時候,我們前端H5會生成Reat程式碼、小程式會生成小程式程式碼。釋出之後,前端程式碼會發布在靜態託管中,服務端自定義擴充套件服務邏輯是部署在雲函式中。
2)執行態
客戶會從web或者小程式發起呼叫,會經過訪問經過我們的靜態託管以及雲函式和雲資料庫,進而將請求分為到微搭側後端中心化服務,和企業第三方服務。
5. 微搭高可用服務能力
一個高可用的服務需要從部署、變更、預案、監控、安全等多方面考慮。達到 99.99%服務高可用的目標,需要各角色的工程師共同努力。本文簡單介紹下微搭在消除單點和彈性伸縮這塊的實踐。
消除單點
單點有兩種場景:一種是某個模組僅部署了一個例項;第二種是某個模組雖然部署了多個例項,但任意例項故障都會導致服務整體或者大面積不可用。如何識別系統單點?通過排查模組的例項數量和進行破壞性測試來發現系統中是否存在單點。對於已知的單點,則應該儘量做好預案,減少故障時長。
針對這種情況,微搭一是在每個叢集部署了多個POD 來消除叢集內單點,另外一塊針對叢集1整體掛掉的情況下,也可快速切換叢集來消除單點,保障服務的穩定性。
彈性伸縮
彈性伸縮是根據業務需求和策略,針對無狀態的服務,通過定時、閾值設定等方式,自動調整叢集規模,舉例來說,對於大促,機房故障等災難場景,能夠很好的提升可用性。伸縮顧名思義,有伸也有縮,縮的特性,可能讓叢集維持在一個合理的規模上,從而避免造成不必要的成本浪費。因此,彈性伸縮也是常態下系統保持可用性的重要手段。
微搭是基於serverless自動彈性伸縮雲原生的能力,來保證我們後端服務整體的高可用。當流量高的時候自動來擴容機器,當流量低的來實時縮容伺服器。
03微低程式碼的未來趨勢
從2020年開始,低程式碼成為了業界熱點,無論是資本市場還是企業使用者都紛紛追捧。那麼在未來,低程式碼平臺會如何發展呢?在我個人理解中,低程式碼平臺開發將會沿兩個緯度演進:
1、通用性,也就是語言屬性維度;隨著低程式碼開發平臺的不斷成熟和發展,低程式碼開發平臺逐漸具備通用場景的開發能力,例如可以開發網站、遊戲、3D場景、電商、企業應用、個人應用;支援的系統也會更加全面,例如支援WebApp、iOS/Android、Windows/Mac/Linux、小程式等各種應用。
2、便捷性,也就是指程式碼量不斷降低的過程,最終將實現0程式碼程式設計。
但是通用性和便捷性要想同時實現,是非常困難的,這也是低程式碼開發平臺急需解決的問題和下一個挑戰。最終使“去掉程式語法,保留程式邏輯”成為可能。
最後也回答下大家比較關心的一個問題: 低程式碼會取代程式設計師嗎?
我認為低程式碼解決的是可抽象的,通用的且可複用的產品能力,程式設計師作為高階技術人才,市場缺口巨大,低程式碼工具是將程式設計師從現有的重複的枯燥的介面開發中解放出來。程式設計師應該更關注業務創造方面的技術研究和開發。低程式碼是工具,低程式碼與程式設計師之間的關係就像翻譯軟體與譯者,資料統計系統與資料分析師,工具的目的是減少重複的勞作而將人力投入更有意義、有價值的研究之中。
本文作者:
謝豔祥
騰訊雲微搭高階工程師,專注於後端研發效能提升,工程化體系建設。
在效能優化、研發效能、架構高可用設計等方向有一定的落地實踐經驗