【關(guān)鍵詞】系統(tǒng)架構(gòu)設(shè)計(jì);螺旋法;子階段
隨著大數(shù)據(jù)、機(jī)器學(xué)習(xí)、人工智能等新興技術(shù)的興起,加之銀行業(yè)在數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)量以及業(yè)務(wù)場(chǎng)景豐富性方面的先天優(yōu)勢(shì),AI模型可優(yōu)先在銀行場(chǎng)景落地,尤其是銀行的營(yíng)銷與風(fēng)控場(chǎng)景,比如理財(cái)產(chǎn)品推薦,客戶畫像,客戶交易圖譜以及信貸場(chǎng)景的ABC卡等都是常見應(yīng)用場(chǎng)景,但目前各銀行AI模型開發(fā)訓(xùn)練工具主要使用的是業(yè)界主流的商業(yè)數(shù)據(jù)挖掘工具(比如:SAS)或者是一些開源機(jī)器學(xué)習(xí)框架(比如Anaconda,R),前者比較昂貴,尤其是每年的證書續(xù)期費(fèi)用,后者則是無法做到開發(fā)工具、硬件資源、開發(fā)模型的統(tǒng)一管理,但這兩者都比較難把開發(fā)后的模型直接發(fā)布成在線服務(wù)供各業(yè)務(wù)系統(tǒng)進(jìn)行調(diào)用。A項(xiàng)目就在此背景下誕生,此項(xiàng)目建設(shè)工期約10個(gè)月,本項(xiàng)目建設(shè)內(nèi)容包括兩個(gè)子系統(tǒng),一個(gè)是AI模型開發(fā)訓(xùn)練平臺(tái),另一個(gè)是AI模型服務(wù)管理平臺(tái),前者主要完成AI模型的開發(fā)訓(xùn)練,后者主要完成將模型鏡像發(fā)布成在線服務(wù)。本項(xiàng)目中,筆者擔(dān)任系統(tǒng)架構(gòu)師,主要負(fù)責(zé)系統(tǒng)架構(gòu)設(shè)計(jì)及開發(fā)技術(shù)指導(dǎo)等工作。鑒于本項(xiàng)目總體功能框架明確,但詳細(xì)的業(yè)務(wù)功能范圍和實(shí)現(xiàn)都較為模糊,加上功能投產(chǎn)的緊迫程度不一致,考慮到螺旋法是一種將結(jié)構(gòu)化開發(fā)方法與原型法相結(jié)合的一種開發(fā)方法,既靈活又能不斷地對(duì)系統(tǒng)進(jìn)行迭代完善的特點(diǎn),經(jīng)筆者提議,在與項(xiàng)目組討論后決定采用螺旋法進(jìn)行系統(tǒng)設(shè)計(jì)。
螺旋法采用一種周期性的開發(fā)方法,在每個(gè)子周期內(nèi)采用瀑布模型法,每一個(gè)周期又產(chǎn)出一個(gè)軟件過程版本,此為快速原型法[1],也就是它充分結(jié)合了瀑布模型法與原型法[2]兩種開發(fā)模型的優(yōu)勢(shì),將整個(gè)系統(tǒng)開發(fā)過程分成幾個(gè)階段,每個(gè)階段內(nèi)又定義四個(gè)子過程,首先是目標(biāo)確定子過程,它定義在本階段內(nèi)要實(shí)現(xiàn)哪些業(yè)務(wù)目標(biāo),也就是實(shí)現(xiàn)哪些系統(tǒng)功能;接著是風(fēng)險(xiǎn)分析子過程,這也是螺旋法區(qū)別于前面兩種模型的一個(gè)比較重要的特點(diǎn),在此過程中主要解決若要實(shí)現(xiàn)本階段內(nèi)的這些功能,存在哪些技術(shù)上的、業(yè)務(wù)上的、管理上的約束等風(fēng)險(xiǎn)因素,這需要與項(xiàng)目組全體成員一起來討論;再者是開發(fā)與驗(yàn)證子過程,主要完成本階段內(nèi)的功能開發(fā)、測(cè)試以及業(yè)務(wù)驗(yàn)證,由于將系統(tǒng)開發(fā)分成了若干個(gè)階段,每階段內(nèi)要開發(fā)的功能粒度就更小,則比較適合采用原型法進(jìn)行開發(fā)[3];最后是階段性復(fù)盤子過程,主要總結(jié)在本階段內(nèi)所遇到的一些問題、解決方法以及一些遺留事項(xiàng),用于進(jìn)一步?jīng)Q策是否需要進(jìn)入下一階段以及如何更好開展下一階段的工作。
下面詳細(xì)闡述螺旋法在本項(xiàng)目中的具體實(shí)踐情況
(一)項(xiàng)目整體階段劃分
首先,項(xiàng)目組向用戶演示了我司模型服務(wù)管理方面的成熟產(chǎn)品,包括功能、性能、架構(gòu)等內(nèi)容,并著重突出了產(chǎn)品的亮點(diǎn)。接著,項(xiàng)目組征詢了客戶對(duì)本項(xiàng)目AI模型服務(wù)管理平臺(tái)功能的初步想法,主要側(cè)重點(diǎn)在鏡像同步、服務(wù)部署、服務(wù)編排、API發(fā)布、流量控制以及服務(wù)監(jiān)控等方面的功能。然后,就客戶提出的問題進(jìn)行了應(yīng)答,闡述了對(duì)AI模型服務(wù)管理平臺(tái)的初步設(shè)計(jì)理念。另外,也聽取了客戶對(duì)于本項(xiàng)目各功能投產(chǎn)先后順序的需求,比如客戶也同步在開展一些模型的建設(shè),比如OCR模型、語音識(shí)別模型,所以需要服務(wù)部署以及API發(fā)布等主體功能優(yōu)先上線,最終,雙方達(dá)成了初步的一致的意見。具體而言,架構(gòu)層面,系統(tǒng)總體使用雙中心架構(gòu),為保證模型服務(wù)的高可用性、可伸縮性以及安全性,各中心采用K8S集群進(jìn)行模型部署管理,服務(wù)管理平臺(tái)端采用三層架構(gòu),使用SSM+Redis框架,另外為配合甲方信創(chuàng)要求,數(shù)據(jù)庫(kù)使用國(guó)產(chǎn)OB數(shù)據(jù)庫(kù);功能層面,分三階段進(jìn)行,首先是主體功能部分,比如服務(wù)部署,API發(fā)布等,其次是與客戶現(xiàn)有相關(guān)業(yè)務(wù)系統(tǒng)對(duì)接,比如統(tǒng)一登錄、客服系統(tǒng)等,最后是雙活與流量控制功能。實(shí)踐表明,分階段分批次開發(fā)與投產(chǎn),既滿足了客戶的實(shí)際需求又可以根據(jù)項(xiàng)目實(shí)際人力投入進(jìn)行合理安排。
(二)目標(biāo)確定子過程
各階段要完成的業(yè)務(wù)目標(biāo)確定后,接下來進(jìn)入每一階段時(shí),需要對(duì)階段目標(biāo)進(jìn)一步細(xì)化,也就是對(duì)階段內(nèi)要完成的功能進(jìn)一步拆解,常用的功能分解方法有結(jié)構(gòu)化分析方法,此方法是面向數(shù)據(jù)流的分析方法,通過功能分解方式把系統(tǒng)功能分解到各個(gè)模塊中,它有三個(gè)常用工具,分別是數(shù)據(jù)流圖、狀態(tài)轉(zhuǎn)換圖以及實(shí)體關(guān)系圖,此處項(xiàng)目組使用數(shù)據(jù)流圖工具,功能拆解大體思路是首先將本階段內(nèi)要完成的功能作為頂層數(shù)據(jù)流圖,比如在本項(xiàng)目中,頂層數(shù)據(jù)流圖如下圖所示:
經(jīng)與客戶溝通得知,其內(nèi)部的組織架構(gòu)分為研發(fā)條線與運(yùn)維條線。系統(tǒng)在正式上線之前,也就是項(xiàng)目開發(fā)階段時(shí),主要由研發(fā)條線負(fù)責(zé),而系統(tǒng)一旦上線后,系統(tǒng)就交付給運(yùn)維條線進(jìn)行負(fù)責(zé),運(yùn)維條線關(guān)注重點(diǎn)系統(tǒng)軟硬件的運(yùn)行健康情況,而研發(fā)條線在系統(tǒng)上線后則關(guān)注重點(diǎn)系統(tǒng)功能層面的運(yùn)行及使用情況,另外,AI模型服務(wù)管理平臺(tái)還需要與AI模型開發(fā)訓(xùn)練平臺(tái)進(jìn)行對(duì)接,如本文“項(xiàng)目背景”所述,它需要將在AI模型開發(fā)訓(xùn)練平臺(tái)中開發(fā)的模型發(fā)布成API服務(wù),供其他系統(tǒng)調(diào)用,所以,AI模型開發(fā)訓(xùn)練平臺(tái)需將開發(fā)完成的模型鏡像推送到AI模型服務(wù)管理平臺(tái)的鏡像倉(cāng)庫(kù)中,最后,無論是其他系統(tǒng)調(diào)用AI模型服務(wù)管理平臺(tái)的模型API,還是AI模型服務(wù)管理平臺(tái)去調(diào)用其他系統(tǒng)的接口都需要經(jīng)過企業(yè)服務(wù)總線ESB,所以,本系統(tǒng)的頂層數(shù)據(jù)流圖中外部實(shí)體應(yīng)至少包含系統(tǒng)管理員、系統(tǒng)運(yùn)維人員、AI模型開發(fā)訓(xùn)練平臺(tái)與ESB四個(gè),而各個(gè)外部實(shí)體與本系統(tǒng)之間交互的信息也如圖1所示。
接著,對(duì)頂層數(shù)據(jù)流圖進(jìn)一步細(xì)分為各層級(jí)數(shù)據(jù)流圖,比如AI模型服務(wù)管理平臺(tái)主要功能包括鏡像管理、服務(wù)管理、API管理、渠道管理、服務(wù)總覽等業(yè)務(wù)模塊,則第二級(jí)數(shù)據(jù)流圖應(yīng)圍繞著這些功能展開,詳細(xì)列出對(duì)應(yīng)的外部實(shí)體,輸入輸出數(shù)據(jù)。另外,為了保證整個(gè)細(xì)化過程不發(fā)散,控制項(xiàng)目范圍,在細(xì)分各層級(jí)數(shù)據(jù)流圖時(shí),先向客戶演示我司類似產(chǎn)品相關(guān)功能或者使用Axure原型設(shè)計(jì)工具將功能界面原型圖展示給客戶,然后確定本階段具體要實(shí)現(xiàn)的功能目標(biāo)。實(shí)踐表明,采用類似產(chǎn)品做原型展示讓客戶更有直觀感受,另外,使用數(shù)據(jù)流圖能更清晰地展示功能之間的層次關(guān)系與交互關(guān)系。
(三)風(fēng)險(xiǎn)分析子過程
每階段因?yàn)橐獙?shí)現(xiàn)的功能不一樣,所以受到的約束條件也不一樣,比如有些功能的實(shí)現(xiàn)是依賴銀行內(nèi)其他系統(tǒng)的配合,需要對(duì)方提供一些技術(shù)對(duì)接細(xì)節(jié),因此需要綜合考慮這些風(fēng)險(xiǎn)因素。為了能全面識(shí)別這些潛在的風(fēng)險(xiǎn)因素,需采用一套比較科學(xué)的風(fēng)險(xiǎn)識(shí)別方法,目前常用的項(xiàng)目風(fēng)險(xiǎn)識(shí)別方法工具有專家判斷、頭腦風(fēng)暴、訪談以及SWOT分析法[4]等,其中SWOT分析法更多是應(yīng)用于一項(xiàng)新技術(shù)或者新產(chǎn)品的研發(fā)分析,它著眼于全局,而頭腦風(fēng)暴與訪談?dòng)志窒抻趨⑴c對(duì)象的項(xiàng)目經(jīng)驗(yàn),所以,最終還是采用專家判斷法。項(xiàng)目組主要邀請(qǐng)甲方技術(shù)負(fù)責(zé)人以及架構(gòu)專家一起討論,討論步驟具體為:首先,將風(fēng)險(xiǎn)劃分為三個(gè)大類,分別為技術(shù)風(fēng)險(xiǎn)、業(yè)務(wù)風(fēng)險(xiǎn)以及管理風(fēng)險(xiǎn);其次,分別針對(duì)三大風(fēng)險(xiǎn)進(jìn)一步討論細(xì)項(xiàng),比如技術(shù)風(fēng)險(xiǎn)中有一項(xiàng)是與ESB對(duì)接,如何對(duì)接,存在怎樣的接口定義規(guī)范,報(bào)文要求以及實(shí)現(xiàn)的難度等,都將影響開發(fā)進(jìn)度的正常開展,所以對(duì)于涉及行內(nèi)系統(tǒng)對(duì)接的,盡量讓對(duì)方給出對(duì)接DEMO以及相關(guān)接口文檔,或者提供行內(nèi)技術(shù)文檔知識(shí)庫(kù),比如SVN,以供查詢。而業(yè)務(wù)風(fēng)險(xiǎn)主要來源于業(yè)務(wù)人員的測(cè)試安排,對(duì)技術(shù)的了解程度等,與之對(duì)應(yīng)的應(yīng)對(duì)方法是業(yè)務(wù)人員的測(cè)試投入計(jì)劃表,交測(cè)前的系統(tǒng)測(cè)試培訓(xùn)等。最后將細(xì)化后的風(fēng)險(xiǎn)清單以及應(yīng)對(duì)方法文檔化,得到項(xiàng)目風(fēng)險(xiǎn)手冊(cè),將其歸檔到項(xiàng)目知識(shí)庫(kù)中并同步做成在線共享文檔方便后續(xù)進(jìn)一步維護(hù)。
(四)開發(fā)及驗(yàn)證子過程
由于是分階段開發(fā),而各階段雖然業(yè)務(wù)功能不一樣,但總體還是一種B/S架構(gòu),分為表現(xiàn)層、邏輯實(shí)現(xiàn)層(SERVICE)以及數(shù)據(jù)訪問層DAO,而各功能的實(shí)現(xiàn)無非是繪制各功能特有的頁(yè)面,而定義各功能特有的業(yè)務(wù)邏輯、中間的控制轉(zhuǎn)換、對(duì)象管理以及數(shù)據(jù)庫(kù)訪問機(jī)制都是一樣的,所以對(duì)與該子過程筆者將整個(gè)開發(fā)團(tuán)隊(duì)分成三個(gè)角色,一是負(fù)責(zé)前端UI界面的設(shè)計(jì)與開發(fā),二是負(fù)責(zé)中間框架層的業(yè)務(wù)功能實(shí)現(xiàn),最后是數(shù)據(jù)庫(kù)層的SQL代碼實(shí)現(xiàn)。這樣的話,可以保證快速地做出客戶想要的頁(yè)面原型,及時(shí)與客戶溝通,另外,也可以做到整體底層模塊的復(fù)用,不用每個(gè)子功能都要獨(dú)立實(shí)現(xiàn)。
最后,在本系統(tǒng)架構(gòu)設(shè)計(jì)中,使用了微服務(wù)思想,采用SpringBoot框架,傳統(tǒng)的WEB開發(fā),每次的測(cè)試與發(fā)布時(shí),都是需要將所有功能模塊代碼一起進(jìn)行編譯發(fā)布,對(duì)于系統(tǒng)比較龐大以及協(xié)作開發(fā)的場(chǎng)景,這種編譯發(fā)布模式,往往使單個(gè)功能模塊的測(cè)試過程變得非常困難,而采用微服務(wù)框架,每個(gè)服務(wù)模塊都是獨(dú)立運(yùn)行,所以也方便開發(fā)人員進(jìn)行測(cè)試,特別地,對(duì)于這種分階段開發(fā)的項(xiàng)目,每個(gè)階段完成的功能模塊不一樣,所以,采用微服務(wù)模式,就更顯優(yōu)勢(shì),相當(dāng)于各階段的開發(fā)都不存在強(qiáng)耦合關(guān)系,比如,在本系統(tǒng)中,鏡像倉(cāng)庫(kù),系統(tǒng)日志模塊,用戶管理模塊,模型調(diào)用網(wǎng)關(guān)模塊等都是獨(dú)立運(yùn)行在K8S集群容器中,為了保證各服務(wù)的高可用性,每個(gè)容器都采用多副本機(jī)制。實(shí)踐證明,采用微服務(wù)與K8S集群進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì),是一種非常有效的系統(tǒng)設(shè)計(jì)與開發(fā)方法。
(五)階段性復(fù)盤子過程
階段性復(fù)盤,目前主流的方法是敏捷開發(fā)方法Scrum[2]中的沖刺回顧,即沖刺結(jié)束后,團(tuán)隊(duì)會(huì)開兩場(chǎng)會(huì)議,一個(gè)是評(píng)審會(huì),由開發(fā)團(tuán)隊(duì)給產(chǎn)品負(fù)責(zé)人演示交付功能,并接受評(píng)價(jià);另一個(gè)是反思回顧會(huì),對(duì)本次沖刺進(jìn)行總結(jié),所有團(tuán)隊(duì)成員都要反思這個(gè)沖刺,以便下一次沖刺可以更好地進(jìn)行。在本項(xiàng)目中,每階段投產(chǎn)后,會(huì)進(jìn)行投產(chǎn)后驗(yàn)證、評(píng)價(jià)以及階段內(nèi)復(fù)盤,前者主要由業(yè)務(wù)人員主導(dǎo),分別從功能可使用性、體驗(yàn)性、加分項(xiàng)三個(gè)方面進(jìn)行評(píng)估, 而階段內(nèi)復(fù)盤主要盤點(diǎn)功能實(shí)現(xiàn)方面是否存在較臃腫的,不靈活的,或者性能不好的,比如,為什么投產(chǎn)功能與開發(fā)測(cè)試環(huán)境不一致問題,有時(shí)會(huì)出現(xiàn)在開發(fā)測(cè)試環(huán)境的運(yùn)行正常的功能在生產(chǎn)環(huán)境卻運(yùn)行異常,原因有可能是配置文件未進(jìn)行多環(huán)境設(shè)置,因此需要后期將相關(guān)配置信息做成參數(shù)化頁(yè)面,方便客戶維護(hù),也提高了系統(tǒng)的可維護(hù)性。最后就是評(píng)審本階段功能,若已驗(yàn)證無問題,則可以開啟下一階段的功能開發(fā)。
項(xiàng)目組經(jīng)過10個(gè)月的艱苦奮戰(zhàn)研發(fā),系統(tǒng)在經(jīng)過多次迭代發(fā)布之后于2023年9月成功上線,現(xiàn)已基本處于穩(wěn)定運(yùn)行狀態(tài),得到了客戶、領(lǐng)導(dǎo)的一致認(rèn)可,現(xiàn)如今也已經(jīng)部署了ASR、TTS、OCR、業(yè)務(wù)類型推薦等AI模型,并向多個(gè)部門進(jìn)行了推廣使用,而且這些模型服務(wù)發(fā)布到服務(wù)管理平臺(tái)后也都穩(wěn)定運(yùn)行,扛住了高并發(fā)的壓力。得益于螺旋法的正確使用,項(xiàng)目才能快速穩(wěn)定地上線。通過本次項(xiàng)目的設(shè)計(jì)與實(shí)現(xiàn),筆者愈發(fā)體會(huì)到選擇正確的軟件開發(fā)方法能夠讓整個(gè)項(xiàng)目開發(fā)工作節(jié)省很多不必要的時(shí)間、精力、財(cái)力的支出,從而達(dá)到事半功倍的效果。筆者也深刻體會(huì)到持續(xù)學(xué)習(xí)、與時(shí)俱進(jìn),將會(huì)是貫穿筆者作為系統(tǒng)架構(gòu)師生涯的永恒主題。