日本久久99,色婷婷我要去我去也97,久久久久人妻精品一区三寸蜜桃,91人妻在线超碰,亚洲欧洲综合av在线

實(shí)施微服務(wù)架構(gòu)的關(guān)鍵技術(shù)
什么是“小的微服務(wù)”?可能每個(gè)人的理解都不一樣,大家都應(yīng)該都知道SOA架構(gòu),SOA架構(gòu)的粒度是比較粗的,到底我們應(yīng)該以什么樣的粒度拆分微服務(wù)?我認(rèn)為,微服務(wù)架構(gòu)本質(zhì)上一個(gè)業(yè)務(wù)架構(gòu),那么對業(yè)務(wù)了解的越深刻,你的微服務(wù)拆分就越合理。
作者:CSDN云計(jì)算
來源:CSDN云計(jì)算
2017-07-17 09:29:30

大家都在提微服務(wù)架構(gòu),微服務(wù)架構(gòu)到底是什么?它有哪些特點(diǎn)和設(shè)計(jì)模式?我們在打造微服務(wù)架構(gòu)過程中,這些設(shè)計(jì)模式在實(shí)戰(zhàn)當(dāng)中如何應(yīng)用?數(shù)據(jù)的一致性應(yīng)該如何保證?今天我將針對上述疑問分享一下我的思考。

微服務(wù)架構(gòu)特點(diǎn)

什么是微服務(wù)架構(gòu)?看下圖的這段英文,這是Martin Fowler 在2014年提出來的,微服務(wù)架構(gòu)是一種架構(gòu)模式,既然是架構(gòu)模式,那么,它就必然需要滿足一些特點(diǎn)。他提到,微服務(wù)架構(gòu)是一系列小的微服務(wù)構(gòu)成的組合,那么,什么是“小的微服務(wù)”?可能每個(gè)人的理解都不一樣,大家都應(yīng)該都知道SOA架構(gòu),SOA架構(gòu)的粒度是比較粗的,到底我們應(yīng)該以什么樣的粒度拆分微服務(wù)?我認(rèn)為,微服務(wù)架構(gòu)本質(zhì)上一個(gè)業(yè)務(wù)架構(gòu),那么對業(yè)務(wù)了解的越深刻,你的微服務(wù)拆分就越合理。

云技術(shù)1

比如我們做二手交易平臺(tái)(轉(zhuǎn)轉(zhuǎn)),該平臺(tái)包括用戶體系、商品體系、交易體系以及搜索推薦體系。因?yàn)楦鱾€(gè)體系比較獨(dú)立,那么我們就可以按照各個(gè)業(yè)務(wù)模塊來拆分微服務(wù)。當(dāng)然,這樣做還不夠,因?yàn)槟愕纳唐防锩孢€有很多功能,但是大的思路是按照具體商品內(nèi)部的邏輯來進(jìn)一步拆分。

第二,圍繞具體業(yè)務(wù)建模。一切脫離業(yè)務(wù)場景談微服務(wù)架構(gòu)都是耍流氓。

方法有二:首先將某一領(lǐng)域的模型作為獨(dú)立的業(yè)務(wù)單元:比如二手交易中的商品、訂單、用戶等;其次將業(yè)務(wù)的行為作為獨(dú)立的業(yè)務(wù)單元:比如發(fā)送郵件、單點(diǎn)登錄驗(yàn)證、push服務(wù)。

第三,整個(gè)微服務(wù)都可以獨(dú)立地部署,因?yàn)槊恳粋€(gè)維服務(wù)Process都是獨(dú)立的,所以按照每個(gè)模塊進(jìn)行獨(dú)立的部署也是很容易理解的。

第四,去中心化管理。打造去中心化管理意思就是微服務(wù)的每個(gè)模塊和開發(fā)語言、運(yùn)行平臺(tái)沒有關(guān)系,開發(fā)語言可以是C++,可以是go,也可以是世界上最好的語言,運(yùn)行的平臺(tái)是Linux,Unix、Windows等都可以。

最后一點(diǎn)就是輕量級通信,這點(diǎn)很容易理解,通信和模塊語言、平臺(tái)沒有關(guān)系。盡可能選用輕量級的通信來做這個(gè)事情,這樣實(shí)施跨平臺(tái)、跨語言的時(shí)候就很容易。

