中國(guó)石油西南油氣田西南油氣田通信與信息技術(shù)中心 四川 成都 610051
SOA基礎(chǔ)工作管理平臺(tái)是以SOA技術(shù)架構(gòu)為核心,通過(guò)數(shù)據(jù)服務(wù)總線 (DSB)整合集成所有數(shù)據(jù)源,形成覆蓋油氣田生產(chǎn)、經(jīng)營(yíng)、科研、辦公所有領(lǐng)域的數(shù)據(jù)全集;再通過(guò)企業(yè)服務(wù)總線 (ESB),開發(fā)和集成不同的業(yè)務(wù)應(yīng)用,從而滿足各類業(yè)務(wù)應(yīng)用??碧介_發(fā)夢(mèng)想云是中石油上游板塊構(gòu)建的信息化建設(shè)藍(lán)圖,旨在實(shí)現(xiàn)上游全業(yè)務(wù)鏈資源共享、數(shù)據(jù)互聯(lián)、技術(shù)互通、業(yè)務(wù)協(xié)同與智能化發(fā)展,構(gòu)建共建、共享、共贏的信息化新生態(tài)。西南油氣田目前已開展基于夢(mèng)想云的區(qū)域數(shù)據(jù)湖建設(shè),SOA和夢(mèng)想云的融合勢(shì)在必行[1]。
SOA即面向服務(wù)的架構(gòu)(Service Oriented Architecture),它是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(即服務(wù))進(jìn)行拆分,并通過(guò)服務(wù)之間定義的接口和契約聯(lián)系起來(lái)。SOA是一種粗粒度、松耦合服務(wù)架構(gòu),服務(wù)之間通過(guò)簡(jiǎn)單、精確定義接口進(jìn)行通訊,不涉及底層編程接口和通訊模型。SOA可以看作是B/S模型、XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)的子集/Web Service技術(shù)之后的自然延伸。
西南油氣田平臺(tái)建設(shè)以IBM企業(yè)信息門戶、數(shù)據(jù)服務(wù)總線、企業(yè)服務(wù)總線、消息中間件、流程管理工具5個(gè)SOA套件為核心,擴(kuò)展了統(tǒng)一權(quán)限管理和服務(wù)管控功能,建立了主元數(shù)據(jù)管理系統(tǒng),從而有力支撐了公司數(shù)字氣田建設(shè)的數(shù)據(jù)整合與應(yīng)用集成。
夢(mèng)想云采用微服務(wù)架構(gòu)。微服務(wù)架構(gòu)是最佳幾年剛剛興起并逐漸成熟的一項(xiàng)在云環(huán)境中部署應(yīng)用和服務(wù)的新技術(shù)。
企業(yè)和服務(wù)提供商都在尋找更好的方法將應(yīng)用程序部署在云環(huán)境中,微服務(wù)被認(rèn)為是未來(lái)的發(fā)展方向。通過(guò)將應(yīng)用和服務(wù)分解成更小的、松散耦合的組件,使其可以更容易升級(jí)和擴(kuò)展。
不對(duì)原有SOA系統(tǒng)的進(jìn)行改造,只進(jìn)行部署升級(jí)和服務(wù)接入,以虛擬機(jī)的方式把SOA系統(tǒng)部署到云環(huán)境中,并把SOA的ESB上的服務(wù)接入夢(mèng)想云API網(wǎng)管,完成用戶對(duì)接。
(1)遷移到微服務(wù)架構(gòu)。SOA應(yīng)用遷移到微服務(wù)架構(gòu)的過(guò)程。夢(mèng)想云已經(jīng)定義了一整套基于Spring Cloud的微服務(wù)框架,這一步遷移的工作就是如何將微服務(wù)框架應(yīng)用到現(xiàn)有系統(tǒng)上。
(2)確定整體架構(gòu)。在開始之前,需要確定未來(lái)的應(yīng)用整體架構(gòu)。
應(yīng)用層如果是基于Java語(yǔ)言,并使用Spring進(jìn)行開發(fā)的,那么,使用Spring Cloud微服務(wù)框架是首選,常用的組件都已經(jīng)包含。
后端的服務(wù),盡量選用已經(jīng)在平臺(tái)發(fā)布的各種組件,或者對(duì)云平臺(tái)友好的組件。如PostgreSQL,MySQL,Redis,RabbitMQ,ZooKeeper,Kafka,ELK,Pinpoint。
如果是基于.net框架的,暫時(shí)未定。
(3)前后端分離。是基本的要求,前端僅負(fù)責(zé)展示,輸入校驗(yàn)和頁(yè)面的控制,不建議包含業(yè)務(wù)邏輯功能。后端通過(guò)Restful API暴露給前端,依據(jù)定好的開發(fā)接口規(guī)范,前端和后端的變化被隔離。
我們不對(duì)前端的框架做限定,只是假設(shè)已經(jīng)使用了比較成熟的組件/框架,有成熟的調(diào)用后端restful API的各種API。如果條件不具備,最好將前端也遷移到成熟的框架,目前而言,我們推薦Angular,Vue.js。
前后端分離之后,前端可單獨(dú)部署在API網(wǎng)關(guān)外,也可部署在API網(wǎng)關(guān)內(nèi),同時(shí)在水平伸縮上也具備了足夠的靈活性。此外,前端的訪問(wèn)壓力通常都比較小,可以完全不受后端部署架構(gòu)的影響。
(4)后端組件。后端組件包括持久化,緩存,消息隊(duì)列,日志。這些組件在平臺(tái)已經(jīng)有現(xiàn)成的鏡像,可直接部署使用,具體請(qǐng)參考《瑞道平臺(tái)使用手冊(cè)》。
(5)業(yè)務(wù)分拆。應(yīng)用的業(yè)務(wù)分拆可遵循DDD方法論,通過(guò)領(lǐng)域建模的方式確立服務(wù)地圖,服務(wù)地圖就是最終我們需要建立的業(yè)務(wù)相關(guān)的微服務(wù)集合。
為了避免不必要的復(fù)雜度,我們推薦逐步分拆,先分拆一個(gè)微服務(wù)作為嘗試,然后再陸續(xù)分拆出其他的微服務(wù)。
(6)應(yīng)用遷移。我們假設(shè)應(yīng)用至少是分層設(shè)計(jì),Controller,Service,DAO三層,各司其職。這時(shí),整個(gè)應(yīng)用還是單體風(fēng)格,應(yīng)用遷移主要有五個(gè)步驟:框架準(zhǔn)備、統(tǒng)一認(rèn)證授權(quán)、對(duì)外部系統(tǒng)提供接口、微服務(wù)間交互和調(diào)用API。
SOA架構(gòu)和夢(mèng)想云微服務(wù)雖然在系統(tǒng)顆粒度、集成方式等方面存在一定的差別,但是通過(guò)虛擬化和完全云化的方式,可實(shí)現(xiàn)基于SOA開發(fā)的系統(tǒng)上夢(mèng)想云平臺(tái),并且通過(guò)對(duì)云化步驟的分解以及打分,可以對(duì)不同系統(tǒng)的上云難度進(jìn)行量化評(píng)估,對(duì)西南油氣田的系統(tǒng)云化工作具有重大的指導(dǎo)意義。