徐建,劉磊






摘? 要: 為了降低開發難度、提高代碼復用率、適應需求變化、縮短開發周期,提出通過研發一種配置式的少代碼程序框架,減少開發工程師的重復工作。利用Netty框架,研發一種規則引擎,在Java運行環境下實現低代碼服務端數據接口的開發架構。經實踐論證,低代碼數據接口開發架構可在短時間內完成數據接口的開發,大幅度降低工作量,提高工作效率,從而降低應用開發成本。
關鍵詞: 低代碼; Netty; 架構; 規則引擎; 配置式
中圖分類號:TP399? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2022)06-06-04
Research and implementation of low code data interface development architecture
Xu Jian, Liu Lei
(China Gezhouba Group Explosive Co., Ltd., Yubei, Chongqing 401120, China)
Abstract: In order to reduce the development difficulty, improve the code reuse rate and adapt to the demand change, it is proposed to develop a configuration type less code program framework to reduce the repetitive work of development engineers. Using Netty framework, a rule engine is developed to realize the development architecture of low code server-side data interface in Java environment. It has been proved by practice that the low code data interface development architecture can complete the development of data interface in a short time, greatly reduce the workload, improve the work efficiency, and thus reduce the application development cost.
Key words: low code; Netty; framework; rule engine; configuration type
0 引言
隨著互聯網的發展,信息數據價值達到前所未有的高度,人們對信息的獲取方式從符號、文字、圖片到視頻日益豐富,人們關注的數據分類也相互交叉、匯聚。這就催生出千變萬化的需求,使服務端工程師的開發任務變得紛繁復雜。服務端工程師需要不斷在數據庫、緩存、文件中處理數據,具有較高的技術門檻和較大的工作量。
服務端工程師在長期的開發過程中已從多個方向簡化開發難度,研發并開源了多種公用框架,在一定程度上降低了技術門檻,減輕了開發工作量。但是已有的開發框架種類繁多,存在著學習成本高、技術方案不標準、使用難度高、開發環境限制多等缺點。
本文研究一種通過文件配置的方式來實現服務端數據接口開發的低代碼框架,使非程序技術人員通過簡單的培訓就能完成后端數據接口開發。從而減少服務端工程師的機械工作,使其集中智慧處理復雜邏輯,提高工作效率,實現降本增效。
1 系統總體架構
為應對互聯網的海量數據,兼容常用服務器系統(如Linux、Windows等),本文使用Java語言進行研究實現。系統通過Netty框架監聽端口,收到數據后根據HTTP(s)協議進行解析,結構化地獲得請求方法、協議版本、Host、請求路徑、Header、請求參數等。解析完成后,系統根據請求路徑和請求方法匹配到不同的協議文件,通過自定義規則引擎分析和處理數據,然后通過Netty,按照HTTP(s)協議把結果返回給客戶端。
本研究數據交互流程如圖1所示。
系統采用MVC的模式開發,但用戶配置接口時是使用的命令模式。本系統從邏輯上可分為傳輸層、數據層和持久層。其中傳輸層使用Netty框架監聽服務器端口,等待客戶端請求并建立連接;數據層解析HTTP協議、匹配配置文件、解析并執行配置文件;持久層根據解析結果,執行數據庫操作。
本文總體架構如圖2所示。
本文對重點對規則引擎進行描述,并解釋其協議解析、匹配和執行,通過請求示例描述本研究的核心思想:通過文件配置和解釋執行的方式實現服務端數據接口的快速開發。
2 平臺關鍵技術
2.1 Netty
Netty是一個利用Java的高級網絡的能力,隱藏其背后的復雜性而提供一個易于使用的API的客戶端/服務器框架[1]。Netty是本文研究系統的數據交互核心,其簡單、成熟、穩定的網絡處理特性有助于系統監聽端口并解析HTTP(s)請求。
2.2 規則引擎
規則引擎是通過源代碼、配置文件、公式等方式描述的一組能實現多種可預估或不可預估邏輯運算[2]的程序。如開發語言、數據庫查詢語言等本身是程序解釋器定義了一組邏輯規則,工程師通過編寫符合滿足規則要求的邏輯代碼,并按照指定的方式執行,達到控制計算機或操作數據的目的,那么,這里的程序解釋器就是一個規則引擎。
2.3 JDBC
JDBC是Java用來建立數據庫連接并實現數據庫基本操作的API接口,是常用的面向關系型數據庫的操作工具。在數據的關系邏輯(where語句)上,重點使用了JDBC的PreparedStatement實現。本文利用MySQL數據庫進行研究實現的示例,通過JDBC也能快速適配到其他關系型數據庫上。
2.4 EasyDB
EasyDB是基于JDBC的開源的數據庫操作框架,具備無運行環境要求、使用簡單、程序穩定的優點。EasyDB通過反射的方式把對象解析成SQL元素,通過全局靜態方法生成并執行SQL語句,支持關系型數據庫的基本操作和事務操作。
3 系統實現
經過對系統總體需求和目標的梳理得知,系統應監聽指定端口并等待與客戶端建立連接,實現規則引擎解析協議、匹配解析并執行配置文件,實現對數據庫的操作并返回數據。
本文重點對規則引擎的協議解析、配置文件匹配和解釋執行做出描述,Netty建立服務程序和數據庫操作不是本文研究的主要內容。
3.1 業務設計
在系統啟動時,打開Netty監聽服務,程序讀取指定文件夾下的配置文件,根據文件路徑生成訪問路徑,存儲到路徑緩存Map對象中。系統采用觀察者模式,監控該文件夾下的文件變化,在文件變化時重新讀取,實現接口的熱更新效果。
在Netty接收到來自客戶端的HTTP(s)請求時,Netty調用Handler的channelRead0方法實現響應,程序可以從該方法中讀取到請求路徑。程序根據請求路徑到路徑緩存Map對象中查找,查找成功則匹配到指定的配置文件。
匹配到配置文件后,根據已解析的邏輯處理并執行程序,實現指定規則的數據庫操作。
其主要業務流程如圖3所示。
3.2 配置規則
簡單明了的配置規則是用戶能快速適應、降低學習成本、提高工作效率的基礎。本研究自行設計了配置規則,通過最少一行配置即可實現規則。
本系統使用key-value的形式進行命令式的配置,主要支持配置請求方法(method)、請求參數(param)、SQL語句、是否使用R包裹(統一返回格式)等,部分配置及其解釋、示例如表1所示。
一個簡單的例子如圖4所示。
3.3 解析邏輯
系統參照了類似PHP、JS等解釋性語言的運行邏輯,在收到請求后根據源文件執行邏輯,在運行的時候將程序翻譯成機器語言[3]。解析邏輯是規則引擎的核心,是規則引擎的定義流程[4]。
系統在接收到指定路徑的請求后,根據路徑匹配到文件,對文件解釋執行。程序對指定文件夾下的配置文件掃描讀取,讀取到指定文件后逐行讀取文件,將內容根據預定的配置表進行相應邏輯的處理。
例如,在讀取到配置文件某行以“#”開頭時,則認為是注釋行,直接跳過;當讀取到某行以“method:”開頭時,則認為是請求方法指定;當讀取到某行以“sql:”開頭時,則認為是數據庫操作邏輯,檢查是否有需要根據請求參數進行替換的內容。
3.4 執行邏輯
通常,系統需要對參數進行計劃內的檢查,判斷請求客戶端是否登錄等。判斷邏輯執行成功后,程序執行已處理的SQL語句,接受處理結果并將結果根據配置的規則進行處理(如緩存、運算、修改等)。
3.5 返回結果
本系統使用Netty監聽端口接收數據請求,也使用Netty返回數據。每一個客戶端請求會在服務端產生一個線程,所有程序邏輯在此線程中完成。程序邏輯執行完成后,同步寫入輸出流,實現結果返回功能。
3.6 系統測試
系統設計并實現后使用PostMan進行了API請求測試。研發人員對系統進行了單元測試、確認測試和性能測試,并把系統集成到基于Nacos的微服務環境下進行了集成測試。經測試,該系統運行穩定,能在50ms內響應請求并返回結果,目前已在企業軟件中試運行。
該系統的價值期望體現在成本、質量等方面,同時也期望體現在可移植性、性能和安全等方面[5],需經過長期運行、完善才能驗證系統的價值。
4 結束語
本系統經過預定需求范圍內的業務設計,采用互聯網上成熟的開源框架,基于原生Java實現基于配置文件的服務端數據接口開發系統。系統能實現基礎數據接口和邏輯,滿足一般數據接口的要求,能在較短時間內完成數據查詢接口開發以滿足業務的快速變化,能大幅減少服務端工程師的機械工作,讓服務端工程師能夠聚焦在復雜邏輯上,從信息系統項目管理和人力資源上降本增效。
系統支持配置內容簡單、規則明了,具備SQL語句編寫能力的人即可編寫服務端數據接口,使項目團隊中測試工程師、前端工程師也可根據實際的業務場景參與數據接口的開發,提高工作效率。系統除用于服務端開發外,也可用于數據分析師提取和處理數據等。
雖然系統能在一定程度上降低了數據接口的開發難度,但是系統的邏輯運算支持有限,跨聯表查詢及復雜數據邏輯處理能力不足,需要進一步優化。
參考文獻(References):
[1] Norman Maurer.? Essential Netty in Action
[2]李春芳,譚慶平.面向業務的Drools規則引擎改進[J].計算機應用于軟件,2015(5)20-23
[3] Bruce Eckel.Thinking in Java [J]. Pearson Higher Isia Education,2006-2-20
[4]王李軍,陶明亮,張曙,等.面向業務規則引擎研究[J].計算機工程,2007,33(24):52-56
[5] AltmanER,KaeliD,ShefierY.Welcome To the Opportunities of Binary Translation[J].Computer,2000,33(3):40-45