講完這些特點(diǎn),我們可以看一看一個(gè)標(biāo)準(zhǔn)DEMO級的微服務(wù)架構(gòu)到底是由哪些元素組成的?如下圖,主要包括網(wǎng)關(guān)、微服務(wù)、數(shù)據(jù)存儲(chǔ)、注冊中心、配置中心。

云技術(shù)2

既然是DEMO級的,和實(shí)際情況下相比肯定有所差別。那么,實(shí)際案例中,我們到底應(yīng)該如何做這件事情?這個(gè)例子也是最近我在做的二手交易平臺(tái)——轉(zhuǎn)轉(zhuǎn)。這里和DEMO有些不一樣的地方。前面的第一層還是網(wǎng)關(guān),下面有微服務(wù)的聚合層,作用是做各種業(yè)務(wù)邏輯的處理;聚合層下面是我們的數(shù)據(jù)原子層,主要做數(shù)據(jù)訪問代理,只不過根據(jù)業(yè)務(wù)的不同垂直分開了??梢钥吹剑W(wǎng)關(guān)、數(shù)據(jù)層,注冊中心、配置中心都有,只不過在業(yè)務(wù)處理部分分成兩層:一層是原子層,也就是整個(gè)數(shù)據(jù)訪問的代理層,提供了用戶的接口;另外一層就是上層的業(yè)務(wù)聚合層。

云技術(shù)3

架構(gòu)設(shè)計(jì)模式及實(shí)踐案例

上面我大概講了下微服務(wù)的一些特點(diǎn)以及DEMO級的微服務(wù)包括哪些部分以及實(shí)際案例中我們的設(shè)架構(gòu)設(shè)計(jì)模式。那么,我們?yōu)槭裁匆捎眠@種模式去做?除了這種架構(gòu)模式之外還有哪些其它的架構(gòu)模式?這里,模式還是非常多的,我會(huì)重點(diǎn)講這幾點(diǎn):鏈?zhǔn)皆O(shè)計(jì)模式、聚合器設(shè)計(jì)模式和異步共享模式。

首先我們來說下鏈?zhǔn)皆O(shè)計(jì)模式,在這種模式下,APP前端請求首先要經(jīng)過網(wǎng)關(guān)層,接下來連續(xù)調(diào)用兩個(gè)微服務(wù),調(diào)了微服務(wù)1之后還要調(diào)微服務(wù)2。為什么叫做鏈?zhǔn)侥??因?yàn)樵谡{(diào)用過來以后先到微服務(wù)1,然后再同步地調(diào)用微服務(wù)2,微服務(wù)2會(huì)做一些處理,處理以后微服務(wù)2才會(huì)反饋給微服務(wù)1,微服務(wù)1再反饋給Gateway,最后反饋到APP。在實(shí)際業(yè)務(wù)場景中,涉及到交易和訂單的業(yè)務(wù)場景都會(huì)用到這種模式。

云技術(shù)4

接下來是聚合器設(shè)計(jì)模式,APP前端一個(gè)調(diào)用請求經(jīng)過Gateway,到達(dá)聚合層,需要調(diào)用三個(gè)微服務(wù),聚合層將三個(gè)微服務(wù)的返回結(jié)果做一些聚合處理,比如可以進(jìn)行一些排序或者去重,聚合之后再反饋到Gateway和APP前端,這是一個(gè)典型的聚合器設(shè)計(jì)模式。

云技術(shù)5

 

第三種模式是數(shù)據(jù)共享模式,這種模式相對比較簡單,比如APP經(jīng)過微服務(wù)網(wǎng)關(guān),接下來調(diào)用微服務(wù)1和微服務(wù)2,理想情況下微服務(wù)1和微服務(wù)2都有自己獨(dú)立的DB,但是有些情況下由于微服務(wù)1和微服務(wù)2的請求量和存儲(chǔ)量較小,從資源利用率的角度來講,這兩個(gè)微服務(wù)的DB是共享的,因此這種就是數(shù)據(jù)的共享模式。

云技術(shù)6

最后一種是異步消息設(shè)計(jì)模式,不管是鏈?zhǔn)皆O(shè)計(jì)、聚合器模式還是共享數(shù)據(jù)模式,架構(gòu)模式都是同步模式。也就是說我的一個(gè)請求發(fā)出去必須等到每個(gè)環(huán)節(jié)都處理完才會(huì)給客戶端。如果請求不需要關(guān)注處理結(jié)果,這時(shí)候可以異步來實(shí)施。APP更新請求經(jīng)過微服務(wù)網(wǎng)關(guān),持久化到MQ,寫入MQ成功后馬上Response給APP客戶端,之后微服務(wù)根據(jù)需要從MQ里面訂閱更新消息進(jìn)行異步處理,我們?yōu)榱颂岣咄掏铝恳矔?huì)采用這種模式。

