摘要:那我們?cè)鯓硬拍苓_(dá)成這一目標(biāo)呢下面舉個(gè)例子說(shuō)明我們發(fā)現(xiàn)單體中的具有高度相似的功能,經(jīng)過(guò)初步研究發(fā)現(xiàn)可以抽取出一個(gè)公共服務(wù),于是馬上安排人員開(kāi)發(fā),然后上線遷移。
博客地址
在單體到微服務(wù)架構(gòu)的遷移過(guò)程中,我們經(jīng)常會(huì)問(wèn)一個(gè)問(wèn)題:在什么情況下我需要從單體中剝離一部分出來(lái)將其作為一個(gè)微服務(wù)?答案有很多,其中有一個(gè)答案就是:我發(fā)現(xiàn)好多單體都有相似的功能,我覺(jué)得可以把它抽出來(lái)做一個(gè)公共服務(wù)。
那么何為公共服務(wù)?公共服務(wù)就是那些專(zhuān)門(mén)為其他服務(wù)提供服務(wù)的服務(wù),它的業(yè)務(wù)具有高度普適性和可復(fù)用性。比如用戶服務(wù)、訂單服務(wù)就是這樣一類(lèi)服務(wù)。
那我們?cè)鯓硬拍苓_(dá)成這一目標(biāo)呢?下面舉個(gè)例子說(shuō)明:
我們發(fā)現(xiàn)單體A、B、C中的具有高度相似的功能F,經(jīng)過(guò)初步研究發(fā)現(xiàn)可以抽取出一個(gè)公共服務(wù)P,于是馬上安排人員開(kāi)發(fā),然后上線、遷移。
一切似乎會(huì)很順利,但是等等,這里有太多風(fēng)險(xiǎn)和未經(jīng)驗(yàn)證的東西。那我們應(yīng)該怎么做?
第一步:識(shí)別不兼容
我們需要深入到單體A、B、C的功能F的細(xì)節(jié)中去考察,雖然功能F在各個(gè)單體中的看起來(lái)差不多,但是細(xì)節(jié)是魔鬼。
畢竟這三個(gè)單體是獨(dú)立演進(jìn)的,如果深入細(xì)節(jié),就會(huì)發(fā)現(xiàn)AF、BF、CF總有一些不兼容的地方,具體表現(xiàn)形式可以是數(shù)據(jù)schema不一致、接口不一致,還有更糟糕的——部分業(yè)務(wù)邏輯不一致。
這些不兼容如果一開(kāi)始不識(shí)別出來(lái),那最有可能的結(jié)果是開(kāi)發(fā)人員從單體A中抽取功能F開(kāi)發(fā)公共服務(wù)P,結(jié)果公共服務(wù)P只能給單體A使用,單體B、C完全無(wú)法使用。
第二步:設(shè)計(jì)并導(dǎo)入概念
識(shí)別出了不兼容,那么我們就需要作出一套兼容單體A、B、C的功能F的設(shè)計(jì),在設(shè)計(jì)過(guò)程中我們需要和單體A、B、C的產(chǎn)品經(jīng)理、需求設(shè)計(jì)人員、開(kāi)發(fā)人員做詳盡的溝通。
做這些溝通最主要的目的就是將新的功能F的設(shè)計(jì)導(dǎo)入到相關(guān)人員的腦中,即所謂的概念導(dǎo)入。
概念導(dǎo)入是非常重要的一步,道理很簡(jiǎn)單,如果大家對(duì)同一件事情的認(rèn)知是一樣的,那么這件事情就好辦了,否則在推行過(guò)程中很可能出現(xiàn)不可預(yù)料的阻力。
第三步:開(kāi)發(fā)類(lèi)庫(kù)
好了,咱們?cè)O(shè)計(jì)也做了,思想也統(tǒng)一了,為什么不直接開(kāi)始開(kāi)發(fā)服務(wù)P呢?這是因?yàn)殡m然我們?cè)诘诙揭呀?jīng)統(tǒng)一了思想,但是在真正落地的時(shí)候很可能還會(huì)存在意想不到的困難。
因此我們要把這些困難在早期趟平,用的辦法就是提供功能F的公共類(lèi)庫(kù),將其替換掉原來(lái)單體A、B、C中的代碼。
這一工作完成后我能能夠得到的成果有:
設(shè)計(jì)、概念層面形成了統(tǒng)一
表、實(shí)體結(jié)構(gòu)形成了統(tǒng)一
接口形成了統(tǒng)一
代碼層面的復(fù)用
也就是說(shuō),我們做到了表里一致,有了這個(gè)基礎(chǔ),開(kāi)發(fā)公共服務(wù)P才有了真正堅(jiān)實(shí)的基礎(chǔ)。
第四步:微服務(wù)架構(gòu)設(shè)計(jì)
公共類(lèi)庫(kù)的思路畢竟還是單體應(yīng)用的思路,只是做到了代碼層面的復(fù)用。當(dāng)你要做公共服務(wù)P的時(shí)候就需要額外考慮一些額外的設(shè)計(jì),比如:
Client的認(rèn)證模式。不認(rèn)證、OAuth 2.0,如果用OAuth 2.0那么用哪種Grant type?
通信協(xié)議。http、https、gRPC。
接口協(xié)議。RESTful、SOAP。
接口定義。Swagger、OpenAPI。
加密方式。TLS、對(duì)稱(chēng)加密。
是否涉及多租戶,如果涉及,那么還需要設(shè)計(jì)多租戶的業(yè)務(wù)、功能、數(shù)據(jù)schema。
考慮服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)等等。
彈性設(shè)計(jì)、容錯(cuò)設(shè)計(jì)、分布式事務(wù)等等。
運(yùn)維相關(guān)的日志采集、監(jiān)控指標(biāo)等等。
當(dāng)然以上這些并不是說(shuō)要一次性全部做到,可以一開(kāi)始只實(shí)現(xiàn)一部分,之后通過(guò)迭代不斷地完善。
第五步:遷移
好了,我們的公共服務(wù)P已經(jīng)上線了,那么如何從公共類(lèi)庫(kù)遷移到公共服務(wù)P呢?
其實(shí)到這一步就很簡(jiǎn)單了,在制作公共類(lèi)庫(kù)的時(shí)候我們應(yīng)該定義了良好的接口,并且提供了一套基于單體架構(gòu)的實(shí)現(xiàn)。
現(xiàn)在我們只需提供一套基于公共服務(wù)的實(shí)現(xiàn)然后替換上去就可以了。舉個(gè)例子,公共類(lèi)庫(kù)有一個(gè)接口叫做UserRepository,它有一個(gè)實(shí)現(xiàn)是查詢本地?cái)?shù)據(jù)庫(kù)的,我們只需提供另一個(gè)實(shí)現(xiàn)是查詢RESTful接口的就可以了。
當(dāng)然,這個(gè)查詢RESTful接口的實(shí)現(xiàn)最好也由公共服務(wù)P的開(kāi)發(fā)團(tuán)隊(duì)提供,這樣可以避免單體A、B、C開(kāi)發(fā)團(tuán)隊(duì)的重復(fù)勞動(dòng)。
第六步:沒(méi)有第六步
到此為止大功告成。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/11911.html
摘要:如果我們可以克服一些數(shù)據(jù)遷移的挑戰(zhàn),將一個(gè)數(shù)據(jù)倉(cāng)庫(kù)以及其數(shù)據(jù)分析工具從數(shù)據(jù)中心中的專(zhuān)用服務(wù)器轉(zhuǎn)移到基于云的文件系統(tǒng)和數(shù)據(jù)庫(kù)就可以解決這個(gè)問(wèn)題。數(shù)據(jù)遷移工具輔助向云端遷移從數(shù)據(jù)庫(kù)抽取數(shù)據(jù)很容易,從數(shù)據(jù)庫(kù)中有效挖掘大容量數(shù)據(jù)確是一項(xiàng)挑戰(zhàn)。 云計(jì)算和數(shù)據(jù)倉(cāng)庫(kù)是合理的一對(duì)。云存儲(chǔ)可以按需擴(kuò)展,云可以將大量服務(wù)器貢獻(xiàn)于某一具體任務(wù)。數(shù)據(jù)倉(cāng)庫(kù)通用功能是本地?cái)?shù)據(jù)分析工具,受到計(jì)算和存儲(chǔ) 資源的限制,同時(shí)也...
摘要:如果我們可以克服一些數(shù)據(jù)遷移的挑戰(zhàn),將一個(gè)數(shù)據(jù)倉(cāng)庫(kù)以及其數(shù)據(jù)分析工具從數(shù)據(jù)中心中的專(zhuān)用服務(wù)器轉(zhuǎn)移到基于云的文件系統(tǒng)和數(shù)據(jù)庫(kù)就可以解決這個(gè)問(wèn)題。數(shù)據(jù)遷移工具輔助向云端遷移從數(shù)據(jù)庫(kù)抽取數(shù)據(jù)很容易,從數(shù)據(jù)庫(kù)中有效挖掘大容量數(shù)據(jù)確是一項(xiàng)挑戰(zhàn)。 云計(jì)算和數(shù)據(jù)倉(cāng)庫(kù)是合理的一對(duì)。云存儲(chǔ)可以按需擴(kuò)展,云可以將大量服務(wù)器貢獻(xiàn)于某一具體任務(wù)。數(shù)據(jù)倉(cāng)庫(kù)通用功能是本地?cái)?shù)據(jù)分析工具,受到計(jì)算和存儲(chǔ)資源的限制,同時(shí)也受...
摘要:由服務(wù)器提供的響應(yīng)來(lái)自服務(wù)器響應(yīng)的狀態(tài)碼來(lái)自服務(wù)器響應(yīng)的狀態(tài)信息服務(wù)器響應(yīng)的頭是為請(qǐng)求提供的配置信息所以請(qǐng)求返回后,我們可以通過(guò)來(lái)獲取響應(yīng)情況。攔截器攔截器攔截器用于攔截發(fā)起的請(qǐng)求或用于攔截返回的響應(yīng)。目錄 上節(jié)內(nèi)容回顧 使用第三方組件庫(kù) 如何發(fā)起請(qǐng)求 請(qǐng)求錯(cuò)誤處理 請(qǐng)求帶參 ...
摘要:不過(guò),根據(jù)近期的一份調(diào)查問(wèn)卷表示,在所有的參與者之中,只有的組織對(duì)于他們的云遷移體驗(yàn)感到非常滿意。在本文中,我們將探索整個(gè)云遷移周期中的四個(gè)階段??梢钥隙ǖ氖?,云遷移是一項(xiàng)不會(huì)真正結(jié)束的任務(wù)。 軟件組織正在快速地實(shí)施云技術(shù),但遷移始終是一個(gè)無(wú)法回避的挑戰(zhàn)。哪些部分是需要你密切留意的?哪些應(yīng)用程序更適合于進(jìn)行遷移?如何對(duì)應(yīng)用程序進(jìn)行重構(gòu)以適用于云端?經(jīng)歷了這一轉(zhuǎn)變的先行者為我們留下了什么啟示?...
摘要:背景在一個(gè)數(shù)據(jù)庫(kù)中存在表與表,但兩個(gè)表按目前架構(gòu)邊界劃分的話,是屬于兩個(gè)組織下的兩個(gè)系統(tǒng),導(dǎo)致相互之間有穩(wěn)定性風(fēng)險(xiǎn)。為增強(qiáng)系統(tǒng)穩(wěn)定性,進(jìn)行存儲(chǔ)分離。準(zhǔn)備將表的所有數(shù)據(jù),遷移到新庫(kù)中。背景:? ? ?在一個(gè)數(shù)據(jù)庫(kù)中存在A表與B表,但AB兩個(gè)表按目前架構(gòu)邊界劃分的話,是屬于兩個(gè)組織下的兩個(gè)系統(tǒng),導(dǎo)致相互之間有穩(wěn)定性風(fēng)險(xiǎn)。為增強(qiáng)系統(tǒng)穩(wěn)定性,進(jìn)行存儲(chǔ)分離。準(zhǔn)備將B表的所有數(shù)據(jù),遷移到新庫(kù)中??赡艽嬖?..
閱讀 566·2023-04-26 02:59
閱讀 699·2023-04-25 16:02
閱讀 2167·2021-08-05 09:55
閱讀 3579·2019-08-30 15:55
閱讀 4676·2019-08-30 15:44
閱讀 1808·2019-08-30 13:02
閱讀 2205·2019-08-29 16:57
閱讀 2295·2019-08-26 13:35