微服務(wù)的架構(gòu)設(shè)計(jì)
首先,當(dāng)我們將一個(gè)復(fù)雜的系統(tǒng)的各種業(yè)務(wù)仔細(xì)清點(diǎn)到臺(tái)面上以后,得到的列表往往會(huì)比許多人最初想象得長(zhǎng)得多,它能提醒我們系統(tǒng)的復(fù)雜度是否已經(jīng)過(guò)高了。其次,列舉業(yè)務(wù)的過(guò)程也是開(kāi)發(fā)者與業(yè)務(wù)人員溝通的過(guò)程,來(lái)自不同業(yè)務(wù)線(xiàn)的代表也許會(huì)為某部分業(yè)務(wù)的價(jià)值點(diǎn)發(fā)生爭(zhēng)執(zhí),或是提供一些許多開(kāi)發(fā)人員此前并不了解的細(xì)節(jié)信息,將這些問(wèn)題當(dāng)面討論清楚并非什么壞事。此外,當(dāng)我們真的去仔細(xì)思考一個(gè)業(yè)務(wù)系統(tǒng)的核心價(jià)值時(shí),也許會(huì)得出使人意想不到的結(jié)果。
繼續(xù)舉例子,在汽車(chē)的銷(xiāo)售和售后平臺(tái)中,通過(guò)業(yè)務(wù)建模,可以劃分出許多子領(lǐng)域:
• 在線(xiàn)購(gòu)車(chē)(渠道A)
• 在線(xiàn)購(gòu)車(chē)(渠道B)
• 在線(xiàn)購(gòu)車(chē)(渠道C)
• 試駕預(yù)約
• 售后服務(wù)
• 用戶(hù)反饋
• 訂單系統(tǒng)
• 促銷(xiāo)活動(dòng)
• 車(chē)輛市價(jià)信息
• 車(chē)輛參數(shù)信息
• 4s店信息
• 用戶(hù)信息管理
• …
說(shuō)明:這里渠道指的是銷(xiāo)售平臺(tái)對(duì)接的一個(gè)第三方系統(tǒng),其中每個(gè)渠道可以對(duì)應(yīng)多個(gè)汽車(chē)品牌
然后我們要從中識(shí)別出業(yè)務(wù)中的核心域。必須強(qiáng)調(diào),服務(wù)領(lǐng)域劃分僅僅是代表服務(wù)對(duì)系統(tǒng)關(guān)鍵業(yè)務(wù)貢獻(xiàn)的價(jià)值,處于核心域中的那些服務(wù)應(yīng)該是該系統(tǒng)業(yè)務(wù)成功的主要促成因素,從戰(zhàn)略層面講,企業(yè)應(yīng)該在自己的核心領(lǐng)域上具有一定壁壘優(yōu)勢(shì)。經(jīng)過(guò)討論,開(kāi)發(fā)者和業(yè)務(wù)人員最終得出讓人大跌眼鏡的結(jié)論,核心域部分的服務(wù)只有“試駕預(yù)約”和“售后服務(wù)”,因?yàn)檫@兩項(xiàng)才是該企業(yè)最具競(jìng)爭(zhēng)力的業(yè)務(wù)。而看起來(lái)十分重要的“在線(xiàn)購(gòu)車(chē)”服務(wù),由于并不具有特別的行業(yè)競(jìng)爭(zhēng)優(yōu)勢(shì)而被劃到了支撐子域中。正確的服務(wù)劃分定位將對(duì)系統(tǒng)未來(lái)的發(fā)展策略產(chǎn)生積極的影響。
在這個(gè)系統(tǒng)中的“車(chē)輛市價(jià)信息”、“車(chē)輛參數(shù)信息”、“4s店信息”等服務(wù)都被劃歸到了通用子域。在通用子域中的服務(wù)并非最沒(méi)有價(jià)值或是復(fù)雜度最低,而只是說(shuō)明系統(tǒng)在這些服務(wù)領(lǐng)域中通常不具優(yōu)勢(shì),因此這部分功能完全可以考慮外包開(kāi)發(fā)或者購(gòu)買(mǎi)第三方的現(xiàn)成服務(wù)。
使用符合業(yè)務(wù)結(jié)構(gòu)的API
前面介紹業(yè)務(wù)建模的時(shí)候我們強(qiáng)調(diào)了使用“API集成”的必要性,以及它的反面形式“數(shù)據(jù)庫(kù)集成”所帶來(lái)的問(wèn)題。在微服務(wù)的架構(gòu)中,服務(wù)的技術(shù)選型可能是異構(gòu)的,API的實(shí)現(xiàn)也會(huì)各有不同。除了Web應(yīng)用比較流行的RESTful標(biāo)準(zhǔn),還有像SOAP、ProtolBuf、MessageQueue等不同的協(xié)議與格式標(biāo)準(zhǔn),它們都可以被作為服務(wù)之間通信的API。不同的API設(shè)計(jì)對(duì)服務(wù)使用的體驗(yàn)差別會(huì)很大,除去技術(shù)原因?qū)PI協(xié)議的傾向性,在設(shè)計(jì)和評(píng)價(jià)API方面依然有許多值得注意的地方。
一個(gè)好的API設(shè)計(jì)應(yīng)該在接口的元數(shù)據(jù)中向用戶(hù)提供盡可能多的有意義的業(yè)務(wù)信息,這里指的元數(shù)據(jù)包括例如API的名稱(chēng)、參數(shù)、標(biāo)簽等等用戶(hù)在不需要專(zhuān)門(mén)查看文檔就可以看到的內(nèi)容。通常在各種不同的API協(xié)議里,總會(huì)存在一個(gè)相似的概念,就是目標(biāo)路徑。比如RESTful的URL地址,ProtolBuf的消息類(lèi)型嵌套結(jié)構(gòu),MessageQueue名稱(chēng)里用斜線(xiàn)劃分Topic路徑的慣例等。以RESTful標(biāo)準(zhǔn)為例,可以試比較下面兩種URL地址的差異。
• 第一種:/users/123/orders/123
• 第二種:/orders?id=123&user_id=123
顯然前一種地址包含的信息更多,它告訴了訪(fǎng)問(wèn)者訂單(orders)是屬于用戶(hù)(users)這個(gè)實(shí)體中的一個(gè)子實(shí)體,并且包含了一個(gè)潛在業(yè)務(wù)規(guī)則,即如果ID為123的這個(gè)用戶(hù)不存在了,那么查詢(xún)他下面的所有訂單信息也是不具有業(yè)務(wù)意義的。實(shí)體之間的嵌套關(guān)系可以通過(guò)領(lǐng)域建模過(guò)程中的聚合識(shí)別。當(dāng)然,這種URL結(jié)構(gòu)有時(shí)會(huì)導(dǎo)致很長(zhǎng)的API路徑,但相比它所帶來(lái)的業(yè)務(wù)語(yǔ)義,我們認(rèn)為還是值得的。
類(lèi)似的語(yǔ)義化例子還有例如:
• PUT /services/questions/123
• PUT /services/questions/123/comments/123
這是售后服務(wù)部分的兩個(gè)API,分別用來(lái)更新提問(wèn)的內(nèi)容和提問(wèn)的評(píng)論內(nèi)容,它們也是按層級(jí)組織的。
有些通信協(xié)議中還提供了其他可以表明業(yè)務(wù)語(yǔ)義的元素。比如RESTful中使用GET/POST/PUT操作語(yǔ)義(查詢(xún)/創(chuàng)建/修改),以及HTTP返回值中的語(yǔ)義信息等。在實(shí)際設(shè)計(jì)API時(shí)充分利用這些協(xié)議特性,能夠使服務(wù)變得更加易用。
【微服務(wù)的架構(gòu)設(shè)計(jì)】相關(guān)文章:
1.三層架構(gòu)用戶(hù)服務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
2.ARCH思科網(wǎng)絡(luò)服務(wù)架構(gòu)設(shè)計(jì)考試主要內(nèi)容
3.旅游管理系統(tǒng)功能架構(gòu)的設(shè)計(jì)
4.系統(tǒng)架構(gòu)設(shè)計(jì)模式大全
5.ui設(shè)計(jì)師知識(shí)架構(gòu)
6.適用高性能微服務(wù)架構(gòu)的開(kāi)源項(xiàng)目