云技術(shù)7

我從百度到轉(zhuǎn)轉(zhuǎn)這幾年經(jīng)歷了很多業(yè)務(wù)場景,使用的無非就是聚合器、異步和數(shù)據(jù)共享的數(shù)據(jù)模式,特別是前面兩個(gè)用得特別多,下面我們來看一些例子。

接下來我們看個(gè)例子,這是我們在2015年做的一個(gè)二手交易平臺(tái)(轉(zhuǎn)轉(zhuǎn)),這個(gè)二手交易平臺(tái)包括商品、分類搜索、關(guān)鍵詞搜索、商品推薦等功能。一個(gè)用戶請求過來,先經(jīng)過網(wǎng)關(guān),網(wǎng)關(guān)下面就是我們的聚合層,聚合層再去調(diào)用商品、交易、推薦以及搜索相關(guān)的,最終在聚合層把各個(gè)微服務(wù)原子層的結(jié)果匯總起來Response給到客戶端。具體如下圖所示:

云技術(shù)8

 

異步消息模式的這個(gè)案例比較早了,當(dāng)時(shí)我們做了Feed 流,類似現(xiàn)在的微信朋友圈,這是我在百度做的事情。當(dāng)時(shí),我們采用的架構(gòu)模式是異步架構(gòu)模式。前面是我們的APP,經(jīng)過了網(wǎng)關(guān),到達(dá)異步提交層,可以認(rèn)為是持久化功能的MQ。用戶請求經(jīng)過網(wǎng)關(guān)到消息異步提交層后就返回了,業(yè)務(wù)處理部分從MQ里面讀取數(shù)據(jù)再進(jìn)行異步處理。這個(gè)時(shí)候吞吐量會(huì)增加,但是會(huì)帶來一定的困惑。比如這個(gè)時(shí)候我發(fā)了一條Feed,用戶再一查就直接到數(shù)據(jù)庫里面查,可能異步提交消息隊(duì)列有延遲,查不到,用戶就困惑了,這個(gè)問題怎么解決?我們就想能不能在前端幫我們做一些事情?比如提交了MQ返回Response 200以后,前段配合插入這條Feed。用戶再次刷新時(shí)候我相信已經(jīng)是好幾秒以后的事情了,即使有延遲,這個(gè)消息早就被你的業(yè)務(wù)處理完了。當(dāng)然,我們這里是有特定場景的,社區(qū)時(shí)候可以這樣去做,但是涉及到和金融相關(guān)的場景肯定不會(huì)這么去做。

云技術(shù)9

數(shù)據(jù)一致性實(shí)踐

微服務(wù)模塊比較分散、數(shù)據(jù)也比較分散,整個(gè)系統(tǒng)復(fù)雜性非常高,如何進(jìn)行數(shù)據(jù)一致性實(shí)踐?在一個(gè)單體模塊里面可以做Local Transaction,但是在微服務(wù)體系里面就不奏效。雖然難解決,但是不能不解決,不解決的話微服務(wù)架構(gòu)就很難實(shí)施。我們知道微服務(wù)中做強(qiáng)一致性性的事情是非常難的,今天分享的更多的是解決最終一致性。因?yàn)樵谖⒎?wù)下基于不同的數(shù)據(jù)庫,Local Transaction是不可用的。大家在在分布式事務(wù)里面一定聽說過兩階段提交和三階段提交,這種場景其實(shí)在微服務(wù)架構(gòu)里面也行不通,原因是因?yàn)樗举|(zhì)上是同步的模式,同步的模式之下做數(shù)據(jù)一致性吞吐量降低的非常多。

