梁晨 王耀俊
摘要:越來(lái)越多的金融科技公司開始采用微服務(wù)架構(gòu)設(shè)計(jì)核心業(yè)務(wù)系統(tǒng),傳統(tǒng)元數(shù)據(jù)管理軟件雖然功能龐雜,但多適用于數(shù)據(jù)倉(cāng)庫(kù)或者大數(shù)據(jù)平臺(tái),架構(gòu)相對(duì)較“重”,且價(jià)格不菲,不適用于微服務(wù)這種“小快靈”的敏捷開發(fā)模式。微服務(wù)架構(gòu)下,各個(gè)微服務(wù)可能由多個(gè)團(tuán)隊(duì)獨(dú)立開發(fā),元數(shù)據(jù)如果管控不好,以后會(huì)造成各個(gè)微服務(wù)之間數(shù)據(jù)字段定義沖突以及接口交互困難。該文提出了微服務(wù)架構(gòu)下元數(shù)據(jù)管理的流程,并自主研發(fā)了一個(gè)適用于微服務(wù)模式開發(fā)使用的元數(shù)據(jù)管理平臺(tái),將其與自動(dòng)化測(cè)試以及持續(xù)集成結(jié)合使用,有效地提高了微服務(wù)開發(fā)的數(shù)據(jù)質(zhì)量和開發(fā)效率。
關(guān)鍵詞:元數(shù)據(jù)管理;微服務(wù);金融科技
中圖分類號(hào):TP311 ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)17-0049-02
1 元數(shù)據(jù)和元數(shù)據(jù)管理
元數(shù)據(jù)(meta-data)簡(jiǎn)單的定義是描述數(shù)據(jù)的數(shù)據(jù),元數(shù)據(jù)管理是企業(yè)數(shù)據(jù)治理中最核心和最基礎(chǔ)的工作,也是企業(yè)數(shù)據(jù)中臺(tái)的基礎(chǔ)。OMG(國(guó)際對(duì)象管理組織,BPMN和UML語(yǔ)言標(biāo)準(zhǔn)的制定者)將數(shù)據(jù)模型定義為數(shù)據(jù)、元數(shù)據(jù)、元模型和元元模型從下到上四個(gè)層次,每一層都是下層的抽象。元數(shù)據(jù)和元模型是其中管理的核心。
企業(yè)中一般進(jìn)行管理的元數(shù)據(jù)主要為業(yè)務(wù)元數(shù)據(jù)、技術(shù)元數(shù)據(jù)。業(yè)務(wù)元數(shù)據(jù)主要包括業(yè)務(wù)術(shù)語(yǔ)、業(yè)務(wù)指標(biāo)、業(yè)務(wù)規(guī)則和取值范圍等,業(yè)務(wù)術(shù)語(yǔ)通常會(huì)被拆分和建模成更細(xì)的業(yè)務(wù)詞典,即元模型。技術(shù)元數(shù)據(jù)主要包括數(shù)據(jù)字典、表結(jié)構(gòu),字段屬性,服務(wù)接口等。例如“結(jié)算金額”,它的業(yè)務(wù)定義和統(tǒng)計(jì)規(guī)則是業(yè)務(wù)元數(shù)據(jù),它在數(shù)據(jù)庫(kù)存儲(chǔ)的字段類型、長(zhǎng)度和精度就屬于技術(shù)元數(shù)據(jù)。
2 微服務(wù)架構(gòu)下元數(shù)據(jù)設(shè)計(jì)和管理的難點(diǎn)
在微服務(wù)架構(gòu)下應(yīng)用服務(wù)被拆分成多個(gè)小粒度的微服務(wù),不同的微服務(wù)可以由不同的團(tuán)隊(duì)開發(fā),甚至可以使用不同的開發(fā)語(yǔ)言。如果元數(shù)據(jù)無(wú)法統(tǒng)一管理,無(wú)法形成統(tǒng)一的元模型,那么微服務(wù)之間無(wú)法形成統(tǒng)一的“語(yǔ)言”,就無(wú)法完成數(shù)據(jù)的通訊和交互。例如一個(gè)微服務(wù)中日期字段定義成了年-月-日,它的下游接口卻只能接收年/月/日的日期格式,那這兩個(gè)微服務(wù)就無(wú)法交互。
因此有必要對(duì)微服務(wù)的元數(shù)據(jù)進(jìn)行統(tǒng)一管理。
3 微服務(wù)下元數(shù)據(jù)的管理范圍
為了適應(yīng)微服務(wù)的開發(fā),業(yè)務(wù)元數(shù)據(jù)和技術(shù)元數(shù)據(jù)按如下分類納入元數(shù)據(jù)管理:其中業(yè)務(wù)詞典、標(biāo)準(zhǔn)技術(shù)類型、標(biāo)準(zhǔn)業(yè)務(wù)類型、默認(rèn)值、數(shù)據(jù)字典及關(guān)聯(lián)關(guān)系和標(biāo)準(zhǔn)字段屬于企業(yè)級(jí)的元數(shù)據(jù),是各個(gè)微服務(wù)團(tuán)隊(duì)需要統(tǒng)一遵守的元數(shù)據(jù),這些被定義為公用元數(shù)據(jù)。數(shù)據(jù)庫(kù)相關(guān)表、視圖等數(shù)據(jù)庫(kù)元數(shù)據(jù)和服務(wù)接口由每個(gè)微服務(wù)團(tuán)隊(duì)自己定義,不屬于公用元數(shù)據(jù)。
4 元數(shù)據(jù)的設(shè)計(jì)過(guò)程
設(shè)計(jì)元數(shù)據(jù)首先要從業(yè)務(wù)或用戶需求入手,收集整理業(yè)務(wù)需求和場(chǎng)景中所有業(yè)務(wù)術(shù)語(yǔ)和取值范圍,并對(duì)這些業(yè)務(wù)術(shù)語(yǔ)分解成最新粒度的“單詞”。例如將“參與者交易限額”拆分為“參與者”“交易”和“限額”。各微服務(wù)團(tuán)隊(duì)之間如果有“單詞”重復(fù),則以主數(shù)據(jù)源的團(tuán)隊(duì)定義為標(biāo)準(zhǔn),合并各團(tuán)隊(duì)間不一致的“單詞”,最終形成全系統(tǒng)統(tǒng)一的業(yè)務(wù)詞典、默認(rèn)值和數(shù)據(jù)字典,完成業(yè)務(wù)數(shù)據(jù)的建模。
根據(jù)技術(shù)上的數(shù)據(jù)庫(kù)選型,定義標(biāo)準(zhǔn)技術(shù)類型,包括變長(zhǎng)字符、定長(zhǎng)字符、整數(shù)、小數(shù)、日期和時(shí)間等類型?;跇?biāo)準(zhǔn)技術(shù)類型,定義標(biāo)準(zhǔn)業(yè)務(wù)類型用于標(biāo)識(shí)業(yè)務(wù)對(duì)象的數(shù)據(jù)類型,賦予業(yè)務(wù)含義。
結(jié)合業(yè)務(wù)詞典和標(biāo)準(zhǔn)業(yè)務(wù)類型生成標(biāo)準(zhǔn)字段,標(biāo)準(zhǔn)字段的中文名稱必須全系統(tǒng)唯一,原則上需滿足“修飾符”+“實(shí)體名”的格式。
以“結(jié)算金額”字段的定義過(guò)程為例,首先根據(jù)數(shù)據(jù)庫(kù)使用的數(shù)值類型作為標(biāo)準(zhǔn)技術(shù)類型ChTNumeric,再根據(jù)業(yè)務(wù)含義基于此標(biāo)準(zhǔn)技術(shù)類型定義一個(gè)“金額”的標(biāo)準(zhǔn)業(yè)務(wù)類型ChAmt,長(zhǎng)度為18位,小數(shù)精度為2位。在標(biāo)準(zhǔn)字段定義時(shí)將“結(jié)算金額”定義為ChAmt類型的標(biāo)準(zhǔn)字段(ChAmt類型也可以被其他標(biāo)準(zhǔn)字段如將“交易面額”使用)。
有了標(biāo)準(zhǔn)字段就可以定義表字段和建數(shù)據(jù)表。同時(shí)接口對(duì)象需按照標(biāo)準(zhǔn)字段定義,不允許接口對(duì)象中出現(xiàn)非標(biāo)準(zhǔn)字段,通過(guò)給接口對(duì)象賦予輸入和輸出屬性可以完成微服務(wù)接口的定義。這樣有了元數(shù)據(jù)的控制,表的定義和微服務(wù)接口的定義就得到了嚴(yán)格的管理。
5 元數(shù)據(jù)管理流程
元數(shù)據(jù)管理涉及三種角色:微服務(wù)開發(fā)團(tuán)隊(duì)中的開發(fā)人員、微服務(wù)組長(zhǎng)、元數(shù)據(jù)管理員。開發(fā)人員負(fù)責(zé)進(jìn)行元數(shù)據(jù)的錄入,微服務(wù)組長(zhǎng)檢查和復(fù)核團(tuán)隊(duì)成員錄入的元數(shù)據(jù),確保組內(nèi)成員申請(qǐng)的元數(shù)據(jù)無(wú)歧義和無(wú)沖突。如果提交的是公共元數(shù)據(jù),則在組長(zhǎng)復(fù)核通過(guò)后提交元數(shù)據(jù)管理員審核。元數(shù)據(jù)管理員站在企業(yè)級(jí)視角,審核各個(gè)微服務(wù)團(tuán)隊(duì)提交的公共元數(shù)據(jù),確保各組之間的定義沒(méi)有沖突和違反元數(shù)據(jù)定義規(guī)范。同時(shí)元數(shù)據(jù)管理員應(yīng)該不定期的檢查各個(gè)微服務(wù)團(tuán)隊(duì)獨(dú)立定義的專有元數(shù)據(jù),確保各自提交的元數(shù)據(jù)符合組織的規(guī)范。
6 元數(shù)據(jù)的平臺(tái)架構(gòu)和實(shí)現(xiàn)
筆者從2017年開始元數(shù)據(jù)管理平臺(tái)的調(diào)研,發(fā)現(xiàn)適合微服務(wù)架構(gòu)開發(fā)的元數(shù)據(jù)管理平臺(tái)較少,大部分是傳統(tǒng)數(shù)據(jù)倉(cāng)庫(kù)使用的元數(shù)據(jù)管理平臺(tái),功能雖多但架構(gòu)較重使用不方便。于是筆者所在公司就自行研發(fā)了針對(duì)微服務(wù)開發(fā)元數(shù)據(jù)管理平臺(tái)(ONE-META)。下面對(duì)該平臺(tái)整體架構(gòu)和功能做個(gè)簡(jiǎn)介。
6.1 整體系統(tǒng)架構(gòu)
本平臺(tái)采用當(dāng)前較為流行的Spring Boot架構(gòu)做后臺(tái)開發(fā),Vue.JS做前臺(tái)界面開發(fā)。主要包括:1)前端展示層,使用Vue.JS+瀏覽器方式提供用戶界面。2)接入控制層,負(fù)責(zé)用戶崗位管理、服務(wù)監(jiān)控、異常日志和登錄認(rèn)證等控制功能。3)業(yè)務(wù)邏輯層,提供的業(yè)務(wù)功能主要包括公用元數(shù)據(jù)管理、數(shù)據(jù)庫(kù)元數(shù)據(jù)管理和服務(wù)接口元數(shù)據(jù)管理功能模塊,負(fù)責(zé)各自領(lǐng)域元數(shù)據(jù)的錄入管理;同時(shí)本層提供統(tǒng)一公共技術(shù)組件包括代碼自動(dòng)生成、元數(shù)據(jù)核對(duì)、影響分析和血緣分析供上層功能模塊統(tǒng)一使用。4)數(shù)據(jù)存儲(chǔ)層,為MySQL數(shù)據(jù)和Redis緩存。
6.2 核心框架技術(shù)
1)Spring Boot框架
Spring Boot提供了 Spring組件一站式解決方案,主要是為了簡(jiǎn)化使用 Spring 框架的難度和配置。Spring Boot提供了各種組件的啟動(dòng)器(starters),開發(fā)者只要能配置好對(duì)應(yīng)組件參數(shù),Spring Boot 就會(huì)自動(dòng)配置,讓開發(fā)者能快速搭建依賴于 Spring 組件的 Java 項(xiàng)目。
2)Vue.JS框架
Vue.JS是一套用于構(gòu)建B/S前端界面的新一代Javascript框架。Vue.JS采用自底而上的增量開發(fā)模式,重點(diǎn)關(guān)注View視圖層的開發(fā)并通過(guò)API實(shí)現(xiàn)前端響應(yīng)的數(shù)據(jù)綁定和網(wǎng)頁(yè)視圖組件的自動(dòng)更新。
6.3 核心業(yè)務(wù)功能
1)元數(shù)據(jù)的錄入審批功能
主要是公用元數(shù)據(jù)、數(shù)據(jù)庫(kù)元數(shù)據(jù)和服務(wù)接口元數(shù)據(jù)等各類元數(shù)據(jù)的提交錄入、復(fù)核和審批等功能,實(shí)現(xiàn)了元數(shù)據(jù)的登記和管控。
2)元數(shù)據(jù)的版本管理
通過(guò)拉鏈算法跟蹤元數(shù)據(jù)變化情況,進(jìn)行版本管理。 拉鏈算法主要是用來(lái)記錄整條數(shù)據(jù)的生命周期,然后通過(guò)版本號(hào)記錄每個(gè)元數(shù)據(jù)每次的變更情況,為版本追溯和增加代碼自動(dòng)生成提供基礎(chǔ)。
3)SQL腳本和JAVA代碼自動(dòng)生成
根據(jù)數(shù)據(jù)庫(kù)元數(shù)據(jù)和版本,自動(dòng)生成可以交付直接生產(chǎn)的SQL腳本(全量或增量)。例如表結(jié)構(gòu)、字段數(shù)據(jù)字典變更后的SQL語(yǔ)句,減少手工SQL手工編寫SQL腳本操作,提高軟件版本交付質(zhì)量。
數(shù)據(jù)庫(kù)表定義完成后,本平臺(tái)還可以自動(dòng)生成數(shù)據(jù)訪問(wèn)層的DAO和SQLMAP等JAVA代碼。服務(wù)接口定義完成后,可自動(dòng)生成前后端接口層的JAVA代碼。這兩種代碼自動(dòng)生成功能減少了開發(fā)人員手工JAVA代碼編寫,提高開發(fā)效率。
4)服務(wù)接口注冊(cè)及依賴關(guān)系管理
包括接口對(duì)象的定義,服務(wù)接口請(qǐng)求和相應(yīng)報(bào)文定義以及服務(wù)接口注冊(cè)。本平臺(tái)管理的服務(wù)接口包括MQ接口和系統(tǒng)間接口。
同時(shí)每個(gè)接口注冊(cè)時(shí)需登記調(diào)用方,有助于明確微服務(wù)之間調(diào)用關(guān)系和以后調(diào)用鏈的分析比對(duì)。元數(shù)據(jù)發(fā)生變化后,自動(dòng)根據(jù)調(diào)用關(guān)系通知調(diào)用方。
5)緩存命名管理
隨著微服務(wù)架構(gòu)中REDIS緩存技術(shù)越來(lái)越多地被使用,REDIS緩存KEY的命名數(shù)據(jù)的定義也納入技術(shù)元數(shù)據(jù)統(tǒng)一管理統(tǒng)一注冊(cè)在本平臺(tái),以防止不同微服務(wù)之間緩存KEY定義相同,導(dǎo)致緩存沖突。
6)對(duì)外REST接口
本元數(shù)據(jù)管理平臺(tái)通過(guò)REST接口對(duì)外提供元數(shù)據(jù)查詢功能,包括服務(wù)接口查詢、標(biāo)準(zhǔn)字段查詢和數(shù)據(jù)庫(kù)腳本查詢等。因此元數(shù)據(jù)管理可以納入自動(dòng)化測(cè)試或者持續(xù)集成等軟件開發(fā)流程并被調(diào)用,進(jìn)而納入統(tǒng)一的開發(fā)流程管理。
7 元數(shù)據(jù)與持續(xù)集成結(jié)合
持續(xù)集成已經(jīng)從軟件工程的最佳實(shí)踐變?yōu)槭聦?shí)上微服務(wù)開發(fā)的行業(yè)標(biāo)準(zhǔn),它鼓勵(lì)開發(fā)人員頻繁地向主干分支提交代碼,頻率為至少每天一次。每次提交完都觸發(fā)完整的編譯構(gòu)建和自動(dòng)化測(cè)試流程,縮短反饋周期。一旦軟件出現(xiàn)問(wèn)題都可以第一時(shí)間發(fā)現(xiàn)并進(jìn)行修復(fù),從而保證代碼質(zhì)量讓軟件隨時(shí)處于可發(fā)布狀態(tài)。
在微服務(wù)架構(gòu)開發(fā)測(cè)試中,自動(dòng)化測(cè)試中主要的一部分為服務(wù)接口的自動(dòng)化測(cè)試,這通常需要測(cè)試人員手動(dòng)根據(jù)開發(fā)人員的接口定義編寫案例。如果開發(fā)人員編寫的接口無(wú)法和測(cè)試人員的案例有效同步,那么測(cè)試是無(wú)效的。
本平臺(tái)在與自動(dòng)化測(cè)試工具結(jié)合時(shí),對(duì)外提供了微服務(wù)接口定義的查詢功能,自動(dòng)化測(cè)試工具自動(dòng)讀取元數(shù)據(jù)管理平臺(tái)定義的接口,自動(dòng)生成接口案例,提高了接口案例編寫的效率。接口發(fā)生變更時(shí),自動(dòng)化測(cè)試工具可手工觸發(fā)案例自動(dòng)更新。
在數(shù)據(jù)庫(kù)腳本打包中,持續(xù)集成平臺(tái)自動(dòng)讀取本元數(shù)據(jù)平臺(tái)的數(shù)據(jù)庫(kù)全量/增量腳本,減少了開發(fā)人員手工編寫數(shù)據(jù)腳本的工作,提升了交付的質(zhì)量。
8 總結(jié)
本文研究了微服務(wù)下元數(shù)據(jù)的管理,并自研了適合微服務(wù)開發(fā)模式的元數(shù)據(jù)管理平臺(tái)。提高了微服務(wù)下的元數(shù)據(jù)管理水平和應(yīng)用系統(tǒng)的設(shè)計(jì)開發(fā)效率,改善了微服務(wù)設(shè)計(jì)不規(guī)范的現(xiàn)象,促進(jìn)了金融科技公司數(shù)據(jù)治理向“一致性、規(guī)范性、開放性和共享性”邁進(jìn)。
參考文獻(xiàn):
[1] 楊鴻賓,宋明.元數(shù)據(jù)管理平臺(tái)總體架構(gòu)設(shè)計(jì)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2007,16(11):17-20.
[2] 于千城.企業(yè)數(shù)據(jù)倉(cāng)庫(kù)中元數(shù)據(jù)的應(yīng)用研究[J].電腦與信息技術(shù),2008,16(6):43-45.
[3] 劉麗娟.基于CWM的ETL元數(shù)據(jù)管理系統(tǒng)研究與實(shí)現(xiàn)[D].西安:西北大學(xué),2008.
【通聯(lián)編輯:代影】