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