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

    限界上下文視角下的微服務(wù)粒度評(píng)估*

    2019-10-24 02:09:56鐘陳星李杉杉
    軟件學(xué)報(bào) 2019年10期
    關(guān)鍵詞:內(nèi)聚性限界用例

    鐘陳星,李杉杉,張 賀,章 程

    1(南京大學(xué) 軟件學(xué)院,江蘇 南京 210023)

    2(計(jì)算機(jī)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué)),江蘇 南京 210023)

    3(安徽大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,安徽 合肥 230601)

    伴隨著互聯(lián)網(wǎng)技術(shù)的飛速發(fā)展和市場需求的急劇擴(kuò)增,軟件應(yīng)用是否可以靈活地調(diào)整業(yè)務(wù)與規(guī)模,持續(xù)交付部署,快速更新迭代成為企業(yè)在現(xiàn)代化商業(yè)競爭中取勝的決定性因素.然而,傳統(tǒng)的軟件開發(fā)采用單體架構(gòu)(monolithic architecture)[1]方式,將應(yīng)用程序的所有功能封裝在一個(gè)獨(dú)立的單元中,隨著軟件系統(tǒng)復(fù)雜度的劇增和開發(fā)團(tuán)隊(duì)的擴(kuò)大,逐漸暴露出其不夠靈活、開發(fā)效率低下以及妨礙持續(xù)交付與部署等缺點(diǎn).

    針對(duì)軟件敏捷性、靈活性和可擴(kuò)展性需求的不斷增長,使得突破單體架構(gòu)的限制成為亟待解決的問題,也使得微服務(wù)架構(gòu)(microservices architecture)[2]應(yīng)運(yùn)而生.微服務(wù)架構(gòu)將一個(gè)獨(dú)立的應(yīng)用程序分成多個(gè)協(xié)同工作的小而自治的服務(wù),每個(gè)微服務(wù)通常只完成某個(gè)特定的功能,并且運(yùn)行在單獨(dú)的進(jìn)程中.相較于單體架構(gòu),微服務(wù)在面對(duì)快速發(fā)展變化的業(yè)務(wù)需求時(shí)表現(xiàn)出更加敏捷(agility)、靈活(flexibility)及可擴(kuò)展性(scalability)等優(yōu)點(diǎn).具體來說,微服務(wù)擁有技術(shù)異構(gòu),不同的服務(wù)采用適合的技術(shù);對(duì)數(shù)據(jù)進(jìn)行“去中心化”控制,不同的服務(wù)無需共享一個(gè)中心數(shù)據(jù)庫;智能端點(diǎn),服務(wù)管理相關(guān)業(yè)務(wù)邏輯并通過輕量級(jí)的消息交互與其他服務(wù)通信;圍繞業(yè)務(wù)功能組織服務(wù),負(fù)責(zé)服務(wù)開發(fā)的團(tuán)隊(duì)同時(shí)負(fù)責(zé)該服務(wù)相關(guān)業(yè)務(wù)需求的所有實(shí)現(xiàn)細(xì)節(jié)等特性[3].微服務(wù)的這些特點(diǎn)與DevOps 提倡的生產(chǎn)環(huán)境的彈性、可靠性、穩(wěn)定性以及高頻率部署是一致的,這使其在Netflix、Amazon 以及eBay 等世界領(lǐng)先的互聯(lián)網(wǎng)公司中率先流行起來.

    然而,微服務(wù)的這些優(yōu)勢并不是一蹴而就的.微服務(wù)劃分是微服務(wù)領(lǐng)域的一項(xiàng)難題.其原因主要來自于以下4 個(gè)方面:第一,項(xiàng)目設(shè)計(jì)的初級(jí)階段可以為解決微服務(wù)劃分問題做決策提供支撐的信息過少;第二,微服務(wù)的劃分不僅與系統(tǒng)的領(lǐng)域知識(shí)相關(guān),還需要綜合考慮開發(fā)團(tuán)隊(duì)的組織結(jié)構(gòu)、項(xiàng)目的可用資源以及系統(tǒng)的非功能性需求等多個(gè)因素;第三,微服務(wù)劃分問題本身就是一個(gè)極富挑戰(zhàn)性的多目標(biāo)優(yōu)化問題.合理的微服務(wù)劃分要求設(shè)計(jì)者在多個(gè)相互排斥的性質(zhì)之間權(quán)衡利弊[4].比如,微服務(wù)提倡小而自治的服務(wù)之間相互合作[2].小而自治的服務(wù)符合單一職責(zé)原則(簡稱SRP),簡化了開發(fā)過程,但同時(shí)由于更多的服務(wù)需要部署也增加了運(yùn)維人員的壓力[5].從內(nèi)聚與耦合的角度看,粒度越小的服務(wù)具有越高的內(nèi)聚性,然而粒度越小的服務(wù)要實(shí)現(xiàn)同一個(gè)用例必然涉及更頻繁的服務(wù)間的通信交互,這使得服務(wù)間的耦合性提高,系統(tǒng)的復(fù)雜性更大;第四,微服務(wù)領(lǐng)域仍缺少針對(duì)服務(wù)設(shè)計(jì)本身的質(zhì)量評(píng)估方法.發(fā)展成熟的面向?qū)ο箢I(lǐng)域有許多評(píng)估面向?qū)ο笤O(shè)計(jì)的有效方法.然而,這些方法通常聚焦于代碼實(shí)現(xiàn)層的概念(比如類),與面向服務(wù)的微服務(wù)架構(gòu)的關(guān)注點(diǎn)不同.另外,在代碼實(shí)現(xiàn)后才評(píng)估微服務(wù)劃分的粒度所需要的系統(tǒng)重構(gòu)代價(jià)實(shí)在太大.因此,將評(píng)估面向?qū)ο笤O(shè)計(jì)的方法直接應(yīng)用于微服務(wù)架構(gòu)中不具備合理性.在很大程度上,架構(gòu)師對(duì)微服務(wù)劃分的合理性評(píng)估仍然依賴于他們對(duì)領(lǐng)域知識(shí)的理解和直覺[4].

    針對(duì)上述問題,本文旨在利用限界上下文(bounded context)理論[6]對(duì)微服務(wù)架構(gòu)的服務(wù)劃分粒度進(jìn)行研究,為微服務(wù)劃分粒度的質(zhì)量評(píng)估問題提供理論方法及工具支持,幫助實(shí)現(xiàn)傳統(tǒng)單體應(yīng)用向微服務(wù)架構(gòu)的遷移.本文的主要貢獻(xiàn)在于提出的微服務(wù)粒度評(píng)估模型及其工具可用于指導(dǎo)微服務(wù)架構(gòu)中合理的服務(wù)劃分[7],輔助架構(gòu)師做出微服務(wù)設(shè)計(jì)決策,一方面可以降低不合理的微服務(wù)設(shè)計(jì)所造成的軟件開發(fā)與部署難度;另一方面可以提高團(tuán)隊(duì)開發(fā)效率和系統(tǒng)性能,提升軟件企業(yè)的競爭力.

    本文第1 節(jié)介紹背景及相關(guān)工作.第2 節(jié)提出評(píng)估方法.第3 節(jié)給出4 種評(píng)估指標(biāo)及指標(biāo)合并過程.第4 節(jié)實(shí)現(xiàn)自動(dòng)化工具原型,并利用案例研究驗(yàn)證模型的有效性.第5 節(jié)總結(jié)論文,并提出下一步的工作.

    1 背景及相關(guān)工作

    合理的微服務(wù)劃分是微服務(wù)架構(gòu)敏捷、靈活和可擴(kuò)展性的先決條件,也是微服務(wù)領(lǐng)域所面臨的一項(xiàng)嚴(yán)峻挑戰(zhàn).過去的幾年里,一些研究人員致力于探究微服務(wù)劃分問題.Richardson[8]提出了用于指導(dǎo)微服務(wù)劃分的4 個(gè)策略,包括根據(jù)業(yè)務(wù)能力(business capability)進(jìn)行劃分、基于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中子領(lǐng)域(subdomain)的概念進(jìn)行劃分、利用動(dòng)詞和用例圖進(jìn)行劃分以及利用名詞和資源定義服務(wù)等.Richardson[8]提出的指導(dǎo)微服務(wù)劃分的4 個(gè)策略并沒有為微服務(wù)劃分問題提供系統(tǒng)化的指導(dǎo)方法,具體的微服務(wù)劃分過程仍然依賴于系統(tǒng)架構(gòu)人員對(duì)領(lǐng)域業(yè)務(wù)需求的理解和主觀經(jīng)驗(yàn)判斷.Gysel 等人[9]開發(fā)了微服務(wù)劃分工具Service Cutter.他們根據(jù)軟件架構(gòu)設(shè)計(jì)的經(jīng)驗(yàn)定義了16 種耦合度度量標(biāo)準(zhǔn),用以衡量系統(tǒng)中的nanoentities(包括數(shù)據(jù)、操作和軟件制品)之間的耦合度,從而提取出以nanoentities 為節(jié)點(diǎn)的系統(tǒng)無向加權(quán)圖,在此基礎(chǔ)上實(shí)施聚類算法,實(shí)現(xiàn)微服務(wù)的劃分.Service Cutter存在兩個(gè)方面的問題,其一,系統(tǒng)架構(gòu)人員需要學(xué)習(xí)16 種耦合度度量標(biāo)準(zhǔn)的定義,并且結(jié)合系統(tǒng)的領(lǐng)域業(yè)務(wù)需求規(guī)定耦合度度量標(biāo)準(zhǔn)的優(yōu)先級(jí),這極大地依賴于系統(tǒng)架構(gòu)人員的主觀經(jīng)驗(yàn);其二,由Service Cutter 計(jì)算得到的候選微服務(wù)準(zhǔn)確度較低,系統(tǒng)架構(gòu)人員仍需結(jié)合自己的預(yù)期劃分決定是否采納Service Cutter 提供的劃分方案.Baresi 等人[10]以符合OpenAPI 規(guī)范的系統(tǒng)API 為輸入,使用DISCO 相似度評(píng)估算法計(jì)算API 操作之間的相似度,將相似度高的操作及其數(shù)據(jù)劃分到同一服務(wù),從而實(shí)現(xiàn)微服務(wù)的劃分.該方法同樣存在兩個(gè)方面的問題,其一,該方法以系統(tǒng)API 中操作之間的相關(guān)性而不是領(lǐng)域業(yè)務(wù)邏輯層面的業(yè)務(wù)需求作為劃分依據(jù),操作的具體實(shí)現(xiàn)對(duì)最終劃分結(jié)果的影響較大;其二,該方法以實(shí)現(xiàn)層面的API 為輸入,適用于單體應(yīng)用到微服務(wù)應(yīng)用的遷移,而不適用于全新的微服務(wù)應(yīng)用的開發(fā).Chen 等人[11]將系統(tǒng)的領(lǐng)域業(yè)務(wù)邏輯繪制成數(shù)據(jù)流圖,將所有具有相同輸出數(shù)據(jù)的操作合并為一個(gè)操作,最終得到的每個(gè)操作及其數(shù)據(jù)都成為一個(gè)候選微服務(wù).該方法僅考慮了處理相同數(shù)據(jù)的操作應(yīng)屬于同一服務(wù),而忽略了微服務(wù)劃分的其他重要原則,可能存在微服務(wù)粒度過大的缺陷.顯然,微服務(wù)劃分問題仍缺少系統(tǒng)可行的理論指導(dǎo)方法.

    更重要的是,當(dāng)前的研究對(duì)于“什么樣的微服務(wù)劃分是合理的”這一問題還缺乏標(biāo)準(zhǔn)而統(tǒng)一的認(rèn)識(shí).缺乏微服務(wù)劃分合理性的評(píng)估標(biāo)準(zhǔn)使得比較不同微服務(wù)劃分方案變得困難.Baresi 等人[10]與Chen 等人[11]在將其工作與Service Cutter 進(jìn)行比較時(shí),都僅討論了兩種方法在實(shí)現(xiàn)層面的復(fù)雜程度,而未提及微服務(wù)劃分結(jié)果之間的優(yōu)劣對(duì)比情況.在評(píng)估微服務(wù)劃分問題上,Newman[2]指出,微服務(wù)劃分的核心原則是高內(nèi)聚與低耦合.高內(nèi)聚將相關(guān)聯(lián)的業(yè)務(wù)邏輯包含在同一個(gè)服務(wù)中,便于代碼管理;低耦合降低了服務(wù)間的依賴與通信開銷,允許服務(wù)的獨(dú)立修改和部署.Newman[2]給出的評(píng)估微服務(wù)劃分的討論屬于定性分析,存在含糊不清的情況.Zdun 等人[12]基于微服務(wù)架構(gòu)的實(shí)踐模式設(shè)計(jì)了幾種評(píng)估微服務(wù)劃分的標(biāo)準(zhǔn),并定義了相關(guān)算法,定量地計(jì)算當(dāng)前微服務(wù)劃分遵循該實(shí)踐模式的程度.設(shè)計(jì)的評(píng)估標(biāo)準(zhǔn)包括“所有組件是否都可獨(dú)立部署或者所有組件可獨(dú)立部署的程度”以及“當(dāng)前微服務(wù)劃分方案是否避免了共享其他組件或者避免了以緊耦合的方式共享其他組件”.該微服務(wù)劃分的評(píng)估方法僅衡量了當(dāng)前微服務(wù)劃分是否符合微服務(wù)架構(gòu)的實(shí)踐模式,而未考慮系統(tǒng)的具體領(lǐng)域業(yè)務(wù)邏輯以及當(dāng)前微服務(wù)劃分下系統(tǒng)的內(nèi)聚性等其他方面的問題.

    限界上下文是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(domain-driven design,簡稱DDD)[6]的核心概念.在應(yīng)對(duì)高復(fù)雜度的軟件開發(fā)任務(wù)時(shí),DDD 提倡將應(yīng)用按照領(lǐng)域業(yè)務(wù)邏輯劃分為多個(gè)限界上下文,不同上下文使用獨(dú)立的模型,并且顯式地定義每個(gè)限界上下文的邊界和限界上下文之間的映射關(guān)系.限界上下文與微服務(wù)是天然契合的.其關(guān)注點(diǎn)分離的思想有助于系統(tǒng)架構(gòu)人員從每個(gè)服務(wù)內(nèi)部和服務(wù)之間兩個(gè)角度設(shè)計(jì)架構(gòu).從限界上下文視角討論微服務(wù)粒度能夠幫助我們分離出問題的核心點(diǎn).

    本文基于限界上下文理論提出了一種微服務(wù)劃分的評(píng)估模型,具有以下優(yōu)點(diǎn):(1)以用例圖和實(shí)體關(guān)系圖為輸入,充分考慮了系統(tǒng)的領(lǐng)域業(yè)務(wù)邏輯;(2)設(shè)計(jì)了 4 種評(píng)估指標(biāo),定量地衡量微服務(wù)劃分在各項(xiàng)指標(biāo)上的表現(xiàn);(3)設(shè)計(jì)的4 種評(píng)估指標(biāo)都結(jié)合了微服務(wù)劃分的核心原則,包括高內(nèi)聚與低耦合;(4)進(jìn)行了指標(biāo)合并,提供綜合評(píng)分,用以比較不同微服務(wù)劃分方案;(5)實(shí)現(xiàn)了工具原型,可以自動(dòng)化地評(píng)估微服務(wù)劃分;(6)提出的評(píng)估模型不涉及微服務(wù)應(yīng)用的具體實(shí)現(xiàn),既適用于單體應(yīng)用向微服務(wù)應(yīng)用的遷移,又適用于全新的微服務(wù)應(yīng)用的開發(fā).

    2 限界上下文視角下的微服務(wù)粒度評(píng)估方法

    本節(jié)為解決微服務(wù)粒度界定問題提出一種基于限界上下文的量化評(píng)估方法,并給出具體的評(píng)估步驟.

    2.1 服務(wù)建模

    以評(píng)估微服務(wù)劃分為目的,基于UML 2.0[13]對(duì)微服務(wù)設(shè)計(jì)初級(jí)階段的關(guān)鍵元素建模以便于闡述后文.建模結(jié)果如圖1 所示.

    基于限界上下文劃分微服務(wù)將一個(gè)獨(dú)立的應(yīng)用程序劃分為多個(gè)協(xié)同工作的小而自治的服務(wù),每個(gè)服務(wù)對(duì)應(yīng)一個(gè)特定的限界上下文,規(guī)定了一組領(lǐng)域業(yè)務(wù)邏輯和相應(yīng)的領(lǐng)域?qū)嶓w.服務(wù)通過完成用例實(shí)現(xiàn)應(yīng)用的領(lǐng)域業(yè)務(wù)邏輯,即軟件系統(tǒng)的功能需求.一個(gè)服務(wù)允許實(shí)現(xiàn)多個(gè)用例,一個(gè)用例允許由多個(gè)服務(wù)通過消息交互實(shí)現(xiàn).屬性描述了實(shí)體的特征,是實(shí)體的組成元素,也是微服務(wù)劃分中不可再分的原子單元.一個(gè)用例涉及到的屬性可以分為輸入和輸出兩部分,分別由對(duì)應(yīng)服務(wù)的讀操作和寫操作完成[8].實(shí)體與關(guān)聯(lián)關(guān)系之間的對(duì)應(yīng)關(guān)系與傳統(tǒng)ER模型一致.

    Fig.1 Modeling of key elements in microservices decomposition圖1 微服務(wù)設(shè)計(jì)中關(guān)鍵元素的建模

    在評(píng)估微服務(wù)粒度的工作中,服務(wù)模型的表現(xiàn)形式包括軟件制品(Artifact,包括用例圖和實(shí)體關(guān)系圖等)和候選微服務(wù).

    (1)用例圖描述了軟件系統(tǒng)的功能需求.每個(gè)用例對(duì)應(yīng)于軟件系統(tǒng)的一項(xiàng)業(yè)務(wù)邏輯,完成一個(gè)用例有時(shí)需要多個(gè)服務(wù)之間的協(xié)同合作.Richardson[8]指出,用例可以作為微服務(wù)劃分的依據(jù).

    (2)實(shí)體關(guān)系圖與自然語言相對(duì)應(yīng),描述了軟件系統(tǒng)中關(guān)鍵的領(lǐng)域?qū)嶓w及實(shí)體與實(shí)體之間的關(guān)系,可用于指導(dǎo)微服務(wù)的拆分.關(guān)聯(lián)關(guān)系緊密的領(lǐng)域?qū)嶓w傾向于劃分到同一個(gè)服務(wù)中.

    (3)候選微服務(wù)描述了微服務(wù)劃分中服務(wù)與用例、實(shí)體之間的對(duì)應(yīng)關(guān)系,規(guī)定了每個(gè)服務(wù)負(fù)責(zé)的領(lǐng)域業(yè)務(wù)邏輯和相關(guān)限界上下文.本文通過評(píng)估候選微服務(wù)在各量化指標(biāo)上的表現(xiàn)來評(píng)估微服務(wù)劃分的合理性.

    2.2 評(píng)估過程

    本文提出的微服務(wù)粒度的評(píng)估過程可以分為4 個(gè)步驟,如圖2 所示.

    Fig.2 Evaluating the rationality of microservices decomposition圖2 評(píng)估微服務(wù)劃分合理性的過程

    (1)輸入服務(wù)模型數(shù)據(jù):包括用例圖、實(shí)體關(guān)系和候選微服務(wù)3 種表現(xiàn)形式.

    (2)指標(biāo)計(jì)算:以服務(wù)模型數(shù)據(jù)作為輸入,定量地計(jì)算候選微服務(wù)在所有評(píng)估指標(biāo)上的值,衡量該微服務(wù)劃分在各項(xiàng)指標(biāo)上的表現(xiàn).

    (3)指標(biāo)合并:對(duì)指標(biāo)計(jì)算的結(jié)果做歸一化處理與加權(quán)求和,得到該微服務(wù)劃分的綜合評(píng)分,用以比較不同的微服務(wù)劃分方案.

    (4)評(píng)估模型是否可優(yōu)化:設(shè)計(jì)人員根據(jù)指標(biāo)計(jì)算及合并過程得到的結(jié)果對(duì)微服務(wù)劃分進(jìn)行分析,判斷能否重新調(diào)整劃分以獲得更優(yōu)的微服務(wù)粒度.

    容易看出,微服務(wù)粒度的評(píng)估是一個(gè)向更優(yōu)劃分靠近的不斷迭代的過程.架構(gòu)設(shè)計(jì)人員應(yīng)選擇評(píng)估過程得到的最優(yōu)劃分方案作為最終的微服務(wù)劃分結(jié)果.

    3 評(píng)估指標(biāo)及合并

    本節(jié)根據(jù)業(yè)界廣泛采用的微服務(wù)劃分原則[2,8]定義一系列評(píng)估指標(biāo),用于衡量微服務(wù)劃分,指出各項(xiàng)指標(biāo)的有效性,并給出具體的指標(biāo)計(jì)算公式.

    3.1 服務(wù)內(nèi)聚性

    服務(wù)內(nèi)聚性是指服務(wù)內(nèi)用例之間的功能相關(guān)性[14].服務(wù)的內(nèi)聚性越高,設(shè)計(jì)模型的可理解性越強(qiáng),系統(tǒng)也就越敏捷[14].

    3.1.1 指標(biāo)有效性分析

    內(nèi)聚性是軟件系統(tǒng)中的主要屬性,也是微服務(wù)設(shè)計(jì)質(zhì)量評(píng)估的重要因素.服務(wù)的內(nèi)聚性越低,一方面意味著該服務(wù)存在越多功能邏輯不相關(guān)的代碼,其他服務(wù)對(duì)該服務(wù)存在越多的依賴,該服務(wù)越難以獨(dú)立修改;另一方面意味著不同服務(wù)中存在越多功能邏輯相關(guān)的代碼,代碼的冗余度越大.與此同時(shí),系統(tǒng)的技術(shù)可選性越小[2].另外,高內(nèi)聚性的服務(wù)由于實(shí)現(xiàn)了功能邏輯緊密相關(guān)的用例,因而具有更清晰的限界上下文,可理解性更強(qiáng).當(dāng)系統(tǒng)的微服務(wù)劃分與開發(fā)團(tuán)隊(duì)的組織結(jié)構(gòu)一致時(shí),具有高內(nèi)聚性的微服務(wù)開發(fā)速度更快.并且,由于服務(wù)的內(nèi)聚性減少了微服務(wù)內(nèi)部組件間的消息交互,因此具有更高的系統(tǒng)效率[15].

    正確定義服務(wù)邊界、分析系統(tǒng)語義是提高服務(wù)內(nèi)聚性的前提[15].Newman[2]指出,高內(nèi)聚是微服務(wù)領(lǐng)域的重要概念,是指將邏輯相關(guān)的代碼盡可能地放在相同服務(wù)中.通過領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中的限界上下文劃分微服務(wù)邊界,每個(gè)服務(wù)聚焦于一個(gè)具體的業(yè)務(wù)邏輯,可以避免服務(wù)粒度過大,實(shí)現(xiàn)高內(nèi)聚從而實(shí)現(xiàn)微服務(wù)優(yōu)勢的最大化.

    3.1.2 計(jì)算方法

    服務(wù)的內(nèi)聚性可通過服務(wù)內(nèi)部的實(shí)體間內(nèi)聚性來度量.現(xiàn)有的許多研究[16-18]通過為ER 模型中的關(guān)聯(lián)關(guān)系信息定義優(yōu)先級(jí)來衡量實(shí)體間的內(nèi)聚性,涉及到的關(guān)聯(lián)關(guān)系信息包括類型、基數(shù)(cardinality ratios)和參與約束(participation)等.文獻(xiàn)[18]使用距離的概念度量實(shí)體間的內(nèi)聚性,并為不同優(yōu)先級(jí)別的實(shí)體間內(nèi)聚性設(shè)置了不同的距離值,距離的值越大,實(shí)體間的內(nèi)聚性越小.文獻(xiàn)[17]指出,強(qiáng)實(shí)體與弱實(shí)體(strong-weak)之間的內(nèi)聚性最高,擁有第1 優(yōu)先級(jí).擁有內(nèi)聚性第2 優(yōu)先級(jí)的是具有特殊化/概化(generalization)關(guān)系的超類和子類.另外,聚合(aggregation)關(guān)聯(lián)關(guān)系由于具有部分與整體生存周期上的聯(lián)系,同樣屬于第2 優(yōu)先級(jí)隊(duì)列.具有限制(exclusive binary)關(guān)聯(lián)關(guān)系的實(shí)體間內(nèi)聚性較低,擁有第3 優(yōu)先級(jí)[18].具體的實(shí)體間關(guān)聯(lián)關(guān)系類別與距離值的對(duì)應(yīng)見表1.

    Table 1 Correspondences between relationship of entities and distances in ER diagrams表1 ER 圖中實(shí)體間關(guān)聯(lián)關(guān)系類別與距離值的對(duì)應(yīng)

    對(duì)于ER 模型中的其他關(guān)聯(lián)關(guān)系類別,我們根據(jù)基數(shù)與參與約束信息定義不同的優(yōu)先級(jí),以表現(xiàn)實(shí)體間不同程度的內(nèi)聚性特征.針對(duì)關(guān)聯(lián)關(guān)系的基數(shù),不同基數(shù)的關(guān)聯(lián)關(guān)系對(duì)應(yīng)的實(shí)體內(nèi)聚性特征如下:一對(duì)一>一對(duì)多>多對(duì)多.針對(duì)關(guān)聯(lián)關(guān)系的參與約束,不難理解,強(qiáng)制性(mandatory)參與的關(guān)聯(lián)關(guān)系比可選(optional)參與的關(guān)聯(lián)關(guān)系具有更強(qiáng)的內(nèi)聚性,因此,不同參與約束的關(guān)聯(lián)關(guān)系對(duì)應(yīng)的實(shí)體間內(nèi)聚性特征如下:強(qiáng)制-強(qiáng)制(M-M)>強(qiáng)制-可選(M-O)>可選-可選(O-O).據(jù)此,Mohammad[14]列出了表2.

    Table 2 Correspondences between cardinality and participation of relationship and distances in ER diagrams[14]表2 ER 圖中一般關(guān)聯(lián)關(guān)系的基數(shù)與參與約束信息對(duì)應(yīng)的距離值[14]

    在計(jì)算三元及其他n(n>2)元關(guān)聯(lián)關(guān)系時(shí),我們將表2 數(shù)據(jù)乘以10n-2得到對(duì)應(yīng)的距離值.表1 和表2 中距離值的數(shù)值選擇只反映了ER 模型中不同關(guān)聯(lián)關(guān)系對(duì)應(yīng)的實(shí)體內(nèi)聚性的強(qiáng)弱,與具體數(shù)值多少無關(guān).比如,1 和10的差距使得具有M-M 參與約束的兩個(gè)實(shí)體比具有M-O 參與約束的兩個(gè)實(shí)體內(nèi)聚性更強(qiáng).最后,出于完整性考慮,規(guī)定兩個(gè)相同實(shí)體之間的距離值為1.

    那么,任意實(shí)體E1和E2之間的距離值可以表示為ER 圖中兩個(gè)實(shí)體之間所有路徑上的邊的距離值之和的最小值,即最短路徑的長度,如式(1)所示.

    其中,p表示ER 圖中實(shí)體E1和E2之間的路徑數(shù),ep表示當(dāng)前路徑的邊數(shù),di表示邊的距離值.實(shí)體E1和E2的內(nèi)聚性如式(2)所示.

    由式(1)得到任意ER 圖對(duì)應(yīng)的ER 模型中所有實(shí)體之間的距離值,文獻(xiàn)[14]稱其為距離表(distance table).接下來,利用ER 模型中實(shí)體之間的距離值來度量服務(wù)內(nèi)聚性.根據(jù)第1 節(jié)提出的服務(wù)模型,一個(gè)服務(wù)允許實(shí)現(xiàn)多個(gè)用例.一個(gè)服務(wù)實(shí)現(xiàn)的用例越多,該服務(wù)的內(nèi)聚性就越低[2].對(duì)于服務(wù)內(nèi)的任意兩個(gè)用例1 和2,我們得到對(duì)一個(gè)實(shí)體集(BE1,BE2)以及所有的1 中實(shí)體與2 中實(shí)體之間的距離值(由距離表可得),從而構(gòu)建二分圖G(V,E),二分圖中每條邊E(i)的距離值用Weight(E(i))表示.使用貪心算法選出連接用例1 和用例2 中所有實(shí)體的距離值最小的邊的集合R可用于度量兩個(gè)用例間的內(nèi)聚性.具體算法如Algorithm 1 偽碼所示.

    Algorithm 1.使用貪心算法選出符合條件的R.

    輸入:BE1,BE2,距離表DistanceTable;

    輸出:R:連接用例1 和用例2 中所有實(shí)體的距離值最小的邊的集合.

    4:從G中選出具有最小距離值的邊e

    5:ife不屬于邊集R且e不與R內(nèi)其他邊構(gòu)成環(huán)then

    6:將e加入集合R

    7:將e的端點(diǎn)加入集合S

    8:end if

    9:end while

    根據(jù)得到的符合條件的邊集R,我們由式(3)計(jì)算用例之間的內(nèi)聚性UCC(use case cohesion).不難理解,式(3)的計(jì)算結(jié)果是邊集R的內(nèi)聚性平均值.

    對(duì)應(yīng)的服務(wù)K的內(nèi)聚性SC(service cohesion)可以表示如下,其中,a表示第k個(gè)服務(wù)中的用例數(shù).

    同時(shí),得到微服務(wù)系統(tǒng)設(shè)計(jì)的服務(wù)內(nèi)聚性SDC(service design cohesion)如下,s表示系統(tǒng)中的所有服務(wù)數(shù):

    3.2 服務(wù)耦合性

    服務(wù)耦合性描述了一個(gè)服務(wù)依賴于其他服務(wù)的程度,或者說一個(gè)服務(wù)的改變對(duì)其他服務(wù)的影響程度[15].

    3.2.1 指標(biāo)有效性分析

    微服務(wù)的特征之一是服務(wù)自治,允許服務(wù)獨(dú)立地修改和部署.這就要求減少服務(wù)之間的依賴,降低服務(wù)的耦合度.服務(wù)之間的低耦合可以帶來兩個(gè)好處.一方面,服務(wù)之間的通信交互越小,意味著系統(tǒng)具有更高的效率和更好的性能.另一方面,低耦合度意味著其他服務(wù)的修改對(duì)當(dāng)前服務(wù)的影響較小,系統(tǒng)具有更好的靈活性,能夠快速適應(yīng)需求的變化[2].低耦合是軟件工程中衡量系統(tǒng)設(shè)計(jì)的重要標(biāo)準(zhǔn).

    依據(jù)限界上下文定義微服務(wù)邊界,正確實(shí)現(xiàn)微服務(wù)劃分可以保證實(shí)現(xiàn)服務(wù)間的松耦合[19].Martin[20]的單一職責(zé)原則——“Gather together the things that change for the same reasons.Separate those things that change for different reasons.”——同樣可以降低微服務(wù)劃分的耦合度.具體來說,將同一個(gè)用例涉及到的屬性劃分到同一個(gè)服務(wù),將具有緊密關(guān)聯(lián)關(guān)系的實(shí)體劃分到同一個(gè)服務(wù),減少服務(wù)之間的通信數(shù)量,消除不必要的服務(wù)之間的關(guān)聯(lián)和依賴[9].

    3.2.2 計(jì)算方法

    服務(wù)間的耦合度體現(xiàn)了服務(wù)間的相互依賴程度.若服務(wù)A訪問服務(wù)B的實(shí)體以實(shí)現(xiàn)其業(yè)務(wù)用例,則稱服務(wù)A依賴于服務(wù)B,服務(wù)A與B之間存在耦合.在微服務(wù)應(yīng)用中,服務(wù)之間通過輕量級(jí)消息機(jī)制實(shí)現(xiàn)交互.服務(wù)之間的消息交互越多,系統(tǒng)的通信開銷就越大,系統(tǒng)性能也就越差.因此,可以用服務(wù)間傳遞消息的大小,包括傳遞的屬性個(gè)數(shù)以及屬性的復(fù)雜度等,來度量服務(wù)間的耦合度[11].其中,屬性的復(fù)雜度由屬性本身的組成結(jié)構(gòu)決定.類級(jí)別的屬性具有比基本數(shù)據(jù)類型屬性更高的復(fù)雜度,集合類型的屬性也具有比基本數(shù)據(jù)類型屬性更高的復(fù)雜度.為此,定義兩種不同的屬性復(fù)雜度級(jí)別:類與集合(ClassOrList)復(fù)雜度為10,原子(primitive)級(jí)別復(fù)雜度為1,所有屬性的默認(rèn)復(fù)雜度為原子級(jí)別.另外,服務(wù)之間以不同的頻率傳遞消息體現(xiàn)的服務(wù)耦合程度是不同的.在項(xiàng)目設(shè)計(jì)階段,消息頻率表現(xiàn)為用例頻率(frequency of use).用例頻率屬于用例圖的內(nèi)容,根據(jù)業(yè)務(wù)邏輯預(yù)估該用例在系統(tǒng)運(yùn)行時(shí)單位時(shí)間內(nèi)的調(diào)用次數(shù)獲得.比如,修改用戶密碼等涉及到基礎(chǔ)配置的用例調(diào)用次數(shù)較少,頻率較低.我們定義3 種不同的用例頻率:低、中、高(分別對(duì)應(yīng)頻率值1、10、100),并設(shè)置默認(rèn)用例頻率為中.為屬性和用例頻率設(shè)置默認(rèn)值降低了設(shè)計(jì)人員使用該工具進(jìn)行服務(wù)粒度評(píng)估的輸入工作量.基于以上分析,用式(6)度量系統(tǒng)設(shè)計(jì)的服務(wù)耦合性.

    其中,

    ul表示服務(wù)l實(shí)現(xiàn)的用例總數(shù)(ul≥0);

    flt表示服務(wù)l中的用例t的頻率(flt≥0);

    rlt表示服務(wù)l中的用例t包含的在服務(wù)間讀屬性的總數(shù)(rlt≥0);

    wlt表示服務(wù)l中的用例t包含的在服務(wù)間寫屬性的總數(shù)(wlt≥0);

    cltm表示服務(wù)l中的用例t包含的在服務(wù)間讀屬性m的復(fù)雜度(cltm≥0);

    cltn表示服務(wù)l中的用例t包含的在服務(wù)間寫屬性n的復(fù)雜度(cltn≥0).

    3.3 用例收斂性

    用例收斂性指代單個(gè)服務(wù)聚焦于處理特定領(lǐng)域業(yè)務(wù)功能的程度.

    3.3.1 指標(biāo)有效性分析

    微服務(wù)劃分的原則之一是每個(gè)服務(wù)要足夠小.著名的面向?qū)ο笤O(shè)計(jì)原則——單一職責(zé)原則(SRP)——規(guī)定每個(gè)類/模塊都應(yīng)該有單一的功能,并且該功能應(yīng)由這個(gè)類/模塊完全封裝起來.SRP 對(duì)于面向服務(wù)的微服務(wù)設(shè)計(jì)同樣有效[8].服務(wù)實(shí)現(xiàn)的用例體現(xiàn)了該服務(wù)為軟件系統(tǒng)提供的業(yè)務(wù)功能.服務(wù)實(shí)現(xiàn)的用例越多,意味著微服務(wù)設(shè)計(jì)不符合SRP 的程度越大,系統(tǒng)可復(fù)用性和內(nèi)聚性就越低.

    另一方面,實(shí)現(xiàn)單個(gè)用例涉及的服務(wù)越多,需要的服務(wù)之間的通信開銷就越大,系統(tǒng)延遲也就越高.不僅如此,這還需要越多的開發(fā)團(tuán)隊(duì)之間的合作,一定程度上提高了服務(wù)間耦合和開發(fā)團(tuán)隊(duì)間的依賴,降低了服務(wù)及其開發(fā)團(tuán)隊(duì)的自治性,應(yīng)盡量避免.

    3.3.2 計(jì)算方法

    基于第3.3.1 節(jié)中的分析,微服務(wù)設(shè)計(jì)中,(1)每個(gè)服務(wù)實(shí)現(xiàn)的用例應(yīng)盡可能地少;(2)實(shí)現(xiàn)單個(gè)用例涉及的服務(wù)應(yīng)盡可能地少.為了評(píng)估(1),計(jì)算微服務(wù)設(shè)計(jì)中服務(wù)實(shí)現(xiàn)的用例平均數(shù).為了評(píng)估(2),計(jì)算設(shè)計(jì)中實(shí)現(xiàn)每個(gè)用例涉及的服務(wù)平均數(shù).微服務(wù)劃分的用例收斂性用公式(7)表示如下:

    其中,

    s表示當(dāng)前微服務(wù)設(shè)計(jì)中的服務(wù)數(shù);

    Uk表示服務(wù)k中對(duì)應(yīng)的用例數(shù);

    u表示當(dāng)前微服務(wù)設(shè)計(jì)中的用例數(shù);

    Sl表示實(shí)現(xiàn)用例l涉及的服務(wù)數(shù).

    3.4 實(shí)體收斂性

    實(shí)體收斂性指代單個(gè)服務(wù)聚焦于處理特定領(lǐng)域?qū)嶓w的程度.

    3.4.1 指標(biāo)有效性分析

    微服務(wù)傾向于讓每個(gè)服務(wù)管理自己的數(shù)據(jù)庫[19],包括對(duì)領(lǐng)域?qū)嶓w數(shù)據(jù)的增加、刪除、更改和查詢.為滿足單一職責(zé)原則,降低服務(wù)的數(shù)據(jù)庫管理負(fù)載,單個(gè)服務(wù)管理的實(shí)體數(shù)應(yīng)盡可能地少.

    另一方面,共同閉包原則(common closure principle,簡稱CCP)——“the packages should not have more than one reason to change.”——強(qiáng)調(diào)從變化的角度看待軟件架構(gòu)設(shè)計(jì),可用于提高微服務(wù)設(shè)計(jì)的可維護(hù)性.具體來說,訪問同一實(shí)體的用例趨向于劃分到同一服務(wù).這樣,當(dāng)某一領(lǐng)域?qū)嶓w發(fā)生需求變更時(shí),需要做出修改的服務(wù)應(yīng)盡可能地少,帶來的服務(wù)間耦合也應(yīng)盡可能地小.

    3.4.2 計(jì)算方法

    基于第3.4.1 節(jié)中的分析,微服務(wù)設(shè)計(jì)中,(1)每個(gè)服務(wù)管理的實(shí)體數(shù)據(jù)應(yīng)盡可能地少;(2)同一實(shí)體數(shù)據(jù)涉及的服務(wù)也應(yīng)盡可能地少.為了評(píng)估(1),計(jì)算微服務(wù)設(shè)計(jì)中服務(wù)管理的實(shí)體平均數(shù).為了評(píng)估(2),計(jì)算設(shè)計(jì)中實(shí)體涉及的服務(wù)平均數(shù).微服務(wù)劃分的實(shí)體收斂性用公式(8)表示如下:

    其中,

    s表示當(dāng)前微服務(wù)設(shè)計(jì)中的服務(wù)數(shù);

    Ek表示服務(wù)k中管理的實(shí)體數(shù)據(jù)數(shù);

    e表示當(dāng)前微服務(wù)設(shè)計(jì)中的實(shí)體數(shù);

    Sl表示實(shí)體l涉及的服務(wù)數(shù).

    3.5 指標(biāo)合并

    合理的微服務(wù)劃分要求設(shè)計(jì)者在多個(gè)相互排斥的性質(zhì)之間權(quán)衡利弊[4].減少服務(wù)實(shí)現(xiàn)的用例數(shù)以降低微服務(wù)粒度,使微服務(wù)設(shè)計(jì)更符合單一職責(zé)原則.一方面,這不僅提高了服務(wù)內(nèi)聚性,同時(shí)還降低了對(duì)應(yīng)開發(fā)團(tuán)隊(duì)的工作強(qiáng)度.另一方面,這也帶來了更多的服務(wù)間數(shù)據(jù)流,增加了服務(wù)間的耦合與依賴.在劃分微服務(wù)時(shí),需要更多數(shù)據(jù)交互的用例及其數(shù)據(jù)應(yīng)趨向于被劃分到同一個(gè)服務(wù)內(nèi).另外,當(dāng)微服務(wù)劃分具有良好的實(shí)體收斂性時(shí),服務(wù)需要接收更多的服務(wù)間消息才能完成同一用例,服務(wù)間的耦合度較高.而當(dāng)微服務(wù)劃分具有較小的用例收斂性時(shí),一方面要求服務(wù)包含較少的用例,另一方面要求用例涉及的輸入輸出屬性盡量包含在更少的服務(wù)中,這就與較小的實(shí)體收斂性目標(biāo),即要求每個(gè)服務(wù)包含的實(shí)體較少發(fā)生了沖突.根據(jù)上述分析,我們需要合并計(jì)算得到的所有指標(biāo)以得到對(duì)微服務(wù)劃分的綜合評(píng)分.假設(shè)當(dāng)前存在n個(gè)不同的微服務(wù)劃分,對(duì)每個(gè)劃分都能通過前文所述的公式得到4 個(gè)指標(biāo),從而得到指標(biāo)矩陣M,M的每一列分別對(duì)應(yīng)服務(wù)內(nèi)聚性、服務(wù)耦合性、實(shí)體收斂性和用例收斂性:

    由于每種指標(biāo)表示的含義不同,其量綱和取值范圍也存在很大的差別,將不同指標(biāo)直接累加可能造成某一維指標(biāo)對(duì)結(jié)果影響過大.因此,為了更公平地合并不同的指標(biāo),我們需要對(duì)指標(biāo)計(jì)算結(jié)果進(jìn)行歸一化處理,使所有指標(biāo)數(shù)據(jù)的歸一化結(jié)果在[0,1]之間.另外,為了使加權(quán)結(jié)果越大與微服務(wù)設(shè)計(jì)越合理的目標(biāo)相統(tǒng)一,在歸一化過程中還應(yīng)考慮到指標(biāo)本身.根據(jù)前4 節(jié)的分析,更合理的微服務(wù)劃分具有更高的服務(wù)內(nèi)聚性、更低的服務(wù)耦合性、用例收斂性以及實(shí)體收斂性.

    (1)對(duì)于劃分目標(biāo)為更高的指標(biāo)i,對(duì)mij作如下歸一化處理:

    (2)對(duì)于劃分目標(biāo)為更低的指標(biāo)i,對(duì)mij作如下歸一化處理:

    其中,mimax和mimin分別是指標(biāo)i在n個(gè)不同劃分結(jié)果下的最大值和最小值.

    接下來,對(duì)歸一化處理后的指標(biāo)進(jìn)行加權(quán)以獲得綜合評(píng)分.顯然,不同的軟件系統(tǒng)對(duì)不同指標(biāo)的優(yōu)先級(jí)要求不同.比如,對(duì)于具有更高性能要求的軟件系統(tǒng),耦合性對(duì)系統(tǒng)設(shè)計(jì)非常關(guān)鍵,服務(wù)耦合性指標(biāo)應(yīng)具有更高的權(quán)重.相反地,更強(qiáng)調(diào)可復(fù)用性的軟件系統(tǒng)應(yīng)增加服務(wù)內(nèi)聚性和實(shí)體收斂性在評(píng)估微服務(wù)劃分工作中的權(quán)重.假設(shè)各指標(biāo)的權(quán)重向量為W={w1,w2,w3,w4},那么候選微服務(wù)k的綜合評(píng)分為

    4 工具原型及案例研究

    4.1 工具原型

    為了驗(yàn)證提出的微服務(wù)劃分的評(píng)估模型,我們實(shí)現(xiàn)了service candidates evaluating(SCE)工具原型,自動(dòng)化地計(jì)算候選微服務(wù)于服務(wù)內(nèi)聚性、服務(wù)耦合性、用例收斂性和實(shí)體收斂性4 個(gè)方面的指標(biāo),并給出綜合評(píng)分,以比較不同微服務(wù)劃分的優(yōu)劣.SCE 的實(shí)現(xiàn)基于Python 2.7.13 與Gui 編程技術(shù)PyQt5.圖3 描述了該SCE 的圖形化用戶接口,主要包括以下幾個(gè)方面:軟件制品與候選微服務(wù)的輸入,指標(biāo)優(yōu)先級(jí)的輸入,當(dāng)前候選微服務(wù)的評(píng)估結(jié)果輸出以及歷史評(píng)估結(jié)果的排行輸出.SCE 規(guī)定軟件制品與候選微服務(wù)的輸入應(yīng)嚴(yán)格遵循特定格式的JSON 文件形式.

    Fig.3 Interface of the SCE system prototype圖3 SCE 系統(tǒng)界面

    4.2 案例研究及分析

    本節(jié)將評(píng)估模型應(yīng)用于領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中的經(jīng)典場景——貨物跟蹤系統(tǒng)(cargo tracking system,簡稱CTS)——以闡述評(píng)估模型的具體使用過程,并驗(yàn)證模型的有效性.利用評(píng)估模型對(duì)CTS 案例下的幾種微服務(wù)劃分方案進(jìn)行評(píng)估,若評(píng)估結(jié)果排序與微服務(wù)架構(gòu)設(shè)計(jì)人員的預(yù)期相符,則認(rèn)為評(píng)估模型有效.

    4.2.1 業(yè)務(wù)場景

    CTS 是Evans[6]用于闡述領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的經(jīng)典案例,(1)具有合適的問題復(fù)雜度;(2)具有完整且合理的架構(gòu)分析;(3)具有公認(rèn)合理的限界上下文劃分方案;(4)GitHub 上具有已實(shí)現(xiàn)的完整代碼:DDDSample.對(duì)DDDSample 進(jìn)行逆向分析,不難得到CTS 的業(yè)務(wù)需求如下.

    (1)將Cargo 從Location A 運(yùn)送到Location B.每個(gè)Cargo 創(chuàng)建時(shí)都伴隨著一個(gè)TrackingId,Cargo 的具體說明用類RouteSpecification 來實(shí)現(xiàn).一旦Cargo 被創(chuàng)建,一到多個(gè)Itinerary 將分配給該Cargo;

    (2)系統(tǒng)通過計(jì)算現(xiàn)有的Voyage 給Cargo 分配合適的Itinerary,每個(gè)Voyage 都包含一系列的Carrier Movement;

    (3)在Cargo 的路線確定以后,HandlingEvent 跟蹤C(jī)argo 的每個(gè)Itinerary,完成貨物跟蹤;

    (4)Cargo 的Delivery 實(shí)例描述了具體的運(yùn)輸狀態(tài)、預(yù)計(jì)到達(dá)時(shí)間以及該Cargo 當(dāng)前是否被跟蹤.

    進(jìn)一步分析后可得到CTS 的用例圖和實(shí)體關(guān)系圖.同時(shí),得到CTS 的業(yè)務(wù)用例和領(lǐng)域?qū)嶓w如下.

    (1)業(yè)務(wù)用例:View Tracking,View Cargo,Book Cargo,Change Cargo Destination,Route Cargo,Create Location,Create Voyage,Add Carrier Movement,Handle Cargo Event.

    下文使用的縮寫形式為VT,VC,BC,CCD,RC,CL,ACM,HC.

    (2)領(lǐng)域?qū)嶓w:Cargo,HandlingEvent,Delivery,Voyage,RouteSpecification,Location,Itinerary,CarrierMovement,Leg.

    下文使用的縮寫形式為Car,HE,Del,Voy,RS,Loc,Iti,CM,Leg.

    表3 給出CTS 系統(tǒng)中業(yè)務(wù)用例與領(lǐng)域?qū)嶓w之間的對(duì)應(yīng).

    Table 3 Use cases of CTS表3 CTS 的業(yè)務(wù)用例及其領(lǐng)域?qū)嶓w

    4.2.2 模型驗(yàn)證

    接下來,通過驗(yàn)證CTS 案例下5 個(gè)候選微服務(wù)在評(píng)估模型中的表現(xiàn)來驗(yàn)證提出的微服務(wù)劃分評(píng)估模型的有效性.5 個(gè)候選微服務(wù)的具體細(xì)節(jié)見表4.

    Table 4 Microservices candidates of CTS application表4 CTS 應(yīng)用程序中的候選微服務(wù)

    候選微服務(wù)SC0 到候選微服務(wù)SC3 在設(shè)計(jì)時(shí)僅考慮評(píng)估模型的一項(xiàng)指標(biāo).在候選微服務(wù)SC0 中,每個(gè)服務(wù)僅負(fù)責(zé)一個(gè)用例的開發(fā)與實(shí)現(xiàn),服務(wù)的內(nèi)聚性最大.在候選微服務(wù)SC1 中,服務(wù)S10 將系統(tǒng)中所有業(yè)務(wù)用例與領(lǐng)域?qū)嶓w都組合在一起,實(shí)現(xiàn)任意用例都只需訪問本地領(lǐng)域?qū)嶓w,無服務(wù)間消息交互,具有最小的服務(wù)耦合性.候選微服務(wù)SC2 從用例收斂性的角度出發(fā),在保證服務(wù)實(shí)現(xiàn)的用例平均數(shù)較小的前提下,盡可能地將實(shí)現(xiàn)同一業(yè)務(wù)用例涉及到的領(lǐng)域?qū)嶓w劃分到相同服務(wù).比如,實(shí)現(xiàn)業(yè)務(wù)用例ViewTracking 涉及到的領(lǐng)域?qū)嶓w有Cargo、HandlingEvent、Delivery、Voyage 和RouteSpecification,若將這5 個(gè)領(lǐng)域?qū)嶓w(CTS 共有9 個(gè)領(lǐng)域?qū)嶓w)都劃分到同一服務(wù),則違背服務(wù)實(shí)現(xiàn)的用例平均數(shù)較小的原則.注意到,領(lǐng)域?qū)嶓wCargo 和RouteSpecification 在業(yè)務(wù)用例ViewTracking、ViewCargo、BookCargo、ChangeCargoDestination 以及RouteCargo 中均有涉及,因此,將領(lǐng)域?qū)嶓wCargo 和RouteSpecification 劃分到一個(gè)服務(wù)中.候選微服務(wù)SC3 中,在保證服務(wù)管理的實(shí)體平均數(shù)較小的前提下,盡可能地將處理相同領(lǐng)域?qū)嶓w的業(yè)務(wù)用例劃分到同一服務(wù),劃分方式與SC2 同理.SC4 對(duì)領(lǐng)域?qū)嶓w的劃分與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)對(duì)CTS 的劃分一致.在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中,Evans 根據(jù)限界上下文方法將CTS 劃分為4 個(gè)服務(wù):(1)Voyage 服務(wù)負(fù)責(zé)所有航運(yùn)的信息管理,包含領(lǐng)域?qū)嶓wVoyage 和CarrierMovement;(2)系統(tǒng)中的地點(diǎn)數(shù)據(jù)具有“多讀少寫”的業(yè)務(wù)特點(diǎn),由Location 服務(wù)負(fù)責(zé)管理,包含領(lǐng)域?qū)嶓wLocation;(3)Planning 服務(wù)負(fù)責(zé)管理系統(tǒng)中所有的貨物及其航段信息,包含領(lǐng)域?qū)嶓wCargo,RouteSpecification,Itinerary 和Leg;(4)Tracking 服務(wù)用于跟蹤貨物的具體事件,包含領(lǐng)域?qū)嶓wHandlingEvent.SC4 實(shí)現(xiàn)了在4 個(gè)指標(biāo)之間的權(quán)衡.

    由于SC4 是公認(rèn)合理的限界上下文劃分方案,而SC0 到SC3 都僅考慮了4 個(gè)評(píng)估指標(biāo)中的一項(xiàng),因此,預(yù)計(jì)在評(píng)估模型給出的評(píng)估結(jié)果中候選微服務(wù)4 即SC4 應(yīng)具有最好的綜合評(píng)分.

    在運(yùn)行SCE 進(jìn)行微服務(wù)劃分評(píng)估時(shí),根據(jù)CTS 的項(xiàng)目需求指定4 個(gè)指標(biāo)的優(yōu)先級(jí)參數(shù)為[0.25,0.25,0.25,0.25].運(yùn)行SCE,對(duì)5 個(gè)候選微服務(wù)分別計(jì)算其指標(biāo),得到如下指標(biāo)矩陣M(M的每一行對(duì)應(yīng)SC0~SC4):

    對(duì)指標(biāo)計(jì)算結(jié)果進(jìn)行歸一化處理得到矩陣M′如下.分析矩陣M′后發(fā)現(xiàn),候選微服務(wù)SC0 具有最大的服務(wù)內(nèi)聚性,SC1 具有最小的服務(wù)耦合性,SC2 具有較小的用例收斂性,SC3 具有最小的實(shí)體收斂性,與此前的服務(wù)設(shè)計(jì)的分析相一致.

    之后,再按照優(yōu)先級(jí)參數(shù)對(duì)M′做加權(quán)求和后,得到5 個(gè)候選微服務(wù)的綜合指標(biāo)為[0.663,0.254,0.733,0.806,0.831].候選微服務(wù)SC4 由于權(quán)衡了微服務(wù)劃分的多個(gè)方面,具有最好的綜合指標(biāo)結(jié)果.綜合指標(biāo)的計(jì)算結(jié)果與預(yù)想一致,一定程度上說明了評(píng)估模型的有效性.

    4.2.3 與Service Cutter 對(duì)比

    由于微服務(wù)領(lǐng)域缺少評(píng)估微服務(wù)劃分的系統(tǒng)化工作,我們選擇劃分微服務(wù)的工具原型Service Cutter,使用本評(píng)估模型對(duì)CTS 在Service Cutter 中的幾種劃分結(jié)果進(jìn)行評(píng)估,將評(píng)估結(jié)果與Service Cutter 的人為評(píng)估結(jié)果進(jìn)行比較.

    Service Cutter 的微服務(wù)劃分過程包括 4 個(gè)步驟:系統(tǒng)定義(system definition)、系統(tǒng)說明(system specification)、服務(wù)劃分(service decomposition)和分析服務(wù)劃分結(jié)果(analyze service cuts).在利用CTS 進(jìn)行微服務(wù)劃分的模型驗(yàn)證時(shí),Gysel 等人[9]同樣通過對(duì)DDDSample 的逆向分析得到相關(guān)用戶描述(user representation),并以此作為系統(tǒng)定義和系統(tǒng)說明步驟的輸入,得到的用戶描述包括用例圖、實(shí)體關(guān)系圖、nanoentities 的內(nèi)容易變性和結(jié)構(gòu)易變性特征等.Service Cutter 通過逆向分析得到的用例圖和實(shí)體關(guān)系圖與第4.2.1 節(jié)中的基本一致.除用例圖和實(shí)體關(guān)系圖外,Service Cutter 分析DDDSample 得到的部分用戶描述列舉見表5.Service Cutter 對(duì)Location 的內(nèi)容易變性與結(jié)構(gòu)易變性的定義與本文第4.2.2 節(jié)的討論相一致.在服務(wù)劃分步驟中,Gysel等人還根據(jù)CTS 的需求特性對(duì)16 種耦合度度量標(biāo)準(zhǔn)的優(yōu)先級(jí)進(jìn)行了調(diào)整,以使微服務(wù)劃分結(jié)果更接近預(yù)期結(jié)果.

    Table 5 Part of user representations of CTS application in Service Cutter表5 Service Cutter 得到的CTS 部分用戶描述

    以用戶描述和調(diào)整后的耦合度度量標(biāo)準(zhǔn)的優(yōu)先級(jí)作為輸入,Service Cutter 在劃分CTS 系統(tǒng)時(shí)調(diào)整聚類算法得到了兩種劃分方案,具體細(xì)節(jié)見表6.

    Table 6 Microservices candidates of CTS application in Service Cutter表6 Service Cutter 對(duì)CTS 應(yīng)用程序劃分得到的候選微服務(wù)

    Service Cutter 對(duì)劃分結(jié)果的討論認(rèn)為,CUT0 將領(lǐng)域?qū)嶓wLocation 劃分到兩個(gè)服務(wù),并且依據(jù)劃分結(jié)果與預(yù)期結(jié)果的一致程度判定CUT0 為“壞”劃分,CUT1 為“可接受”的劃分.運(yùn)行SCE 得到本評(píng)估模型對(duì)兩種劃分方案的評(píng)估結(jié)果見表7.

    Table 7 Evaluation of two decompositions in Service Cutter by SCE表7 SCE 對(duì)Service Cutter 兩種劃分方案的評(píng)估結(jié)果

    SCE 的運(yùn)行結(jié)果顯示,微服務(wù)CUT0 具有更高的綜合評(píng)分,與Service Cutter 的人為評(píng)估結(jié)果不一致.盡管候選微服務(wù)CUT1 的服務(wù)耦合性更小,但是由于CUT1 中只有3 個(gè)服務(wù),每個(gè)服務(wù)實(shí)現(xiàn)的業(yè)務(wù)用例和管理的領(lǐng)域?qū)嶓w更多,因此,用例收斂性和實(shí)體收斂性都更大.并且,對(duì)比候選微服務(wù)CUT0 和CUT1 的具體劃分,CUT0 將業(yè)務(wù)用例AddCarrierMovement 劃分出來,成為一個(gè)服務(wù),使服務(wù)S00 更符合SRP 原則,提高了劃分的服務(wù)內(nèi)聚性.從服務(wù)內(nèi)聚性、服務(wù)耦合性、用例收斂性和實(shí)體收斂性4 個(gè)方面綜合考慮,CUT0 對(duì)應(yīng)的微服務(wù)劃分更合理.與本模型相比,Service Cutter 對(duì)劃分結(jié)果的人為評(píng)估具有更強(qiáng)的主觀性.

    5 總結(jié)及下一步工作

    微服務(wù)和DevOps 在縮短交付周期、提高團(tuán)隊(duì)自治性等特性方面是相輔相成的.然而,合理的微服務(wù)粒度是微服務(wù)一切特性的前提,也是微服務(wù)領(lǐng)域的一項(xiàng)難題.本文從限界上下文視角提出一種微服務(wù)劃分粒度的評(píng)估模型.首先,針對(duì)微服務(wù)劃分問題給出完整的評(píng)估過程;然后,結(jié)合微服務(wù)劃分的核心原則包括高內(nèi)聚、低耦合等設(shè)計(jì)4 項(xiàng)評(píng)估指標(biāo)以量化評(píng)估過程;其次,引入指標(biāo)合并得到微服務(wù)劃分的綜合評(píng)分以比較不同微服務(wù)劃分方案;再次,實(shí)現(xiàn)工具原型SCE 自動(dòng)化地評(píng)估微服務(wù)劃分;最后,比較評(píng)估結(jié)果與架構(gòu)師心理預(yù)期驗(yàn)證模型的有效性.

    目前,該方法仍存在如下待改進(jìn)的問題:首先,評(píng)估模型僅考慮了微服務(wù)劃分的4 個(gè)優(yōu)化目標(biāo),評(píng)估結(jié)果不夠精確,評(píng)估過程考慮的因素不夠全面,后續(xù)工作將圍繞微服務(wù)架構(gòu)本身及限界上下文討論更多的微服務(wù)劃分原則,并結(jié)合實(shí)際工程項(xiàng)目完善評(píng)估模型;其次,工具原型SCE 要求架構(gòu)設(shè)計(jì)人員將軟件制品轉(zhuǎn)化為格式規(guī)范的JSON 文件作為輸入,后續(xù)工作考慮將SCE 集成到微服務(wù)工具鏈,使圖形化軟件制品直接轉(zhuǎn)化為SCE 輸入,減少架構(gòu)設(shè)計(jì)人員的工作負(fù)擔(dān).

    猜你喜歡
    內(nèi)聚性限界用例
    UML用例模型中依賴關(guān)系的比較與分析
    客運(yùn)專線接觸網(wǎng)吊柱安全限界控制的探討
    安防科技(2021年2期)2021-11-30 23:51:10
    漂浮的針
    聯(lián)鎖軟件詳細(xì)設(shè)計(jì)的測試需求分析和用例編寫
    從出土文獻(xiàn)用例看王氏父子校讀古書的得失
    質(zhì)地多面分析(TPA)法評(píng)價(jià)‘安哥諾’李質(zhì)地參數(shù)的研究
    會(huì)計(jì)師事務(wù)所選擇緣何“群集”
    限界檢查器設(shè)置方案的探討
    地鐵隧道施工偏差限界檢測軟件開發(fā)與應(yīng)用
    《修辭學(xué)發(fā)凡》用例的當(dāng)代學(xué)術(shù)價(jià)值
    别揉我奶头~嗯~啊~动态视频| 国产又爽黄色视频| 日韩 欧美 亚洲 中文字幕| 欧美日本亚洲视频在线播放| 新久久久久国产一级毛片| 亚洲,欧美精品.| 亚洲国产精品一区二区三区在线| 欧美日韩亚洲国产一区二区在线观看| 岛国在线观看网站| 最好的美女福利视频网| 精品国产乱码久久久久久男人| 人人妻人人澡人人看| 精品一区二区三区av网在线观看| 黄网站色视频无遮挡免费观看| 一区二区日韩欧美中文字幕| 大型av网站在线播放| 女人精品久久久久毛片| 在线观看免费高清a一片| 亚洲va日本ⅴa欧美va伊人久久| 侵犯人妻中文字幕一二三四区| 人人妻,人人澡人人爽秒播| 午夜福利,免费看| 电影成人av| 91麻豆av在线| 又黄又爽又免费观看的视频| 波多野结衣av一区二区av| 欧美日本中文国产一区发布| 18禁黄网站禁片午夜丰满| 亚洲精品av麻豆狂野| 天堂俺去俺来也www色官网| 一区二区日韩欧美中文字幕| 久久久久九九精品影院| 国产精品一区二区免费欧美| 亚洲专区中文字幕在线| 国内毛片毛片毛片毛片毛片| 大码成人一级视频| 亚洲av五月六月丁香网| 精品久久久久久,| av在线天堂中文字幕 | 国产在线精品亚洲第一网站| 老司机靠b影院| 亚洲成人国产一区在线观看| 青草久久国产| 黄色毛片三级朝国网站| 亚洲美女黄片视频| 国产有黄有色有爽视频| 亚洲国产中文字幕在线视频| 亚洲精品成人av观看孕妇| 在线观看一区二区三区| 免费看十八禁软件| 国产欧美日韩综合在线一区二区| 中文字幕人妻熟女乱码| 免费看a级黄色片| 亚洲伊人色综图| 亚洲精品在线观看二区| 国产精品香港三级国产av潘金莲| 国产亚洲欧美在线一区二区| 五月开心婷婷网| 精品一品国产午夜福利视频| 在线永久观看黄色视频| 88av欧美| 日本免费a在线| 亚洲五月婷婷丁香| 最新在线观看一区二区三区| 天堂影院成人在线观看| 搡老熟女国产l中国老女人| 国产免费男女视频| 老司机亚洲免费影院| 亚洲成人免费电影在线观看| 亚洲精品在线观看二区| 国产一区在线观看成人免费| 欧美午夜高清在线| 久久久水蜜桃国产精品网| 久久精品国产亚洲av高清一级| 男女下面插进去视频免费观看| 18禁裸乳无遮挡免费网站照片 | 91精品三级在线观看| 久久精品亚洲av国产电影网| 国产成人av激情在线播放| 精品一区二区三区视频在线观看免费 | 18禁国产床啪视频网站| 国产精品成人在线| 我的亚洲天堂| 午夜免费成人在线视频| 亚洲aⅴ乱码一区二区在线播放 | 少妇裸体淫交视频免费看高清 | 午夜影院日韩av| 丝袜美腿诱惑在线| 欧美成人免费av一区二区三区| 又黄又爽又免费观看的视频| 亚洲成av片中文字幕在线观看| 又紧又爽又黄一区二区| 美女大奶头视频| 亚洲aⅴ乱码一区二区在线播放 | 亚洲精品中文字幕一二三四区| 99久久综合精品五月天人人| 亚洲精品成人av观看孕妇| 午夜福利,免费看| 99精品久久久久人妻精品| 一区二区三区国产精品乱码| 搡老岳熟女国产| 久久亚洲真实| 看片在线看免费视频| 波多野结衣高清无吗| 久久久精品欧美日韩精品| 亚洲成a人片在线一区二区| 国产精品久久久久成人av| 日韩 欧美 亚洲 中文字幕| 亚洲国产欧美一区二区综合| 脱女人内裤的视频| 日本欧美视频一区| 高清毛片免费观看视频网站 | 80岁老熟妇乱子伦牲交| 久久性视频一级片| 啦啦啦在线免费观看视频4| 欧美+亚洲+日韩+国产| 午夜福利免费观看在线| 精品日产1卡2卡| 一二三四在线观看免费中文在| 婷婷六月久久综合丁香| 免费在线观看黄色视频的| 亚洲国产欧美网| 久久久国产欧美日韩av| 中国美女看黄片| 最近最新中文字幕大全电影3 | 亚洲中文日韩欧美视频| 久久狼人影院| 国产熟女午夜一区二区三区| 美国免费a级毛片| 巨乳人妻的诱惑在线观看| 人成视频在线观看免费观看| 亚洲精品久久午夜乱码| 亚洲欧美日韩无卡精品| 高清毛片免费观看视频网站 | 日韩欧美三级三区| 中文欧美无线码| 国产成人av激情在线播放| 成人国产一区最新在线观看| av网站免费在线观看视频| av天堂久久9| 丝袜在线中文字幕| 天堂中文最新版在线下载| 国产精品 欧美亚洲| 身体一侧抽搐| 天堂中文最新版在线下载| 男女高潮啪啪啪动态图| 91字幕亚洲| 俄罗斯特黄特色一大片| 国产激情久久老熟女| 超碰97精品在线观看| 亚洲av日韩精品久久久久久密| 国产97色在线日韩免费| 999久久久精品免费观看国产| 黄色视频不卡| 免费久久久久久久精品成人欧美视频| 亚洲精品中文字幕在线视频| 大型av网站在线播放| 久久影院123| 日本免费一区二区三区高清不卡 | 国产精品亚洲av一区麻豆| 黄色成人免费大全| 亚洲av日韩精品久久久久久密| 中出人妻视频一区二区| 纯流量卡能插随身wifi吗| 免费观看人在逋| www.精华液| 免费在线观看影片大全网站| 免费搜索国产男女视频| 色播在线永久视频| 日韩欧美三级三区| 欧美成人免费av一区二区三区| 精品国产超薄肉色丝袜足j| 成人免费观看视频高清| 在线播放国产精品三级| 999久久久国产精品视频| 久久精品国产亚洲av高清一级| 最新美女视频免费是黄的| 大型黄色视频在线免费观看| 亚洲一区二区三区欧美精品| 久久精品国产综合久久久| 两个人免费观看高清视频| 亚洲一卡2卡3卡4卡5卡精品中文| 美女国产高潮福利片在线看| 国产精品日韩av在线免费观看 | 老熟妇乱子伦视频在线观看| 日本黄色日本黄色录像| www.熟女人妻精品国产| av中文乱码字幕在线| 国产成人精品无人区| 国产精品一区二区免费欧美| 美女午夜性视频免费| 男人操女人黄网站| av电影中文网址| 另类亚洲欧美激情| 国产精品亚洲av一区麻豆| 黄网站色视频无遮挡免费观看| 国产一区二区三区在线臀色熟女 | 在线天堂中文资源库| 大码成人一级视频| 黑人巨大精品欧美一区二区蜜桃| 91国产中文字幕| 色综合婷婷激情| 国产高清激情床上av| 久9热在线精品视频| 中文字幕精品免费在线观看视频| 男女床上黄色一级片免费看| 国产精品亚洲av一区麻豆| 亚洲成人免费电影在线观看| 一夜夜www| 黄色怎么调成土黄色| 亚洲第一av免费看| 免费在线观看亚洲国产| 悠悠久久av| 国产有黄有色有爽视频| 黄色毛片三级朝国网站| 亚洲av美国av| 丰满人妻熟妇乱又伦精品不卡| 波多野结衣高清无吗| 免费看十八禁软件| 久久精品亚洲熟妇少妇任你| 91成年电影在线观看| 法律面前人人平等表现在哪些方面| 男人舔女人的私密视频| 成人手机av| 国产精品乱码一区二三区的特点 | 99香蕉大伊视频| 欧美国产精品va在线观看不卡| 99国产精品免费福利视频| 国产精品亚洲av一区麻豆| 国产99白浆流出| 日本免费a在线| 一级毛片女人18水好多| 他把我摸到了高潮在线观看| 一级片'在线观看视频| 成人av一区二区三区在线看| 视频在线观看一区二区三区| 亚洲欧美一区二区三区久久| 天堂动漫精品| 天堂影院成人在线观看| 精品一品国产午夜福利视频| 成年女人毛片免费观看观看9| 精品国产超薄肉色丝袜足j| 日本a在线网址| 人妻丰满熟妇av一区二区三区| 国产不卡一卡二| 99在线视频只有这里精品首页| 亚洲一区中文字幕在线| 极品教师在线免费播放| 看片在线看免费视频| 欧美午夜高清在线| 欧洲精品卡2卡3卡4卡5卡区| 啦啦啦免费观看视频1| 69精品国产乱码久久久| 精品国产超薄肉色丝袜足j| а√天堂www在线а√下载| 中文字幕av电影在线播放| 国产免费av片在线观看野外av| 最新在线观看一区二区三区| 日韩欧美国产一区二区入口| 69精品国产乱码久久久| 精品一区二区三区视频在线观看免费 | bbb黄色大片| 国产乱人伦免费视频| 亚洲av日韩精品久久久久久密| 久久午夜综合久久蜜桃| 久久狼人影院| 99久久综合精品五月天人人| 黑人巨大精品欧美一区二区蜜桃| 欧美人与性动交α欧美精品济南到| 国产乱人伦免费视频| av在线天堂中文字幕 | 亚洲精品一二三| 国产精品亚洲av一区麻豆| 一进一出抽搐gif免费好疼 | 国产三级在线视频| 18禁黄网站禁片午夜丰满| 亚洲成人免费电影在线观看| 久久天躁狠狠躁夜夜2o2o| 中文字幕精品免费在线观看视频| 国产成人精品在线电影| av天堂久久9| 国产又色又爽无遮挡免费看| 欧美一级毛片孕妇| 老熟妇仑乱视频hdxx| 老鸭窝网址在线观看| 亚洲欧美一区二区三区久久| 国产成人精品在线电影| 国产成人免费无遮挡视频| 国产又爽黄色视频| 精品久久蜜臀av无| 日韩精品青青久久久久久| 国产黄色免费在线视频| 九色亚洲精品在线播放| 老鸭窝网址在线观看| 中文字幕精品免费在线观看视频| 久久人妻福利社区极品人妻图片| 中文字幕av电影在线播放| 在线免费观看的www视频| 亚洲男人的天堂狠狠| 村上凉子中文字幕在线| 日韩一卡2卡3卡4卡2021年| 少妇粗大呻吟视频| 欧美色视频一区免费| 久热爱精品视频在线9| 亚洲国产精品一区二区三区在线| 不卡av一区二区三区| 国产免费现黄频在线看| 亚洲中文日韩欧美视频| 视频区欧美日本亚洲| 黄色a级毛片大全视频| 在线观看一区二区三区激情| 最新在线观看一区二区三区| 亚洲美女黄片视频| 女人被狂操c到高潮| 天天躁夜夜躁狠狠躁躁| 欧美日韩一级在线毛片| 少妇粗大呻吟视频| 在线观看日韩欧美| 女人被躁到高潮嗷嗷叫费观| 欧美人与性动交α欧美精品济南到| 国产亚洲精品久久久久久毛片| 高清黄色对白视频在线免费看| 真人做人爱边吃奶动态| 欧美激情极品国产一区二区三区| 日韩大尺度精品在线看网址 | 亚洲色图 男人天堂 中文字幕| 麻豆成人av在线观看| 18禁美女被吸乳视频| 午夜91福利影院| 啦啦啦 在线观看视频| 黑人欧美特级aaaaaa片| 国产一卡二卡三卡精品| xxx96com| 日韩 欧美 亚洲 中文字幕| 久久久国产成人精品二区 | 中出人妻视频一区二区| 国产又爽黄色视频| 熟女少妇亚洲综合色aaa.| 国产又爽黄色视频| 精品久久久久久成人av| 久热这里只有精品99| 高清av免费在线| 国产又爽黄色视频| 欧美另类亚洲清纯唯美| 日韩欧美一区视频在线观看| 亚洲avbb在线观看| 午夜a级毛片| 日本撒尿小便嘘嘘汇集6| 黑人巨大精品欧美一区二区蜜桃| aaaaa片日本免费| 亚洲av成人不卡在线观看播放网| 制服诱惑二区| 国产成人欧美| 国产成人影院久久av| 757午夜福利合集在线观看| 国内毛片毛片毛片毛片毛片| 国产精品乱码一区二三区的特点 | 成熟少妇高潮喷水视频| 日本 av在线| 精品日产1卡2卡| 啦啦啦免费观看视频1| 大码成人一级视频| 一区福利在线观看| 高清在线国产一区| av欧美777| 国产单亲对白刺激| 一a级毛片在线观看| 狂野欧美激情性xxxx| 国产男靠女视频免费网站| 人人妻人人澡人人看| 好男人电影高清在线观看| 国产极品粉嫩免费观看在线| 精品人妻1区二区| 热99re8久久精品国产| 97碰自拍视频| 免费在线观看亚洲国产| 天天躁狠狠躁夜夜躁狠狠躁| 精品午夜福利视频在线观看一区| 一区二区日韩欧美中文字幕| 91大片在线观看| 丰满的人妻完整版| 亚洲成a人片在线一区二区| 新久久久久国产一级毛片| x7x7x7水蜜桃| 国产高清视频在线播放一区| 欧美日韩福利视频一区二区| av天堂在线播放| 国产麻豆69| 国产av在哪里看| 亚洲免费av在线视频| 女人被躁到高潮嗷嗷叫费观| 免费在线观看亚洲国产| 搡老岳熟女国产| 国产亚洲欧美精品永久| 亚洲精品久久成人aⅴ小说| 丰满人妻熟妇乱又伦精品不卡| 免费av毛片视频| av天堂久久9| 男女床上黄色一级片免费看| 麻豆一二三区av精品| 国产一区二区激情短视频| 久久久久久久久中文| 精品久久久久久久毛片微露脸| 精品久久久精品久久久| 日韩av在线大香蕉| 亚洲成人免费电影在线观看| 久99久视频精品免费| 神马国产精品三级电影在线观看 | 精品国产美女av久久久久小说| 久久影院123| 99国产精品免费福利视频| av国产精品久久久久影院| 欧美日韩中文字幕国产精品一区二区三区 | 欧美另类亚洲清纯唯美| 亚洲精品一二三| 老司机福利观看| 国产又爽黄色视频| 国产人伦9x9x在线观看| 欧美日本中文国产一区发布| 咕卡用的链子| 欧美在线一区亚洲| 亚洲中文字幕日韩| 欧美日韩一级在线毛片| 色在线成人网| 欧洲精品卡2卡3卡4卡5卡区| 99精品欧美一区二区三区四区| 人人澡人人妻人| 国产精品九九99| 可以在线观看毛片的网站| 成年人免费黄色播放视频| 国产激情欧美一区二区| 90打野战视频偷拍视频| 美国免费a级毛片| 精品国产乱码久久久久久男人| 国产成+人综合+亚洲专区| 国产精品自产拍在线观看55亚洲| 美国免费a级毛片| 大陆偷拍与自拍| 亚洲国产欧美网| 大陆偷拍与自拍| 亚洲一区二区三区不卡视频| 免费观看人在逋| 亚洲va日本ⅴa欧美va伊人久久| 男人舔女人下体高潮全视频| 大码成人一级视频| 久久狼人影院| 亚洲精品国产色婷婷电影| 国产av一区二区精品久久| 日韩欧美在线二视频| 精品久久久久久,| 成年女人毛片免费观看观看9| 国产又爽黄色视频| 日本三级黄在线观看| 久久精品aⅴ一区二区三区四区| 欧美一级毛片孕妇| 精品一品国产午夜福利视频| 中文字幕最新亚洲高清| 日韩欧美三级三区| 一级毛片高清免费大全| 黑丝袜美女国产一区| 香蕉久久夜色| 黄频高清免费视频| 欧美国产精品va在线观看不卡| 日韩av在线大香蕉| 久久香蕉精品热| 如日韩欧美国产精品一区二区三区| 亚洲国产欧美日韩在线播放| 久久这里只有精品19| 亚洲美女黄片视频| 午夜久久久在线观看| 男女做爰动态图高潮gif福利片 | 亚洲avbb在线观看| 宅男免费午夜| 亚洲精品av麻豆狂野| 琪琪午夜伦伦电影理论片6080| 9色porny在线观看| 久久精品国产亚洲av香蕉五月| 免费久久久久久久精品成人欧美视频| 91麻豆精品激情在线观看国产 | 日韩免费av在线播放| 视频区图区小说| 亚洲国产精品999在线| 欧美成人免费av一区二区三区| 99re在线观看精品视频| 国产97色在线日韩免费| 女人被躁到高潮嗷嗷叫费观| 丝袜人妻中文字幕| 一区二区三区国产精品乱码| 国产精品香港三级国产av潘金莲| 免费在线观看亚洲国产| 日韩免费av在线播放| 视频在线观看一区二区三区| 国产1区2区3区精品| 久久狼人影院| 午夜老司机福利片| 美女国产高潮福利片在线看| 黑丝袜美女国产一区| 真人做人爱边吃奶动态| 国产成人福利小说| 老女人水多毛片| 丰满人妻一区二区三区视频av| 男女那种视频在线观看| 亚洲成人中文字幕在线播放| 极品教师在线视频| av国产免费在线观看| 国产成人欧美在线观看| 国产野战对白在线观看| 极品教师在线视频| 亚洲成人中文字幕在线播放| 精品久久久久久成人av| 亚洲综合色惰| 免费黄网站久久成人精品 | 蜜桃久久精品国产亚洲av| 国产精品av视频在线免费观看| 日韩欧美在线二视频| 一a级毛片在线观看| 99久久精品国产亚洲精品| 日韩欧美精品v在线| 亚洲男人的天堂狠狠| 国产三级在线视频| 国产精品久久久久久久久免 | 97热精品久久久久久| 欧美日韩综合久久久久久 | 91久久精品国产一区二区成人| 看黄色毛片网站| 舔av片在线| 亚洲欧美日韩高清在线视频| 国产精品,欧美在线| 国产成人啪精品午夜网站| 一进一出好大好爽视频| 十八禁国产超污无遮挡网站| 国产不卡一卡二| av黄色大香蕉| 国内揄拍国产精品人妻在线| 丰满人妻熟妇乱又伦精品不卡| 97超视频在线观看视频| 国产成人a区在线观看| АⅤ资源中文在线天堂| 日韩大尺度精品在线看网址| 少妇的逼好多水| 搡老熟女国产l中国老女人| 日韩欧美免费精品| 9191精品国产免费久久| 欧美性感艳星| 在线十欧美十亚洲十日本专区| 日韩欧美三级三区| 啦啦啦韩国在线观看视频| 中文字幕熟女人妻在线| 欧美乱色亚洲激情| 国产国拍精品亚洲av在线观看| 十八禁国产超污无遮挡网站| 九色成人免费人妻av| 窝窝影院91人妻| 国产精品女同一区二区软件 | h日本视频在线播放| 欧美成人一区二区免费高清观看| av福利片在线观看| 午夜老司机福利剧场| 精品国产亚洲在线| 男女视频在线观看网站免费| 成人特级黄色片久久久久久久| 国产淫片久久久久久久久 | 一个人观看的视频www高清免费观看| 亚洲欧美日韩东京热| 一边摸一边抽搐一进一小说| 午夜福利在线观看免费完整高清在 | 真人一进一出gif抽搐免费| 午夜福利高清视频| 国产亚洲欧美98| 国产三级在线视频| 成人亚洲精品av一区二区| 宅男免费午夜| 亚洲av中文字字幕乱码综合| 国产黄色小视频在线观看| 免费无遮挡裸体视频| 美女cb高潮喷水在线观看| 此物有八面人人有两片| 成人鲁丝片一二三区免费| 五月伊人婷婷丁香| 黄色丝袜av网址大全| 亚洲av成人av| 91在线观看av| 超碰av人人做人人爽久久| 老熟妇乱子伦视频在线观看| 最近在线观看免费完整版| 亚洲精品一区av在线观看| 亚洲精品影视一区二区三区av| .国产精品久久| 精品一区二区三区视频在线| av中文乱码字幕在线| 国产单亲对白刺激| 亚洲片人在线观看| 乱码一卡2卡4卡精品| 波多野结衣高清作品| 亚洲一区二区三区不卡视频| 色精品久久人妻99蜜桃| 国产精品一区二区性色av| 18禁黄网站禁片午夜丰满| 日韩成人在线观看一区二区三区| 亚洲精品乱码久久久v下载方式| 国产伦精品一区二区三区视频9| 国产高清三级在线| 久久久久久久久大av| 日日夜夜操网爽| 欧美性猛交╳xxx乱大交人| 网址你懂的国产日韩在线| 亚洲精品久久国产高清桃花| ponron亚洲| 成年免费大片在线观看| 他把我摸到了高潮在线观看| 欧美一级a爱片免费观看看| 久久久精品欧美日韩精品| 国产精品98久久久久久宅男小说| 久久久色成人| 精品人妻视频免费看|