亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        一種組合優(yōu)化模型驅(qū)動的微服務(wù)拆分方法

        2023-12-13 01:39:16劉若宇劉曉燕
        小型微型計算機(jī)系統(tǒng) 2023年12期
        關(guān)鍵詞:服務(wù)模型

        劉若宇,劉曉燕

        (昆明理工大學(xué) 信息工程與自動化學(xué)院,昆明 650500)

        1 引 言

        隨著移動互聯(lián)網(wǎng)的發(fā)展,人們對軟件的需求和訪問量都在不斷增加,由于傳統(tǒng)的單體架構(gòu)應(yīng)用是將所有的功能模塊集中在一起部署運(yùn)行,因此其在軟件擴(kuò)展和維護(hù)時面臨著很多難以解決的問題,為此越來越多的軟件從業(yè)者選擇用微服務(wù)架構(gòu)這一新型的軟件開發(fā)技術(shù)來替代原有的單體架構(gòu).

        微服務(wù)是一種面向服務(wù)的分布式軟件開發(fā)架構(gòu),它提倡將單一應(yīng)用程序分解為若干松散耦合的微型服務(wù),每個服務(wù)可以獨(dú)立的部署運(yùn)行,服務(wù)之間通過輕量級的通信機(jī)制相互協(xié)調(diào)調(diào)用[1],因此相比于單體架構(gòu),微服務(wù)架構(gòu)在可擴(kuò)展性和可維護(hù)性等方面有著天然的優(yōu)勢.然而在企業(yè)實踐中,單體架構(gòu)向微服務(wù)架構(gòu)的遷移過程卻存在著諸多問題,其中最大的一個問題是微服務(wù)的拆分太過依賴于工程師的主觀經(jīng)驗,由此產(chǎn)生的拆分結(jié)果可靠性不高,耗時巨大,而且現(xiàn)下很多遺留的單體系統(tǒng)都存在著文檔不全的問題,因此更加大了人工拆分的難度.

        為了解決人工拆分所帶來的各種問題,近年來國內(nèi)外學(xué)者對此進(jìn)行了大量的研究,提出了多種不同的微服務(wù)拆分方法,其主要可以歸納為以下4類:

        1)基于靜態(tài)代碼分析:通過對目標(biāo)程序源代碼的靜態(tài)結(jié)構(gòu)進(jìn)行分析,得到微服務(wù)拆分方案.例如Escobar等人[2]通過對代碼的語法生成樹以及語義標(biāo)識符進(jìn)行分析,再通過聚類操作完成微服務(wù)的拆分;Desai等人[3]使用程序的靜態(tài)分析工具生成類之間的調(diào)用圖,再通過圖卷積神經(jīng)網(wǎng)絡(luò)得到微服務(wù)拆分方案.這類方法的不足之處是忽略了用戶動態(tài)使用目標(biāo)程序時的習(xí)慣偏好,程序的動態(tài)特征比如條件判斷、多態(tài)等影響模塊耦合的因素沒有進(jìn)行分析.

        2)基于元數(shù)據(jù)分析:通過對系統(tǒng)開發(fā)階段的各種文檔比如UML圖、接口文檔、測試用例以及版本迭代歷史等內(nèi)容進(jìn)行分析完成微服務(wù)拆分.例如Baresi等人[4]通過分析系統(tǒng)接口的語義相似度實現(xiàn)微服務(wù)的拆分;Mazlami等人[5]依據(jù)程序代碼的修改歷史提出了一種耦合策略進(jìn)行微服務(wù)的拆分.這類方法要求系統(tǒng)具有完整的開發(fā)文檔,對于一些存在文檔丟失問題的遺留系統(tǒng)有一定的局限性.

        3)基于工作流數(shù)據(jù)分析:通過分析程序動態(tài)運(yùn)行時的數(shù)據(jù)流向得到微服務(wù)拆分方案.例如丁丹等人[6]以業(yè)務(wù)場景為依據(jù),實現(xiàn)對數(shù)據(jù)庫的劃分,進(jìn)而自底向上完成微服務(wù)的拆分;李杉杉等人[7]提出了一種高效的數(shù)據(jù)流信息自動化收集方案,并通過聚類算法實現(xiàn)了微服務(wù)的拆分.這類方法的缺點(diǎn)是可能存在代碼覆蓋率不夠的問題,從而導(dǎo)致相關(guān)數(shù)據(jù)的獲取出現(xiàn)偏差.

        4)基于工作負(fù)載分析:通過對程序運(yùn)行時的環(huán)境以及相關(guān)資源的消耗情況進(jìn)行分析完成微服務(wù)拆分.例如Klock等人[8]提出了一種基于工作負(fù)載的特征聚類拆分微服務(wù)的方法;Abdullah等人[9]使用無監(jiān)督的機(jī)器學(xué)習(xí)方法將具有相似性能的類劃分進(jìn)同一個微服務(wù)里.這類方法的缺點(diǎn)是只將系統(tǒng)工作負(fù)載的相似度作為拆分微服務(wù)的度量標(biāo)準(zhǔn),而沒有考慮到實際業(yè)務(wù)的相關(guān)性.

        針對已有研究中的一些不足,本文提出了一種組合優(yōu)化模型驅(qū)動的微服務(wù)拆分方法,該方法將微服務(wù)拆分問題建模為一種組合優(yōu)化問題,通過對程序進(jìn)行靜態(tài)分析和動態(tài)執(zhí)行分別得到類之間的耦合度以及業(yè)務(wù)相關(guān)度,然后依據(jù)微服務(wù)的高內(nèi)聚低耦合原則和業(yè)務(wù)一致性原則提出需要優(yōu)化的目標(biāo)函數(shù),最后使用改進(jìn)后的人工魚群算法找到使目標(biāo)函數(shù)取最優(yōu)值時的微服務(wù)拆分方案.實驗表明該方法能有效改善已有研究中單一分析方法所帶來的不足,具有更好的拆分效果.

        2 微服務(wù)拆分的組合優(yōu)化模型

        2.1 組合優(yōu)化問題

        組合優(yōu)化問題是最優(yōu)化問題的一種,其目的是從一組離散的對象集合中找到“最優(yōu)”的一個對象,而“最優(yōu)”的評估標(biāo)準(zhǔn)往往是依據(jù)該對象集合所對應(yīng)的一個目標(biāo)函數(shù),使得該目標(biāo)函數(shù)取得最大值或最小值的對象就是要找的“最優(yōu)”對象,即該組合優(yōu)化問題的最優(yōu)解.通??擅枋鰹?令Ω={s1,s2,…,sn}為所有離散的對象構(gòu)成的解空間,F(si)為對象si對應(yīng)的目標(biāo)函數(shù)值,要求尋找最優(yōu)解s*,使得對于所有的si∈Ω,有F(s*)=maxF(si).

        2.2 構(gòu)建模型

        在微服務(wù)的拆分過程中,假設(shè)原有的單體架構(gòu)應(yīng)用存在k個類,最終拆分后的微服務(wù)數(shù)量為s,為了將微服務(wù)的拆分問題建模為組合優(yōu)化問題,本文將微服務(wù)的拆分模擬成一種隨機(jī)的過程,則k個類會被隨機(jī)分配進(jìn)s個微服務(wù)里,最終的拆分結(jié)果可以表示為M={m1,m2,…,ms},其中m1,m2,…,ms分別為每一個拆分后的微服務(wù).基于以上分析,k個類就會產(chǎn)生n種不同的拆分結(jié)果Φ={M1,M2,…Mn},其中n是第2類Stirling數(shù)[10],表示將k個不同的元素拆分成s個集合的方案數(shù),則Φ就是所要構(gòu)建的組合優(yōu)化模型中的解空間.

        為了找出解空間中的最優(yōu)解,即最佳的微服務(wù)拆分結(jié)果,還需要構(gòu)建一個目標(biāo)函數(shù),并且該目標(biāo)函數(shù)能夠真實地反映出微服務(wù)拆分結(jié)果的優(yōu)劣.根據(jù)學(xué)術(shù)研究和企業(yè)實踐的相關(guān)經(jīng)驗,一個好的微服務(wù)設(shè)計通常都符合以下兩個原則[1]:

        1)高內(nèi)聚低耦合原則:同一個微服務(wù)內(nèi)部類的耦合度高于不同微服務(wù)之間類的耦合度.

        2)業(yè)務(wù)一致性原則:同一個微服務(wù)內(nèi)部類的業(yè)務(wù)相關(guān)度高于不同微服務(wù)之間類的業(yè)務(wù)相關(guān)度.

        因此,本文對目標(biāo)函數(shù)的構(gòu)建主要由兩部分組成,其中第1部分基于對源程序的靜態(tài)分析,提出了一種計算類的耦合度的方法,用以評估微服務(wù)拆分結(jié)果是否符合高內(nèi)聚低耦合原則;第2部分基于對系統(tǒng)的動態(tài)執(zhí)行,提出了一種計算類的業(yè)務(wù)相關(guān)度的方法,用以評估微服務(wù)拆分結(jié)果是否符合業(yè)務(wù)一致性原則,最后將這兩部分相結(jié)合得到最終的目標(biāo)函數(shù).

        2.2.1 類的耦合度

        根據(jù)代碼的靜態(tài)語義和語法分析,類與類之間的耦合關(guān)系大致可以分為以下3類:

        1)繼承關(guān)系:子類a繼承父類b的全部功能,并可以增加新的功能.在代碼語法中通常用extends等關(guān)鍵字來表示.繼承關(guān)系是一種強(qiáng)耦合關(guān)系,如果父類的功能發(fā)生變化,必然會影響子類的功能.

        2)關(guān)聯(lián)關(guān)系:類a包含了類b的一個實例.在代碼語法中通常表現(xiàn)為類b作為類a的一個屬性存在.關(guān)聯(lián)關(guān)系是一種固定的、長期的關(guān)系,但因為其涉及的兩個類是一種并列關(guān)系,因此其所表示的耦合關(guān)系要弱于繼承關(guān)系.

        3)依賴關(guān)系:類a負(fù)責(zé)構(gòu)造類b的一個實例,或使用了類b的一個服務(wù).在代碼語法中通常表現(xiàn)為類b作為類a方法中的一個參數(shù)、變量或返回值存在.依賴關(guān)系是一種臨時的、偶然的關(guān)系,其所表示的耦合關(guān)系要弱于關(guān)聯(lián)關(guān)系.

        用靜態(tài)代碼分析工具檢查源程序中的類之間是否存在上述3種耦合關(guān)系,生成圖1所示的類耦合關(guān)系圖,再對這3種關(guān)系分別賦予不同的權(quán)值,得到兩個類的耦合度計算公式如式(1)所示:

        圖1 類耦合關(guān)系圖Fig.1 Class coupling diagram

        C=α1·Gen+α2·Ass+
        α3·Dep

        (1)

        其中,C表示類a對類b的耦合度,其值越大則類a對類b的耦合度越高.Gen、Ass、Dep分別表示類a對類b是否存在繼承、關(guān)聯(lián)、依賴關(guān)系,若存在則其值為1,否則為0,特別要注意的是,這里類a與類b的耦合關(guān)系是一種單向關(guān)系,而非雙向.相關(guān)的權(quán)值為α1=0.6,α2=0.3,α3=0.1.

        根據(jù)式(1)依次求出源程序中每兩個類之間的耦合度并將其用一個k×k的矩陣C表示,其中C[a][b]=C,k為源程序中類的數(shù)量.則拆分后的微服務(wù)的耦合度可以表示為式(2)所示:

        (2)

        2.2.2 類的業(yè)務(wù)相關(guān)度

        在一個應(yīng)用系統(tǒng)的執(zhí)行過程中,若兩個類共同完成某一項業(yè)務(wù)功能的頻率越高,則表示這兩個類的業(yè)務(wù)相關(guān)度越大.為此,本文通過測試用例對系統(tǒng)進(jìn)行動態(tài)執(zhí)行,然后監(jiān)控出類與業(yè)務(wù)功能之間的對應(yīng)關(guān)系.

        1)測試用例

        測試用例的選取往往要求相關(guān)人員對應(yīng)用系統(tǒng)的業(yè)務(wù)功能非常熟悉,而且人為的選擇會存在一定的主觀性和不確定性,為了避免這些人為因素的影響,本文選擇使用系統(tǒng)中所有的用戶接口作為測試用例.用戶接口是用戶與系統(tǒng)進(jìn)行直接交互的最小單元,它覆蓋了用戶可以使用的所有業(yè)務(wù)功能,同時用戶接口的獲取可以直接通過工具自動地完成,而不用依賴說明文檔或是人的主觀經(jīng)驗,這樣既可以提高效率、減小人為因素帶來的不確定性,同時也提高了測試用例的業(yè)務(wù)覆蓋度.

        2)類與業(yè)務(wù)功能的關(guān)系圖

        通過程序動態(tài)監(jiān)測工具追蹤系統(tǒng)對測試用例的執(zhí)行過程,分析執(zhí)行某一業(yè)務(wù)功能時使用到的類的情況,得到圖2所示的類與業(yè)務(wù)功能的關(guān)系圖,其中每一個業(yè)務(wù)功能對應(yīng)一個或多個類,每一個類同時對應(yīng)一個或多個業(yè)務(wù)功能.

        圖2 類與業(yè)務(wù)功能的關(guān)系圖Fig.2 Diagram of classes and business functions

        3)業(yè)務(wù)相關(guān)度

        定義Uc為類c對應(yīng)的業(yè)務(wù)功能的集合,|Uc|為該集合中業(yè)務(wù)功能的數(shù)量,則任意兩個類a和b的業(yè)務(wù)相關(guān)度B(a,b)等于a、b共同完成某一業(yè)務(wù)功能的數(shù)量與它們完成的所有業(yè)務(wù)功能數(shù)量之比,如式(3)所示:

        (3)

        根據(jù)式(3)依次求出系統(tǒng)中每兩個類的業(yè)務(wù)相關(guān)度并將其用一個k×k的矩陣B表示,其中B[a][b]=B(a,b),k為類的數(shù)量.則拆分后的微服務(wù)的業(yè)務(wù)相關(guān)度可以表示為式(4)所示:

        (4)

        2.2.3 目標(biāo)函數(shù)

        得到微服務(wù)的耦合度CM和業(yè)務(wù)相關(guān)度BM后,要構(gòu)建的組合優(yōu)化模型的目標(biāo)函數(shù)就等于這兩者之和,如式(5)所示:

        f(M)=CM+BM

        (5)

        其中CM和BM分別用來衡量該微服務(wù)拆分結(jié)果M的高內(nèi)聚低耦合性和業(yè)務(wù)一致性,f(M)越大,則M越符合微服務(wù)設(shè)計的高內(nèi)聚低耦合原則和業(yè)務(wù)一致性原則,因此其表示的微服務(wù)拆分效果越好.

        生成最終的目標(biāo)函數(shù)之后,微服務(wù)拆分問題的組合優(yōu)化模型就可以描述為:

        在微服務(wù)拆分的所有可行解空間Φ={M1,M2,…Mn}中尋找最優(yōu)解M*使得對于所有的Mi∈Φ有f(M*)=maxf(Mi),則M*就是微服務(wù)拆分的最優(yōu)結(jié)果.

        3 人工魚群算法的應(yīng)用

        求解組合優(yōu)化問題的算法有很多種,經(jīng)過分析比較發(fā)現(xiàn),相比于其他算法,人工魚群算法中的人工魚模型更易于表示出微服務(wù)拆分的結(jié)果,并且由于其對初值不敏感的特性,使得在初始時隨機(jī)生成微服務(wù)拆分結(jié)果對算法性能不會產(chǎn)生影響,最后該算法具有更好的尋優(yōu)速度及全局尋優(yōu)能力,因此本文選擇了人工魚群算法用于求出文章第2節(jié)所提出的目標(biāo)函數(shù)的最優(yōu)解,進(jìn)而得到最佳的微服務(wù)拆分方案.

        3.1 人工魚群算法簡介

        人工魚群算法AFSA(Artificial Fish School Algorithm)是李曉磊等人通過對自然界中魚群行為的研究從而提出來的一種群體智能優(yōu)化算法[11].該算法的核心思想是通過構(gòu)造人工魚并利用魚的覓食行為、聚群行為、追尾行為這3種行為驅(qū)動人工魚游向食物濃度最高的地方,從而實現(xiàn)具體問題的尋優(yōu).由于該算法具有收斂速度快、對具體目標(biāo)函數(shù)要求不高等優(yōu)點(diǎn),從而被廣泛地應(yīng)用于各種組合優(yōu)化問題上.以下是對AFSA中3種行為的具體描述:

        1)覓食行為:設(shè)人工魚當(dāng)前狀態(tài)為Xi,其在視野范圍內(nèi)隨機(jī)選擇一個狀態(tài)Xj,如式(6)所示:

        Xj=Xi+Visual×Rand()

        (6)

        (7)

        其中Step是人工魚的最大步長.若Yj≤Yi,則反復(fù)迭代至最大覓食次數(shù),如果仍未滿足移動條件,則隨機(jī)游向一個狀態(tài).

        (8)

        否則進(jìn)行覓食行為.

        (9)

        否則進(jìn)行覓食行為.

        3.2 微服務(wù)拆分的AFSA模型

        3.2.1 人工魚模型

        1)人工魚的表示

        在微服務(wù)拆分的AFSA模型中,人工魚的狀態(tài)定義為微服務(wù)拆分的所有可行解空間Φ={M1,M2,…Mn}中的一個解Mi,它代表了一個可能的拆分結(jié)果,用一個集合表示為式(10)所示:

        Mi={m1,m2,…,ms}

        (10)

        集合中元素的數(shù)量s為要拆分的微服務(wù)的數(shù)量,由行業(yè)專家確定.每個元素mi代表了一個微服務(wù),其由系統(tǒng)中的若干個類組成,可以表示為式(11)所示:

        mi={c1,c2,…,ck}

        (11)

        其中ci是系統(tǒng)中的一個類,k為該微服務(wù)所包含的類的數(shù)量.

        2)人工魚的距離

        在微服務(wù)拆分的AFSA模型中,兩個微服務(wù)m1和m2的距離d(m1,m2)定義為將m1轉(zhuǎn)換為m2所要增加和刪除的類的數(shù)量,其等于不同時屬于m1和m2的類的數(shù)量,如圖3中陰影部分所示.具體的計算公式如式(12)所示:

        圖3 微服務(wù)的距離示意圖Fig.3 Diagram of distance between microservices

        d(m1,m2)=|m1∪m2|-|m1∩m2|

        (12)

        在微服務(wù)拆分的AFSA模型中,兩條人工魚M1和M2之間的距離D(M1,M2)定義為將M1轉(zhuǎn)換為M2最少需要移動的類的數(shù)量.如圖4所示,設(shè)M1={{c1,c2,c4},{c3,c5}},M2={{c1,c2,c3},{c4,c5}},則將M1轉(zhuǎn)換為M2,最少需要移動c3和c4兩個類,因此D(M1,M2)=2.

        圖4 人工魚的距離示意圖Fig.4 Diagram of distance between artificial fishes

        在M1和M2中的微服務(wù)之間存在一種一對一的對應(yīng)關(guān)系(mi,mj),其中mi∈M1,mj∈M2,使得所有mi和mj之間的距離總和最小,則D(M1,M2)等于這個最小值的一半,如式(13)所示:

        (13)

        例如圖4中,

        D(M1,M2)

        本文使用貪心算法求解這種對應(yīng)關(guān)系,具體步驟如算法1所示.

        算法1.求解微服務(wù)對應(yīng)關(guān)系的算法

        1.FormiinM1:

        2. FormjinM2:

        3. Ifd(mi,mj) is min:

        4. (mi,mj) is true;

        5.M2removemj;

        遍歷M1中的每個微服務(wù)mi,用貪心策略尋找M2中與之距離最短的微服務(wù)mj,則mi和mj存在對應(yīng)關(guān)系(mi,mj).

        3.2.2 人工魚行為模型

        在微服務(wù)拆分的AFSA模型中,食物濃度定義為目標(biāo)函數(shù)f(M)=CM+BM,食物濃度最高的地方對應(yīng)的Mmax即為最優(yōu)的微服務(wù)拆分結(jié)果,人工魚通過3種行為不斷游向食物濃度最高的地方,具體行為模型如下:

        1)覓食行為

        在微服務(wù)拆分的AFSA模型中,覓食行為表示人工魚在可行解空間中隨機(jī)地尋找最優(yōu)的微服務(wù)拆分結(jié)果.

        設(shè)人工魚當(dāng)前狀態(tài)為Mi,其在視野范圍內(nèi)隨機(jī)選擇一個狀態(tài)Mj,其值等于Mi隨機(jī)移動Rand(Visual)個類到其它微服務(wù)得到的拆分結(jié)果,其中Visual是人工魚的最大視野,根據(jù)系統(tǒng)中類的數(shù)量人為設(shè)定,Rand(x)產(chǎn)生一個0到x之間的隨機(jī)整數(shù).

        若f(Mj)≤f(Mi),則反復(fù)迭代至最大覓食次數(shù),如果仍未滿足移動條件,則隨機(jī)游向一個狀態(tài).

        2)聚群行為

        在微服務(wù)拆分的AFSA模型中,聚群行為表示人工魚尋找鄰近伙伴所表示的微服務(wù)拆分結(jié)果的共同特征,并游向滿足該特征的狀態(tài).

        定義人工魚Mi所對應(yīng)的關(guān)系矩陣Rk×k如式(14)所示:

        (14)

        其中k是系統(tǒng)中類的數(shù)量,a和b是系統(tǒng)中任意兩個類.

        設(shè)人工魚當(dāng)前狀態(tài)為Mi,視野范圍內(nèi)的伙伴數(shù)目為nf,伙伴的中心狀態(tài)為Mc,則Mc對應(yīng)的關(guān)系矩陣如式(15)所示:

        (15)

        其中round()是對矩陣中的每個元素進(jìn)行四舍五入取整操作.Rc代表了鄰近伙伴所表示的微服務(wù)拆分結(jié)果中類之間關(guān)系的共同特征,但有時候得到的Rc會存在一些類關(guān)系的沖突,比如Rc[a][b]=1,Rc[a][c]=1,但Rc[b][c]=0,即表示a和b,a和c都屬于同一個微服務(wù),但b和c卻不屬于同一個微服務(wù),這時候需要先對Rc進(jìn)行去沖突的操作,然后再將其轉(zhuǎn)換為對應(yīng)的Mc,具體的步驟如下所示:

        Step1.遍歷矩陣Rc,如果Rc[a][b]=1且Rc[a][c]=1,但Rc[b][c]=0,則令Rc[a][c]=0,Rc[c][a]=0.

        Step2.將Rc轉(zhuǎn)換為對應(yīng)的微服務(wù)拆分結(jié)果Mc.

        Step3.若Mc對應(yīng)的微服務(wù)數(shù)量小于預(yù)先設(shè)定的微服務(wù)數(shù)量s,則每次將類數(shù)量最多的微服務(wù)隨機(jī)拆分為兩個,直至微服務(wù)數(shù)量等于s.

        Step4.若Mc對應(yīng)的微服務(wù)數(shù)量大于s,則每次將類數(shù)量最少的兩個微服務(wù)合并為一個,直至微服務(wù)數(shù)量等于s.

        3)追尾行為

        在微服務(wù)拆分的AFSA模型中,追尾行為表示人工魚游向鄰近伙伴中最優(yōu)的一個微服務(wù)拆分結(jié)果的狀態(tài).

        3.2.3 整體流程

        AFSA求解微服務(wù)拆分問題的整體流程如下:

        Step1.設(shè)定魚群數(shù)量n,視野Visual,步長Step以及迭代次數(shù)tryNumber等參數(shù).

        Step2.設(shè)定要拆分的微服務(wù)數(shù)量s,根據(jù)s以及系統(tǒng)中類的數(shù)量隨機(jī)初始化n個微服務(wù)拆分結(jié)果,作為初始人工魚的狀態(tài){M1,M2,…,Mn}.

        Step3.構(gòu)造目標(biāo)函數(shù)f(M)=CM+BM作為食物濃度.

        Step4.對每條人工魚分別執(zhí)行覓食行為、聚群行為和追尾行為,得到相應(yīng)的狀態(tài)以及食物濃度(Mnext1,f(Mnext1))、(Mnext2,f(Mnext2))、(Mnext3,f(Mnext3)).

        Step5.令f(Mnext)=max(f(Mnext1),f(Mnext2),f(Mnext3)),其對應(yīng)的Mnext作為這條人工魚下一次游動的狀態(tài),對魚群中所有人工魚執(zhí)行相同的操作.

        Step6.反復(fù)執(zhí)行Step4和Step5,直到達(dá)到迭代次數(shù)tryNumber.

        Step7.輸出人工魚聚集最多的狀態(tài)M,即為最優(yōu)的微服務(wù)拆分結(jié)果.

        4 實驗設(shè)計及結(jié)果分析

        為了驗證提出的微服務(wù)拆分方法的可靠性,本文選擇了4個開源項目進(jìn)行實驗,如表1所示,它們都是基于單體架構(gòu)的項目,并且被廣泛應(yīng)用于相關(guān)的學(xué)術(shù)研究中.

        表1 項目信息Table 1 Project information

        本文首先以其中一個系統(tǒng)JpetStore為例描述了完整的實驗流程并展示了具體的微服務(wù)拆分結(jié)果,然后通過相關(guān)的評價指標(biāo)對所有項目的拆分結(jié)果進(jìn)行了評估,最后與其他的拆分方法進(jìn)行比較分析,說明了本方法的優(yōu)越性.

        4.1 案例分析

        JpetStore是一個基于單體架構(gòu)的小型寵物電商系統(tǒng),對其進(jìn)行微服務(wù)拆分的實驗流程如下:

        1)使用工具java-callgraph(https://github.com/gousiosg/java-callgraph)對系統(tǒng)源程序中所有類之間的繼承關(guān)系、關(guān)聯(lián)關(guān)系、依賴關(guān)系進(jìn)行分析,根據(jù)式(1)計算出類之間的耦合度,并將其保存在一個矩陣中.

        2)提取出源程序中的20個用戶接口作為測試用例,其涉及注冊、登錄、查詢個人信息、修改個人信息、搜索商品、瀏覽商品、添加購物車、移除購物車、下訂單、查看訂單等十多種業(yè)務(wù)功能.

        注釋:畫框部分表示與人工拆分結(jié)果不一致的類.

        3)基于Aspectj框架(http://www.eclipse.org/aspectj)對測試用例進(jìn)行執(zhí)行追蹤,得到類與業(yè)務(wù)功能的關(guān)聯(lián)關(guān)系,根據(jù)式(3)計算出類之間的業(yè)務(wù)相關(guān)度,并將其保存在一個矩陣中.

        4)根據(jù)1)和3)的生成結(jié)果構(gòu)造出目標(biāo)函數(shù).

        5)設(shè)定微服務(wù)的拆分?jǐn)?shù)量為4,AFSA中的人工魚數(shù)量為10,運(yùn)行AFSA經(jīng)過30次迭代后目標(biāo)函數(shù)收斂于最大值,得到最優(yōu)的微服務(wù)拆分結(jié)果如表2所示.

        表2 微服務(wù)拆分結(jié)果Table 2 Result of microservice decomposing

        該系統(tǒng)最終被拆分為4個微服務(wù):AccountService、CartService、ProductService、OrderService,分別實現(xiàn)賬戶、購物車、商品和訂單功能.將其與人工拆分的結(jié)果對比后發(fā)現(xiàn)幾乎所有類的劃分都保持一致,除了CartService中畫框部分所示的3個類的劃分略有不同,人工拆分的結(jié)果將這3個類劃分進(jìn)了商品相關(guān)的微服務(wù)中.經(jīng)分析后發(fā)現(xiàn)這3個類都是和全局會話以及異常相關(guān)的處理類,并不涉及業(yè)務(wù)邏輯相關(guān)的工作,因此人工拆分將其劃分進(jìn)了可能使用頻率比較高的商品相關(guān)的微服務(wù)中,而本方法則是根據(jù)耦合度和業(yè)務(wù)相關(guān)度進(jìn)行量化分析,將其拆分進(jìn)購物車相關(guān)的微服務(wù)中,實際上并不影響整體微服務(wù)架構(gòu)的構(gòu)建.

        4.2 評估指標(biāo)

        為了驗證應(yīng)用本方法所得到的結(jié)果與實際微服務(wù)拆分結(jié)果的匹配度,本文將人工拆分的結(jié)果作為標(biāo)注,得到微服務(wù)的拆分準(zhǔn)確率ACC計算公式如式(16)所示:

        (16)

        其中|ca|表示和人工拆分結(jié)果相一致的類的數(shù)量,|csum|表示系統(tǒng)中類的總數(shù)量,ACC越大,表示拆分準(zhǔn)確率越高,拆分的結(jié)果越符合預(yù)期.

        由于人工的拆分結(jié)果難免會存在一定的主觀性和片面性,因此還需要一些指標(biāo)對微服務(wù)拆分結(jié)果的質(zhì)量進(jìn)行更為客觀的評估,參考相關(guān)研究中的評估方法,本文選取了3種指標(biāo),具體如下:

        1)inter-partition call percentage (ICP)[12]:用來度量發(fā)生在兩個微服務(wù)之間的運(yùn)行時調(diào)用的百分比,因此ICP越小,微服務(wù)拆分的結(jié)果越好.其計算公式如式(17)所示:

        (17)

        其中ci,j表示兩個微服務(wù)相互調(diào)用的次數(shù).

        2)business context purity (BCP)[12]:用來度量每個微服務(wù)業(yè)務(wù)用例的平均熵.微服務(wù)的用例由與其成員類相關(guān)聯(lián)的所有用例標(biāo)簽組成.如果一個微服務(wù)實現(xiàn)了一小組用例,那么它就被認(rèn)為是功能內(nèi)聚的.BCP越小,微服務(wù)的拆分效果越好.其計算公式如式(18)所示:

        (18)

        其中|BCi|表示微服務(wù)i的測試用例數(shù)量.

        3)structural modularity (SM)[13]:從結(jié)構(gòu)的角度度量微服務(wù)的模塊化質(zhì)量,SM越大,微服務(wù)的拆分效果越好.其計算公式如式(19)所示:

        (19)

        其中scohi用來度量微服務(wù)的內(nèi)聚性,ui表示微服務(wù)內(nèi)部交互的次數(shù);scopi,j用來度量微服務(wù)的耦合性,σi,j表示微服務(wù)之間交互的次數(shù).

        4.3 對比試驗

        為了使最終的評估結(jié)果更具說服力,本文從文章第1節(jié)所歸納出的4類主流的微服務(wù)拆分方法中各選擇了一種具有代表性的方法用于對比實驗,具體如下:

        1)CoGCN[3]:通過類的靜態(tài)調(diào)用圖以及圖卷積神經(jīng)網(wǎng)絡(luò)完成微服務(wù)的拆分.

        2)MEM[5]:通過邏輯和語義關(guān)聯(lián)計算耦合,并使用最小生成樹的方法得到微服務(wù)的拆分結(jié)果.

        3)SdBu[6]:以業(yè)務(wù)場景作為測試用例完成數(shù)據(jù)庫的拆分,再自底向上完成微服務(wù)的拆分.

        4)ULA[9]:使用程序運(yùn)行時的性能作為拆分依據(jù),將具有相似性能的類劃分進(jìn)同一微服務(wù)內(nèi).

        4.4 實驗結(jié)果

        在實驗項目和微服務(wù)數(shù)量預(yù)設(shè)值相同的條件下完成所有的對比實驗,得到的評估指標(biāo)結(jié)果如表3所示.

        表3 評估指標(biāo)結(jié)果Table 3 Results of evaluation indicators

        通過對表3的分析可以發(fā)現(xiàn)本文提出的方法ACC指標(biāo)和ICP指標(biāo)在4個系統(tǒng)中都是最優(yōu)的,BCP指標(biāo)在3個系統(tǒng)中是最優(yōu)的,SM指標(biāo)在2個系統(tǒng)中最優(yōu),2個系統(tǒng)中排名第二.因此本文提出的方法總體優(yōu)于其他方法,這是因為:

        1)本文使用的方法符合行業(yè)內(nèi)人工拆分微服務(wù)的準(zhǔn)則和習(xí)慣.

        2)本文使用類之間的繼承、關(guān)聯(lián)、依賴關(guān)系作為類的耦合標(biāo)準(zhǔn),將耦合度高的類劃分進(jìn)同一個微服務(wù),從而減少了微服務(wù)之間的調(diào)用次數(shù).

        3)本文使用類與業(yè)務(wù)功能的關(guān)聯(lián)關(guān)系作為業(yè)務(wù)相關(guān)度的標(biāo)準(zhǔn),將實現(xiàn)相同功能的類劃分進(jìn)同一個微服務(wù),從而使得每個微服務(wù)的業(yè)務(wù)獨(dú)立性更高.

        4)本文根據(jù)微服務(wù)的高內(nèi)聚低耦合原則和業(yè)務(wù)一致性原則構(gòu)建組合優(yōu)化模型的目標(biāo)函數(shù),所以得到的微服務(wù)模塊化質(zhì)量更高.

        5 結(jié)束語

        本文提出一種組合優(yōu)化模型驅(qū)動的微服務(wù)拆分方法,該方法將具體的微服務(wù)拆分問題建模成為抽象的組合優(yōu)化問題,根據(jù)微服務(wù)的高內(nèi)聚低耦合原則以及企業(yè)實踐中的業(yè)務(wù)一致性原則,通過類之間的耦合度以及業(yè)務(wù)相關(guān)度生成了組合優(yōu)化的目標(biāo)函數(shù),最后通過人工魚群算法得到最優(yōu)的微服務(wù)拆分方案.實驗結(jié)果表明,該方法能有效提高拆分后微服務(wù)的模塊化質(zhì)量以及業(yè)務(wù)獨(dú)立性,降低了行業(yè)內(nèi)單體系統(tǒng)向微服務(wù)系統(tǒng)遷移的成本.未來的工作將著眼于改進(jìn)人工魚群算法在該組合優(yōu)化模型中的時間復(fù)雜度,以提高微服務(wù)拆分的效率.

        猜你喜歡
        服務(wù)模型
        一半模型
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        服務(wù)在身邊 健康每一天
        招行30年:從“滿意服務(wù)”到“感動服務(wù)”
        商周刊(2017年9期)2017-08-22 02:57:56
        3D打印中的模型分割與打包
        十八岁以下禁止观看黄下载链接 | 91精品在线免费| 免费观看国产激情视频在线观看| 一区二区三区国产免费视频| 老少配老妇老熟女中文普通话| 国内免费AV网站在线观看| 国产男女猛烈无遮挡免费视频网址| 午夜亚洲精品视频在线| 99无码熟妇丰满人妻啪啪| 又爆又大又粗又硬又黄的a片| 小13箩利洗澡无码免费视频| 成人av资源在线观看| 国产亚洲精品a片久久久| 精品少妇ay一区二区三区| 午夜无码熟熟妇丰满人妻| 亚洲av午夜福利精品一区不卡| 粗大的内捧猛烈进出小视频| 最新亚洲人成无码网www电影| 一区二区三区国产97| 日韩少妇人妻精品中文字幕| …日韩人妻无码精品一专区| 精品人妻少妇一区二区不卡| 精品日本一区二区视频| 大陆老熟女自拍自偷露脸| 久久国产劲暴∨内射| 天天插视频| 国产伦理一区二区久久精品 | 国产绳艺sm调教室论坛| 国产偷国产偷高清精品 | 狠狠色婷婷久久综合频道日韩| 在线视频你懂的国产福利| 国产青春草在线观看视频| www夜插内射视频网站| 久久久久久人妻一区二区三区| 日韩国产精品一本一区馆/在线| 午夜免费观看一区二区三区| 中国人妻与老外黑人| 国产一级特黄无码免费视频| 亚洲天堂av另类在线播放| 一本色道精品亚洲国产一区| 亚洲欧美国产精品久久|