我們的業(yè)務(wù)場景無非是兩種:第一種是異步調(diào)用,就是一個(gè)請求過來就寫到消息隊(duì)列里面就行,這種模式相對簡單。今天主要講下同步調(diào)用的場景之下怎么打造數(shù)據(jù)的最終一致性。既然是同步調(diào)用場景,并且不能降低業(yè)務(wù)系統(tǒng)的吞吐量,那么應(yīng)該怎么做呢?建立一個(gè)異步的分布式事務(wù),業(yè)務(wù)調(diào)用失敗后,通過異步方式來補(bǔ)償業(yè)務(wù)。我們的想法是能不能在整個(gè)業(yè)務(wù)邏輯層實(shí)現(xiàn)分布式事務(wù)語義策略?如何實(shí)現(xiàn),無非有兩種,第一是在調(diào)正常請求的時(shí)候要記錄業(yè)務(wù)調(diào)用鏈(調(diào)用正常接口的完整參數(shù)),第二是異常時(shí)沿調(diào)用鏈反向補(bǔ)償。

基于這個(gè)思路,我們架構(gòu)設(shè)計(jì)上的關(guān)鍵點(diǎn)有三,第一是基于補(bǔ)償機(jī)制,第二是記錄調(diào)用鏈,第三是提供冪等補(bǔ)償接口。架構(gòu)層面,看下圖,右邊是聚合器架構(gòu)設(shè)計(jì)模式,左邊是異步補(bǔ)償服務(wù)。

云技術(shù)10

首先需要在聚合層引入一個(gè)Proxy。首先基于方法,在方法名加注解標(biāo)注補(bǔ)償方法名,比如:- @Compensable(cancelMethod=“cancelRecord”)

另外,聚合層在調(diào)用原子層之前,通過代理記錄當(dāng)前調(diào)用請求參數(shù)。如果業(yè)務(wù)正常,調(diào)用結(jié)束后,當(dāng)前方法的調(diào)用記錄存檔或刪除,如果業(yè)務(wù)異常,查詢調(diào)用鏈回滾。

原子層我們做了哪些事情呢?主要是兩方面,第一是提供正常的原子接口,其次是提供補(bǔ)償冪等接口。

云技術(shù)11

分布式事務(wù)關(guān)鍵是兩個(gè)表(如上圖),第一是事務(wù)組表,假設(shè)A->B->C三個(gè)請求是一個(gè)事務(wù),首先針對ABC生成一個(gè)事務(wù)的ID,寫在這個(gè)表里面,并且會(huì)記錄這個(gè)事務(wù)的狀態(tài),默認(rèn)的情況下正常的,執(zhí)行失敗以后我們再把狀態(tài)由1(正常)變成2(異常);第二個(gè)表是事務(wù)調(diào)用組表,主要記錄事務(wù)組內(nèi)的每一次調(diào)用以及相關(guān)參數(shù),所以調(diào)用原子層之前需要記錄一下請求參數(shù)。如果失敗的話我們需要把這個(gè)事務(wù)的狀態(tài)由1變成2;第三,一旦狀態(tài)從1變成2就執(zhí)行補(bǔ)償服務(wù)。這是我們的補(bǔ)償邏輯,就是不斷地掃描這個(gè)事務(wù)所處的表,比如一秒鐘掃一次事務(wù)組表,看一看這個(gè)表里面有沒有狀態(tài)為2的,需要執(zhí)行補(bǔ)償?shù)姆?wù)。這個(gè)思路對業(yè)務(wù)的侵入比較小。

具體看下我們實(shí)際的例子,比如二手交易平臺(tái)里面創(chuàng)建訂單事務(wù)組的正常流程,從鎖庫存到減紅包再到創(chuàng)建訂單,創(chuàng)建事務(wù)組完畢之后開始調(diào)用業(yè)務(wù),首先Proxy記錄鎖庫存調(diào)用的參數(shù),之后開始鎖庫存服務(wù)調(diào)用,成功后之后又開始減紅包和創(chuàng)建訂單過程,如果都成功了直接返回。

云技術(shù)12

再看一下異常的流程,前面幾步都是一樣的,只是在調(diào)紅包服務(wù)、Proxy創(chuàng)建紅包的時(shí)候如果失敗了就會(huì)拋出異常,業(yè)務(wù)正常返回,聚合層Proxy需要把事務(wù)組的狀態(tài)由1改成2,這個(gè)時(shí)候由左邊的補(bǔ)償服務(wù)異步地補(bǔ)償調(diào)用。

