• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    大型電網(wǎng)企業(yè)應(yīng)用系統(tǒng)服務(wù)化改造方法研究

    2018-01-06 05:03:16蒙亮胡俊楊
    中國管理信息化 2018年21期

    蒙亮 胡俊楊

    [摘? ? 要] 十三五期間,隨著電網(wǎng)信息化支撐業(yè)務(wù)領(lǐng)域的廣度和深度不斷增強(qiáng),傳統(tǒng)IT架構(gòu)如何適應(yīng)“互聯(lián)網(wǎng)+電網(wǎng)”形勢下的戰(zhàn)略轉(zhuǎn)型,成為電網(wǎng)信息化管理過程中的迫切需求和需要思考的問題。本文基于許多大型電網(wǎng)企業(yè)多年來的架構(gòu)應(yīng)用實踐,詳細(xì)闡述了如何以領(lǐng)域驅(qū)動設(shè)計(簡稱:DDD)為指導(dǎo)思想,對復(fù)雜的應(yīng)用系統(tǒng)進(jìn)行服務(wù)拆分。

    [關(guān)鍵詞] IT架構(gòu);領(lǐng)域驅(qū)動;服務(wù)拆分

    doi : 10 . 3969 / j . issn . 1673 - 0194 . 2018. 21. 033

    [中圖分類號] F270.7;TP393.09? ? [文獻(xiàn)標(biāo)識碼]? A? ? ? [文章編號]? 1673 - 0194(2018)21- 0085- 03

    1? ? ? 前? ? 言

    1.1? ?背景與意義

    隨著網(wǎng)絡(luò)安全法的發(fā)布實施、大數(shù)據(jù)、云計算、移動互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、人工智能等新技術(shù)發(fā)展日新月異,供給側(cè)結(jié)構(gòu)性改革、電力體制改革、國資國企改革、“一帶一路”、“互聯(lián)網(wǎng)+”等新政策的不斷推進(jìn),許多電網(wǎng)企業(yè)的發(fā)展處于重要戰(zhàn)略機(jī)遇期、轉(zhuǎn)型升級期、改革深化期。內(nèi)外部環(huán)境的深刻變化,直接對電網(wǎng)企業(yè)信息化建設(shè)提出了新要求。大多數(shù)電網(wǎng)企業(yè)需要信息化手段來支撐主營業(yè)務(wù)的深化改革及競爭型業(yè)務(wù)的創(chuàng)新發(fā)展。

    IT架構(gòu)升級是大型電網(wǎng)企業(yè)推進(jìn)信息化建設(shè)過程中必不可少的環(huán)節(jié)之一,它除了需要充分考慮業(yè)務(wù)轉(zhuǎn)型與新技術(shù)應(yīng)用的發(fā)展外,還涉及基礎(chǔ)設(shè)施、運行時環(huán)境、服務(wù)框架、數(shù)據(jù)訪問框架、工作流程、工作臺和云管理等基礎(chǔ)性軟硬件平臺和關(guān)鍵技術(shù)的整合應(yīng)用。關(guān)于服務(wù)如何抽象,應(yīng)用系統(tǒng)架構(gòu)如何進(jìn)行應(yīng)用化改造,是IT架構(gòu)升級過程中的關(guān)鍵問題。

    1.2? ?主要工作

    本文針對IT服務(wù)架構(gòu)中最為關(guān)鍵的服務(wù)抽象設(shè)計,引入領(lǐng)域驅(qū)動設(shè)計技術(shù),實現(xiàn)服務(wù)和組件的拆分。主要的研究內(nèi)容包含以下幾個方面。

    (1)戰(zhàn)略設(shè)計模式理論包括:識別領(lǐng)域、劃分子域、尋找核心域、支撐域和通用域、劃定限界上下文和建立上下文映射圖。戰(zhàn)略設(shè)計模式是系統(tǒng)的業(yè)務(wù)框架設(shè)計,保證了領(lǐng)域模型的完整性。

    (2)戰(zhàn)術(shù)設(shè)計模式理論主要包括:實體、值對象、聚合、識別領(lǐng)域事件等。戰(zhàn)術(shù)模式解決了領(lǐng)域的最小業(yè)務(wù)單元高內(nèi)聚[1]。

    2? ? ? 技術(shù)發(fā)展分析

    自Eric Evans提出新的軟件開發(fā)方法DDD后,在國內(nèi)外出現(xiàn)許多DDD理論的研究者和實踐者。

    國外有許多專家對DDD的發(fā)展做出了卓越貢獻(xiàn),例如Greg Young對Betrand Meyer的CQS模式進(jìn)行改造,提出CQRS模式,Vaughn Verno完善了DDD思想,正式提出了領(lǐng)域事件模式以及六邊形架構(gòu)風(fēng)格實現(xiàn)DDD。

    隨著國內(nèi)的互聯(lián)網(wǎng)公司逐漸深入實體經(jīng)濟(jì),業(yè)務(wù)日益復(fù)雜,領(lǐng)域模型在一個復(fù)雜的體系里變得尤為重要。國內(nèi)的盒馬鮮生已經(jīng)成功將DDD運用到實際的開發(fā)中,在互聯(lián)網(wǎng)架構(gòu)下完整實施具有阿里特點的領(lǐng)域驅(qū)動設(shè)計模式。目前已經(jīng)有許多開發(fā)人員嘗試著將DDD應(yīng)用到銀行、航空、物流及信息系統(tǒng)等項目中,隨著云計算、微服務(wù)框架等新技術(shù)發(fā)展完善,DDD將有更多的應(yīng)用場景。

    3? ? ? 必要性分析

    “十二五”期間,許多電網(wǎng)企業(yè)信息化處于大建設(shè)期,與應(yīng)用系統(tǒng)的大規(guī)模建設(shè)的現(xiàn)實相適應(yīng),電網(wǎng)企業(yè)選擇成熟穩(wěn)定、為人熟知、IDE友好、便于共享、易于開發(fā)、部署和測試的單塊架構(gòu),采用傳統(tǒng)軟件開發(fā)方法開展企業(yè)級應(yīng)用建設(shè);上述模式在大建設(shè)期充分發(fā)揮了其自身特點,促進(jìn)了電網(wǎng)企業(yè)應(yīng)用建設(shè)的迅速開展。

    隨著業(yè)務(wù)的不斷擴(kuò)大,需求功能的持續(xù)增加,單塊架構(gòu)已經(jīng)很難滿足業(yè)務(wù)快速變化的需要。一方面,代碼的可維護(hù)性、擴(kuò)展性、靈活性在降低;而另一方面,系統(tǒng)的測試成本、構(gòu)建成本以及維護(hù)成本卻在顯著增加。因此,隨著項目或者產(chǎn)品規(guī)模的不斷擴(kuò)大,單塊架構(gòu)應(yīng)用的改造與重構(gòu)勢在必行。

    4? ? ? 規(guī)劃方案

    垂直拆分:依據(jù)領(lǐng)域驅(qū)動理念,收集資料,了解系統(tǒng)背景,識別領(lǐng)域通用語言。識別領(lǐng)域,劃分子域,尋找核心域、支撐域和通用域,圍繞這些子域劃定限界上下文,建立上下文映射圖。以戰(zhàn)略模型為基石,進(jìn)行戰(zhàn)術(shù)建模:識別實體、值對象,劃分聚合,識別領(lǐng)域事件。戰(zhàn)術(shù)的成果幫助概念分離,分析設(shè)計原因和領(lǐng)域特征,厘清模型內(nèi)對象的關(guān)系、各種業(yè)務(wù)規(guī)則、數(shù)據(jù)一致性的設(shè)計以及測試用例的設(shè)計。

    領(lǐng)域服務(wù)、倉儲和工廠的設(shè)計,幫助分離服務(wù)。以“低內(nèi)聚,高耦合”為原則,建立服務(wù)與服務(wù)之間的關(guān)系,實現(xiàn)事務(wù)的一致性。聚合內(nèi)的服務(wù)要求事務(wù)高度一致,關(guān)鍵聚合根的扭轉(zhuǎn)實現(xiàn)了動態(tài)模型的設(shè)計。設(shè)計是否符合需求的場景要求,通過場景走查檢驗一切的設(shè)計符合度和用戶體驗度。

    其總體設(shè)計如下圖所示:

    4.1? ?資料收集

    明確背景和定位,收集業(yè)務(wù)需求描述,繪制用例及核心業(yè)務(wù)流程圖。

    4.2? ?識別通用語言

    領(lǐng)域驅(qū)動設(shè)計的一個核心的原則是使用一種基于模型的語言。使用模型作為語言的核心骨架,要求團(tuán)隊在進(jìn)行所有的交流中都使用一致的語言,在代碼中也是這樣。在共享知識和推敲模型時,團(tuán)隊會使用演講、文字和圖形。這兒需要確保團(tuán)隊使用的語言在所有的交流形式中看上去都是一致的,這種語言被稱為“通用語言”。

    4.3? ?戰(zhàn)略建模

    戰(zhàn)略建模是從宏觀的角度來劃分和集成限界上下文,它包括領(lǐng)域識別,子域及限界上下文劃分(分析出子域、核心域、支撐域)、上下文映射圖。

    4.3.1? ?識別領(lǐng)域

    一個領(lǐng)域本質(zhì)上就是一個問題域,只要是同一個領(lǐng)域,那問題域就相同。只有確定系統(tǒng)所屬的領(lǐng)域,才能進(jìn)而了解系統(tǒng)的核心業(yè)務(wù),即要解決的關(guān)鍵問題、問題的范圍邊界。

    一個領(lǐng)域內(nèi)可以包含1個或者多個子域。子域又分核心域、支撐子域、通用子域。按照實際功能將這些交織的模型劃分成邏輯上相互分離的子域,從而在一定程度上減少系統(tǒng)的復(fù)雜性。

    4.3.2? ?劃分子域

    一個領(lǐng)域內(nèi)可以包含1個或者多個子域。理論上一個子域?qū)?yīng)一個限界上下文是最優(yōu)也是最理想的情況,但是有時又要考慮到業(yè)務(wù)關(guān)聯(lián)度需要做出權(quán)衡。子域又分核心域、支撐子域、通用子域。

    4.3.3? ?尋找核心域、支撐域和通用域

    所有子域按照子域類型的定義劃分成核心域、支撐域和通用域,具體的內(nèi)容如下:

    核心域:它是整個業(yè)務(wù)領(lǐng)域的一部分,也是業(yè)務(wù)成果的主要促成因素。在實施DDD時,主要關(guān)注的核心。

    支撐域:對應(yīng)著業(yè)務(wù)的某些重要方面,但卻不是核心,那么他便是一個支撐子域。

    通用域:如果一個子域被用于整個業(yè)務(wù)系統(tǒng),那么這個子域便是通用子域。

    4.3.4? ?劃定限界上下文

    限界上下文是一個由顯式邊界限定的特定職責(zé)。領(lǐng)域模型存在于邊界之內(nèi)。在邊界內(nèi),每一個模型概念,包括屬性和操作,都具有特殊的含義。

    一個業(yè)務(wù)領(lǐng)域包含多個限界上下文,與一個限界上下文溝通,需要通過顯式邊界進(jìn)行通信。系統(tǒng)通過確定的限界上下文解耦,每一個上下文內(nèi)部緊密組織,職責(zé)明確,具有較高的內(nèi)聚性。

    4.3.5? ?劃分聚合

    與值對象相反,聚合是實體的合并。聚合是一組相關(guān)對象的集合,我們把它作為數(shù)據(jù)修改的單元。一個聚合包括至少兩個實體與一個根, 根包含了聚合內(nèi)所有實體的引用,并作為聚合的代表供外界訪問,外界只能通過根來訪問聚合內(nèi)的實體,而聚合內(nèi)的實體之間可以隨意互相訪問。包含在聚合內(nèi)的實體構(gòu)成了一個整體,當(dāng)聚合消亡時,它們也將隨之消亡。聚合使得實體間的關(guān)系網(wǎng)大大簡化了,聯(lián)系緊密的實體可以被放入聚合內(nèi)部封裝起來,聚合之間的聯(lián)系則通過根變得清晰而有條理[2]。

    4.3.6? ?識別領(lǐng)域事件

    領(lǐng)域事件定義領(lǐng)域?qū)<宜P(guān)心的事件的對象。當(dāng)關(guān)心的狀態(tài)由于模型行為而發(fā)生改變時,系統(tǒng)將發(fā)布領(lǐng)域事件。

    4.3.7? ?模型詳細(xì)說明

    模型詳細(xì)說明主要描述了設(shè)計的原因、模型內(nèi)對象的關(guān)系、各種業(yè)務(wù)規(guī)則、數(shù)據(jù)一致性規(guī)則、測試用例等。

    (1)緩存存儲。緩存是領(lǐng)域?qū)ο笤趦?nèi)存中的生存場所,是一種面向業(yè)務(wù)的存儲方式,而同時我們的領(lǐng)域模型也是一種面向業(yè)務(wù)的模型,有了面向業(yè)務(wù)的存儲以后,我們就可以進(jìn)行面向業(yè)務(wù)的運算,而正是這種面向業(yè)務(wù)的運算使得我們的系統(tǒng)具有更好的伸縮性和擴(kuò)展性。因為此時的領(lǐng)域?qū)ο笸ㄟ^緩存都是跑在中間件中,而在負(fù)載增多的時候,通過水平的增加中間件服務(wù)器來進(jìn)行水平伸縮。

    (2)數(shù)據(jù)庫設(shè)計:①打破外鍵關(guān)系。讓一個服務(wù)的代碼通過另一個服務(wù)暴露的API來訪問數(shù)據(jù),而不是直接訪問數(shù)據(jù)庫。這個API調(diào)用會成為微服務(wù)化的第一步。這時候可能會有性能擔(dān)憂,可以做一個性能測試,如果這個“慢”在可接受的范圍內(nèi),就沒有問題。②共享靜態(tài)數(shù)據(jù)。把一些些共享的靜態(tài)數(shù)據(jù)放入代碼,比如放在屬性文件中,或者簡單地放在一個枚舉中。③共享數(shù)據(jù)。共享的可變數(shù)據(jù)對于分離系統(tǒng)來說通常是一個麻煩。領(lǐng)域概念不是在代碼中進(jìn)行建模,相反是在數(shù)據(jù)庫中隱式地進(jìn)行建模,這里缺失的領(lǐng)域概念是中間服務(wù)。④共享表。兩個業(yè)務(wù)共用一個表,但是每個業(yè)務(wù)的關(guān)注點不同,我們可以采取行動把它們存儲在不同的上下文中,從而分離出兩張表,分別在對應(yīng)的兩個服務(wù)中。各自依據(jù)各自的關(guān)注點來建表結(jié)構(gòu),進(jìn)行表建模。

    (3)事務(wù)邊界的處理。事務(wù)控制需要注意的事項:①在事務(wù)中,不要運行昂貴而不必要的、與事務(wù)無關(guān)的操作指令,如日志記錄,其磁盤讀寫代價高,非常消耗資源。②不要在瀏覽數(shù)據(jù)的時候打開事務(wù)(設(shè)置值@TransactionAttribute(NOT_SUPPORTED))。

    事務(wù)控制的邊界位于服務(wù)層。事務(wù)邊界的處理主要有以下幾種方式:

    ①再試一次。可以對某一個業(yè)務(wù)先做一次操作,操作終止后,再對另一個業(yè)務(wù)做另一次操作,這時可以把這部分操作放在一個隊列或者日志文件中,之后再嘗試對其進(jìn)行觸發(fā)。對于某些操作來說這是合理的,但要保證重試能夠修復(fù)這個問題。②終止整個操作。另一個選擇是拒絕整個操作。在這種情況下,需要把系統(tǒng)重置到某種一致的狀態(tài),要么重試補(bǔ)償事務(wù),要么使用一些后臺任務(wù)來清除這些不一致的狀態(tài)??梢越o后臺的維護(hù)人員提供一個界面來進(jìn)行該操作,或者將其自動化。③使用分布式事務(wù)。手動編配補(bǔ)償事務(wù)非常難以操作,一種替代方案是使用分布式事務(wù)。分布式事務(wù)會橫跨多個事務(wù),然后使用事務(wù)管理器的工具來統(tǒng)一編配其他底層系統(tǒng)中運行的事務(wù)。就像普通的事務(wù)一樣,一個分布式的事務(wù)會保證整個系統(tǒng)處于一致的狀態(tài)。唯一不同的是,這里的事務(wù)會運行在不同系統(tǒng)的不同進(jìn)程中,通常它們之間使用網(wǎng)絡(luò)進(jìn)行通信。

    (4)測試用例。微服務(wù)架構(gòu)中的測試類型主要包括:單元測試、接口測試、集成測試、組件測試和端到端測試。

    (5)模塊、倉儲、工廠、領(lǐng)域服務(wù)。①模塊:模塊為人們提供了兩種觀察模型的方式,一是可以在模塊中查看細(xì)節(jié),而不會被整個模型淹沒,二是觀察模塊之間的關(guān)系,而不考慮其內(nèi)部細(xì)節(jié)。模塊之間應(yīng)該是低耦合的,而在模塊內(nèi)部則是高內(nèi)聚的。模塊并不僅僅是代碼的劃分,而且也是概念的劃分。②倉儲:倉儲是一組負(fù)責(zé)領(lǐng)域?qū)ο蟮某志没姆?wù)。從架構(gòu)角度來看,倉儲用于連接領(lǐng)域?qū)雍突A(chǔ)結(jié)構(gòu)層,領(lǐng)域?qū)油ㄟ^倉儲訪問存儲機(jī)制,而不用過于關(guān)心存儲機(jī)制的具體細(xì)節(jié)。按照DDD設(shè)計原則,倉儲的作用對象的領(lǐng)域模型的聚合根,也就是說每一個聚合都有一個單獨的倉儲[3]。③工廠:工廠模式(Factory Pattern)是Java中最常用的設(shè)計模式之一,在DDD中也被廣泛使用,它是一種體現(xiàn)封裝思想的設(shè)計模式。工廠的作用是將創(chuàng)建對象的細(xì)節(jié)隱藏起來,當(dāng)創(chuàng)建一個對象時,如果創(chuàng)建工作很復(fù)雜,或者暴露了過多的內(nèi)部結(jié)構(gòu),則可以使用工廠進(jìn)行封裝。事實上除了通過工廠來創(chuàng)建對象,大部分情況下領(lǐng)域?qū)ο蟮膭?chuàng)建都不會太復(fù)雜,所以我們只需要簡單地使用構(gòu)造函數(shù)創(chuàng)建對象就可以了。④領(lǐng)域服務(wù):當(dāng)領(lǐng)域中的某個操作過程或轉(zhuǎn)換過程不是實體或值對象的職責(zé)時,便應(yīng)該將該操作放在一個單獨的接口中,即領(lǐng)域服務(wù)。如果勉強(qiáng)地把這些重要的領(lǐng)域功能歸為實體或值對象的職責(zé),那么不是歪曲了基于模型的對象的定義,就是人為地增加了一些無意義的對象。應(yīng)確保領(lǐng)域服務(wù)和通用語言是一致的,并且保證它是無狀態(tài)的[4]。

    (6)動態(tài)模型設(shè)計。動態(tài)模型設(shè)計包括業(yè)務(wù)流程設(shè)計、設(shè)計關(guān)鍵聚合根的狀態(tài)流轉(zhuǎn)圖。

    (7)場景走查。確定領(lǐng)域模型、領(lǐng)域服務(wù)、倉儲等完成系統(tǒng)用例以及關(guān)鍵業(yè)務(wù)流程,確認(rèn)領(lǐng)域模型是否能滿足領(lǐng)域中的業(yè)務(wù)場景和業(yè)務(wù)流程。

    最常用的就是通過序列圖來走查場景,對創(chuàng)建的領(lǐng)域模型進(jìn)行逐步驗證。

    (8)實現(xiàn)架構(gòu)設(shè)計。依據(jù)前面的所有分析和設(shè)計,最終實現(xiàn)架構(gòu)設(shè)計。部署打包方式為:Jenkins自動化打包,實現(xiàn)持續(xù)集成與發(fā)布。

    5? ? ? 結(jié)? ? 語

    電網(wǎng)企業(yè)業(yè)務(wù)復(fù)雜,應(yīng)用系統(tǒng)較多,本文提出的應(yīng)用系統(tǒng)服務(wù)化改造方法作為一種指導(dǎo)思想,可以有序推動大型電網(wǎng)企業(yè)的IT架構(gòu)升級,確保IT建設(shè)資產(chǎn)與實際業(yè)務(wù)的符合,有效支撐企業(yè)業(yè)務(wù)運轉(zhuǎn),完成從企業(yè)信息化到信息化企業(yè)的跨越,最終打造安全、可靠、綠色、高效的智能電網(wǎng)。

    主要參考文獻(xiàn)

    [1][美]Eric Evans.領(lǐng)域驅(qū)動設(shè)計: 軟件核心復(fù)雜性應(yīng)對之道[M].修訂版.趙俐,譯. 北京:人民郵電出版社,2016.

    [2][美]Vaughn Vernon.實現(xiàn)領(lǐng)域驅(qū)動設(shè)計[M]. 滕云,譯. 北京: 電子工業(yè)出版社,2014.

    [3]黃文光,金義富. 基于領(lǐng)域驅(qū)動設(shè)計構(gòu)建企業(yè)級Web平臺的應(yīng)用[J]. 實驗室研究與探索,2013,32(8):72-75.

    [4]王忠,程磊. 基于領(lǐng)域驅(qū)動設(shè)計的軟件開發(fā)[J]. 軟件導(dǎo)刊,2008, 7(2):37-39.

    阜宁县| 昌邑市| 武强县| 巴中市| 剑阁县| 特克斯县| 涟源市| 黑水县| 华池县| 河东区| 凉城县| 平顶山市| 梓潼县| 利川市| 珠海市| 崇阳县| 韶山市| 游戏| 连山| 高要市| 佛冈县| 中牟县| 平邑县| 丰镇市| 门源| 临颍县| 洪泽县| 泽库县| 惠州市| 西青区| 抚宁县| 宁明县| 孙吴县| 綦江县| 吉木乃县| 三穗县| 丰宁| 安达市| 四子王旗| 邢台市| 兰溪市|