??平安城市是一個由各式軟硬件組成的復(fù)雜網(wǎng)絡(luò)系統(tǒng),視頻業(yè)務(wù)是其核心業(yè)務(wù)。在平安城市網(wǎng)絡(luò)中部署著眾多視頻圖像信息采集、傳輸、處理設(shè)備和應(yīng)用軟件系統(tǒng)。這些設(shè)備與應(yīng)用軟件系統(tǒng)在滿足治安管理、城市管理、交通管理、應(yīng)急指揮等多樣化需求的同時,也對運維管理提出了新的要求與挑戰(zhàn)。
??平安城市的運維管理所面對的挑戰(zhàn)如圖1所示。
??針對平安城市的運維管理挑戰(zhàn),平安城市運維管理系統(tǒng)(以下簡稱運維管理系統(tǒng))的功能和范圍定義如圖2所示。
??不同于電信網(wǎng)絡(luò)、計算機網(wǎng)絡(luò)的運維管理系統(tǒng),平安城市的運維管理系統(tǒng)所管理的管理單元更為多樣化與復(fù)雜化,在功能上聚焦為用戶提供多層次價值。
??圖3以蘇州科達建設(shè)的一個典型平安城市項目為例,描述了運維管理系統(tǒng)與平安城市中各類管理單元間的關(guān)系。
??我們將運維管理系統(tǒng)涉及到的管理單元分為兩類:一類為設(shè)備,包含通用設(shè)備、視頻圖像信息采集設(shè)備等設(shè)備;一類為應(yīng)用軟件系統(tǒng),包括視頻圖像信息應(yīng)用系統(tǒng)、視頻監(jiān)控平臺、視圖庫等軟件系統(tǒng)。
??對于設(shè)備的運維管理,可充分參考電信等工程領(lǐng)域的運維管理標(biāo)準(zhǔn)和實踐,本文不再贅述。
??對于應(yīng)用軟件系統(tǒng)的運維管理,是一個新課題,面臨的主要問題有以下三點:
??1. 平安城市項目建設(shè)周期較長,持續(xù)采購的應(yīng)用軟件由不同廠家提供,差異性較大:不只在技術(shù)架構(gòu)上存在較大差異(如有的軟件是單體(monothetic)設(shè)計,有的軟件是面向服務(wù)的設(shè)計),對外提供的接口也具有較大差異(缺乏相應(yīng)的標(biāo)準(zhǔn)約束是主要原因)。
??2. 平安城市中的應(yīng)用軟件系統(tǒng)能夠提供用戶關(guān)注的價值(如數(shù)據(jù)采集、統(tǒng)計、分析等),這些價值需要在運維管理系統(tǒng)中體現(xiàn),提供更良好的用戶體驗。
??3. 避免“重復(fù)造輪子”,對于平安城市中的應(yīng)用軟件系統(tǒng)已經(jīng)提供的診斷測試、統(tǒng)計分析等功能,運維管理系統(tǒng)應(yīng)盡量引用這些功能,而不是重新開發(fā)。
??針對應(yīng)用軟件系統(tǒng)運維管理面臨的挑戰(zhàn),我們首先將應(yīng)用軟件系統(tǒng)做邏輯上的抽象:
??將應(yīng)用軟件系統(tǒng)抽象為軟件服務(wù)的容器,表示為S={e}:S表示為一個應(yīng)用軟件系統(tǒng), e表示軟件系統(tǒng)S能夠提供的軟件服務(wù)。
??將軟件服務(wù)e抽象定義為三元組,則e=(o,d,i) :其中o表示該軟件服務(wù)提供的操作;d表示該軟件服務(wù)提供的數(shù)據(jù);i表示該軟件服務(wù)提供的交互接口。
??經(jīng)過上述邏輯抽象,應(yīng)用軟件系統(tǒng)的運維管理轉(zhuǎn)換為運維管理系統(tǒng)對每個e的管理。
??根據(jù)圖2的功能范圍定義及平安城市建設(shè)中的實踐經(jīng)驗,我們將e歸納為以下幾類服務(wù):
??為便于描述,本文約定涉及的軟件系統(tǒng)均為B/S架構(gòu)。
??平安城市中存在著大量已服役多年的應(yīng)用軟件系統(tǒng),運維管理系統(tǒng)需要的軟件服務(wù)依賴于這些遺留的應(yīng)用軟件系統(tǒng)。很顯然,通過對遺留應(yīng)用軟件系統(tǒng)進行大幅改造來提供軟件服務(wù)的方法不可取。遵循軟件設(shè)計的“開-閉”原則,對于這些應(yīng)用軟件系統(tǒng),我們將系統(tǒng)可提供給運維管理系統(tǒng)的軟件服務(wù)進行抽取、包裝,增加Microgateway (微網(wǎng)關(guān))作為應(yīng)用軟件系統(tǒng)與運維管理系統(tǒng)之間的橋梁(有沒有一瞬間讓你想到電信網(wǎng)管的北向接口),為運維管理系統(tǒng)提供軟件服務(wù),平安城市運維管理的整體軟件架構(gòu)如圖4所示。
??圖4的架構(gòu)是一個典型的類微服務(wù)架構(gòu)(portal好比apigateway,運維管理系統(tǒng)和各應(yīng)用軟件系統(tǒng)好比各微服務(wù),其它一些部件(如服務(wù)注冊)被省略),根據(jù)圖4,我們梳理一下用戶的操作流程:
??1. 用戶通過平安城市的portal進入門戶頁面,向平安城市中的統(tǒng)一授權(quán)服務(wù)器(authorization server)使用SSO(單點)登錄進行身份驗證,并獲取訪問令牌(access token)。
??2. 用戶從門戶頁面跳轉(zhuǎn)到運維管理系統(tǒng),重定向請求中攜帶訪問令牌。
??3. 運維管理系統(tǒng)驗證訪問令牌確定用戶身份,返回操作頁面。
??4. 用戶在運維管理系統(tǒng)中消費目的應(yīng)用軟件系統(tǒng)軟件服務(wù)。操作請求中攜帶訪問令牌,被發(fā)送到目的應(yīng)用軟件系統(tǒng)對應(yīng)的Microgateway。
??5. Microgateway驗證訪問令牌確定用戶身份,根據(jù)請求選擇對應(yīng)的服務(wù)路由,調(diào)用目的應(yīng)用軟件系統(tǒng)的相應(yīng)服務(wù),并將調(diào)用結(jié)果返回給運維管理系統(tǒng)。
??系統(tǒng)安全是軟件設(shè)計中永恒的話題。在平安城市中,我們設(shè)計了統(tǒng)一的授權(quán)服務(wù)器,如果平安城市中已建設(shè)好PKI(Public Key Infrastructure),授權(quán)服務(wù)器應(yīng)充分利用已有的PKI,同時作為一個SSO服務(wù)器,支持OAuth3協(xié)議,用戶可從portal,運維管理系統(tǒng)和其它應(yīng)用軟件系統(tǒng)中任意一個系統(tǒng)登錄進行驗證,并獲取授權(quán)服務(wù)器頒布的訪問令牌,訪問令牌建議使用JWT(Java Web Token)格式,用于在系統(tǒng)的各個服務(wù)之間調(diào)用時驗證身份。
??如果JWT使用了簽名方式,如使用的是“RS256”這樣的PKI簽名方式,平安城市中的各個系統(tǒng)(服務(wù))需要向統(tǒng)一授權(quán)服務(wù)器申請用于驗證簽名的公鑰證書。
??需要注意的是,JWT是有期限的,對于JWT過期的情況,各系統(tǒng)(服務(wù))需要重新申請。
??對于系統(tǒng)資源的訪問控制,如果已有建設(shè)好的PMI(Privilege Management Infrastructure),應(yīng)優(yōu)先使用已有的PMI用于訪問控制,當(dāng)使用JWT表示身份驗證結(jié)果時,可在JWT的payload中攜帶PMI屬性證書中的部分內(nèi)容(如用戶所屬群組與所屬角色),這樣做法的好處是將待實施訪問控制系統(tǒng)去PMI平臺獲取用戶屬性證書的過程省略了,提升了效率,但如果系統(tǒng)中用戶的群組和角色變換頻繁,則不宜使用這種方式。如果沒有可用的PMI,各系統(tǒng)需要自建自身的訪問控制體系,對于攜帶訪問令牌的訪問請求,各系統(tǒng)可利用自身建設(shè)的訪問控制體系識別用戶身份進行訪問控制。
??從系統(tǒng)一致性的角度,我還是強烈建議在平安城市中建立統(tǒng)一的PKI/PMI體系,達到統(tǒng)一認(rèn)證、授權(quán)、鑒權(quán)的目標(biāo),提供完美的用戶體驗。
??Microgateway的定義了解一下,美國CA公司對于Microgateway的定義如下:
??CA Microgateway is a lightweight, containerized gateway, designed to scale within highly decentralized environments. It supports common microservices patterns by providing service-discovery, routing, rate-limiting and last-mile security, and is easily deployable and configurable by developers at design time using provided policy templates.
??由定義可以看到,Microgateway可視為一個局部gateway,用于解決“最后一公里”的問題。Microgateway又提供靈活可配置的模板供用戶在設(shè)計時使用,用戶可在運行時通過修改模板的配置數(shù)據(jù)使得Microgateway不需要修改代碼及重新編譯部署就能實現(xiàn)新的功能。
??平安城市中應(yīng)用軟件由不同廠家提供,應(yīng)用軟件的更新升級可能導(dǎo)致提供的接口也發(fā)生變化,如果運維管理系統(tǒng)針對每次應(yīng)用軟件的升級更新導(dǎo)致的接口變更都做修改的話,那么工作量是巨大的。Microgateway可以通過靈活可配的策略模板來將這種變化封裝在Microgateway內(nèi)。
??如針對應(yīng)用軟件系統(tǒng)的數(shù)據(jù)庫,Microgateway對運維管理系統(tǒng)提供Restful的查詢接口,查詢應(yīng)用軟件系統(tǒng)的數(shù)據(jù)庫對應(yīng)數(shù)據(jù)??稍贛icrogateway中編寫數(shù)據(jù)庫查詢模板,在模板配置文件中設(shè)置待查詢的數(shù)據(jù)庫表、字段以及Restful接口的URI以及返回數(shù)據(jù)格式。當(dāng)運維管理系統(tǒng)需要增加查詢接口時,只需要在模板配置文件中增加對應(yīng)條目即可;當(dāng)應(yīng)用系統(tǒng)的數(shù)據(jù)庫發(fā)生變化時(如表字段發(fā)生變化時),修改模板配置文件中對應(yīng)字段即可。模板配置文件使得運維管理系統(tǒng)不感知所管理應(yīng)用軟件系統(tǒng)的接口變化。
??針對應(yīng)用軟件系統(tǒng)的HTTP接口,Microgateway同樣可編寫路由模板,在模板配置文件中設(shè)置HTTP請求的路由規(guī)則,將來自運維管理系統(tǒng)的請求根據(jù)路由規(guī)則路由到應(yīng)用軟件系統(tǒng)提供的軟件服務(wù)(是不是有點像spring cloud的zuul)。
??需要注意的是,Microgateway并非silverbullet,Microgateway所實現(xiàn)的柔性擴展也是基于約束的,這個約束用于指導(dǎo)模板的設(shè)計。
??本節(jié)介紹一個示例DEMO,模擬演示第3節(jié)提到的運維管理架構(gòu)。該DEMO的代碼存放位置為:https://github.com/solarkai/IomsSimu/ 。該示例中沒有涉及系統(tǒng)安全(以后考慮補上)。
??此DEMO中,分別模擬了一個運維管理系統(tǒng)、一個交通管控平臺中的報表服務(wù)和一個針對該報表服務(wù)的Microgateway。
??模擬交通管控平臺中的報表服務(wù)使用spring-boot框架編寫,提供了一個Restful接口提供簡單的報表數(shù)據(jù)(數(shù)據(jù)格式為JSON格式)。
??報表服務(wù)的Microgateway使用Node.js和Express框架編寫,使用“http-proxy-middleware”中間件定義了一個HTTP路由模板,處理來自運維管理系統(tǒng)的操作請求。路由模板的配置文件由gateway.json文件定義,內(nèi)容示例如下:
{
"gatewayList": [
{
"path": "/chart1",
"method": "get",
"proxy": {
"target": "http://127.0.0.1:8082",
"pathRewrite": {
"^/reports/chart1": "/loadChart1"
}
}
}
]
}
??Microgateway提供一個報表展示頁面,數(shù)據(jù)來自于模擬交通管控平臺中的報表服務(wù)。圖5是報表展示頁面。
??模擬運維管理系統(tǒng)使用Node.js和Express框架編寫,該運維管理模塊的模擬運維管理系統(tǒng)的應(yīng)用軟件系統(tǒng)管理界面是長這樣的。
??在模擬運維管理系統(tǒng),可配置Microgateway提供的軟件服務(wù)信息,并消費這些軟件服務(wù)。圖7顯示了對Microgateway提供的報表服務(wù)的消費。
??平安城市系統(tǒng)具有多樣性和復(fù)雜性,對運維管理提出了極高要求。本文針對平安城市系統(tǒng)的特點,針對平安城市中應(yīng)用軟件系統(tǒng)的運維管理設(shè)計了平安城市的運維管理軟件架構(gòu),并給出示例DEMO。該軟件架構(gòu)強調(diào)了Microgateway的作用,以實現(xiàn)運維管理的柔性擴展。