云技術(shù)13

關(guān)注中國IDC圈官方微信:idc-quan或微信號:821496803 我們將定期推送IDC產(chǎn)業(yè)最新資訊

查看心情排行你看到此篇文章的感受是:


  • 支持

  • 高興

  • 震驚

  • 憤怒

  • 無聊

  • 無奈

  • 謊言

  • 槍稿

  • 不解

  • 標(biāo)題黨
2022-06-15 10:09:03
云安全 國際數(shù)據(jù)公司:中國政務(wù)云云安全面臨多重挑戰(zhàn)
云安全廠商提升政務(wù)云安全能力,需要從技術(shù)和服務(wù)兩方面齊頭并進(jìn):在技術(shù)上,構(gòu)建安全組件服務(wù)化、數(shù)據(jù)安全及云原生安全能力;在服務(wù)上,發(fā)展多云安全運(yùn)營、主動(dòng)安全防護(hù)、 <詳情>
2022-02-07 11:17:58
云資訊 云原生基礎(chǔ)設(shè)施監(jiān)控要有效,得走好這七步
數(shù)字企業(yè)繼續(xù)改造和發(fā)展其IT基礎(chǔ)設(shè)施,以增強(qiáng)與業(yè)務(wù)目標(biāo)的一致性。數(shù)字服務(wù)中斷可能會(huì)損害銷售、收入和公司聲譽(yù),因此團(tuán)隊(duì)面臨著最大限度提高整個(gè)堆棧的彈性和正常運(yùn)行時(shí)間 <詳情>
2021-11-18 11:06:49
2021-08-03 11:35:31
云技術(shù) 關(guān)于混合云成功 企業(yè)需要忘記的5件事和需要記住的4件事
行業(yè)專家表示,大多數(shù)云計(jì)算應(yīng)用程序都是可以節(jié)省成本的商業(yè)案例,然而令人擔(dān)憂的問題也有很多。如果企業(yè)希望獲得成功,可以采用一些有效的策略,例如五個(gè)需要“忘記”和四 <詳情>
2021-06-30 09:32:37
云技術(shù) 云架構(gòu)的五項(xiàng)關(guān)鍵技術(shù)
數(shù)據(jù)中心過去充斥著來自不同制造商和管理工具的網(wǎng)絡(luò)設(shè)備、服務(wù)器和存儲(chǔ)器的應(yīng)用。但是支持這一基礎(chǔ)設(shè)施需要專家操作,擴(kuò)大和縮小計(jì)算能力都不是容易的。 <詳情>
2021-06-28 09:59:20
云技術(shù) 云計(jì)算架構(gòu):五個(gè)常見錯(cuò)誤要避免
盡管,構(gòu)建云計(jì)算架構(gòu)的過程很漫長,但我們還是應(yīng)該注意以下5個(gè)錯(cuò)誤。 <詳情>
2021-05-07 08:52:32
云資訊 2025年云技術(shù)使用率將達(dá)100% 如何解決上云安全?
全球權(quán)威市場研究機(jī)構(gòu)IDC調(diào)查報(bào)告顯示,在過去18個(gè)月中,近80%的公司至少經(jīng)歷了一次云數(shù)據(jù)泄露,而43%的公司報(bào)告了10次或更多泄露。 <詳情>
2021-03-31 10:15:45
云資訊 云計(jì)算失敗往事
沒落幾乎是這個(gè)行業(yè)里小玩家的宿命。 <詳情>
2021-03-03 15:40:20
云資訊 云技術(shù)將推動(dòng)金融行業(yè)的巨大變革
超過一半的受訪企業(yè)表示,正在加大對混合云服務(wù)的投入,并構(gòu)建超融合基礎(chǔ)架構(gòu)(HCI),以降低云技術(shù)的部署和擴(kuò)展難度。 <詳情>
2021-02-25 09:32:00
云技術(shù) 云計(jì)算是否適合你的商業(yè)模式
云計(jì)算描述了一個(gè)基于互聯(lián)網(wǎng)協(xié)議,為IT服務(wù)的新補(bǔ)充,消費(fèi),和交付模式,它通常涉及到提供動(dòng)態(tài)可擴(kuò)展性和虛擬化資源配置 <詳情>

CSDN云計(jì)算

閱讀量
閱讀排行榜