微服務(wù)中的事件驅(qū)動(dòng)與請(qǐng)求驅(qū)動(dòng)(RESTful)架構(gòu)

“出租車(chē)”交互示例

讓我們仔細(xì)看看什么是 REST API。它基本上是一種交互模式瑞佩;系統(tǒng)可以相互交互的方式。

REST API 交互:

為了理解這兩種交互形式,讓我們考慮一個(gè)等效的現(xiàn)實(shí)生活用例潭千,即用戶從代理處訂購(gòu)出租車(chē)。

現(xiàn)在借尿,用戶問(wèn)這個(gè)問(wèn)題:“我的出租車(chē)什么時(shí)候到達(dá)刨晴?” 在 REST API 措辭中,請(qǐng)求的用戶是“消費(fèi)者”路翻,響應(yīng)的機(jī)構(gòu)或個(gè)人是“提供者”(又名“生產(chǎn)者”)

上面顯示的這種實(shí)時(shí)交互與REST API的工作方式完全匹配狈癞。它轉(zhuǎn)化為以下內(nèi)容:

現(xiàn)在讓我們換個(gè)問(wèn)題:“我的車(chē)準(zhǔn)備好了嗎?”

由于答案不是預(yù)期的茂契,消費(fèi)者將繼續(xù)直到他們最終收到預(yù)期的答案蝶桶。從人類的角度來(lái)看,這種情況是相當(dāng)重復(fù)和煩人的掉冶。

以上從消費(fèi)者到生產(chǎn)者的重復(fù)查詢集模仿了以下 API真竖。

REST API 限制

那么烫沙,這兩個(gè)例子有什么區(qū)別呢琳要?是時(shí)候了贮缅!

信息的價(jià)值隨著時(shí)間的推移而降低唇聘。但是,對(duì)于所有信息旁振,速率的下降并不相同获询。

讓我們?cè)倏匆幌隆按蜍?chē)”的例子來(lái)理解“信息價(jià)值與時(shí)間的比例”

駕駛室的估計(jì)到達(dá)時(shí)間可能僅在駕駛室到達(dá)之前是相關(guān)的。

最重要的是拐袜,當(dāng)用戶積極等待出租車(chē)以便及時(shí)到達(dá)某個(gè)地方時(shí)吉嚣,沒(méi)有什么比這個(gè)“你的車(chē)已經(jīng)到了”通知更重要了。而一旦行程開(kāi)始蹬铺,這個(gè)通知就沒(méi)有任何價(jià)值了尝哆。

還有很多其他此類實(shí)時(shí)場(chǎng)景,其中很少有:

  • 股市
  • 庫(kù)存
  • 送餐服務(wù)

在很短的時(shí)間內(nèi)具有很高的價(jià)值甜攀。

一個(gè)人可以問(wèn)“我的騎行準(zhǔn)備好了嗎秋泄?”

機(jī)器很容易提供資源的狀態(tài),例如“準(zhǔn)備好/未準(zhǔn)備好”规阀。但預(yù)測(cè)(“10 分鐘內(nèi)到達(dá)”)很少見(jiàn)恒序。

要具有相關(guān)性,它必須是準(zhǔn)確的谁撼。如果它在預(yù)計(jì)的時(shí)間還沒(méi)有準(zhǔn)備好怎么辦歧胁?如果提前準(zhǔn)備好呢?這是一個(gè)非常復(fù)雜的問(wèn)題厉碟。它們是處理這個(gè)問(wèn)題的簡(jiǎn)單得多的方法喊巍。

如果我們能問(wèn)“什么時(shí)候準(zhǔn)備好告訴我”,問(wèn)題就迎刃而解了箍鼓。

REST API 交互模式意味著消費(fèi)者總是發(fā)起與提供者的交互崭参。這就是它的工作原理。因此款咖,使用 REST API 無(wú)法要求“知道它何時(shí)準(zhǔn)備就緒”何暮。你猜怎么著?

這正是事件驅(qū)動(dòng) API 提供的價(jià)值铐殃。

事件驅(qū)動(dòng)的 API 交互:

事件驅(qū)動(dòng)的 API 交互模式不同于 REST API海洼。我們將在下面看到,如何背稼。有多種形式,其中兩種流行的是:

  • 網(wǎng)絡(luò)鉤子
  • 流媒體

Webhook(用“taxi-ride”場(chǎng)景描述)

讓我們回到上面討論的“出租車(chē)”示例玻蝌。并使用“告訴我我的旅程何時(shí)準(zhǔn)備就緒”交互模式蟹肘。

我們可以在這里清楚地看到差異〈侍郏現(xiàn)在該事件由提供者(生產(chǎn)者)發(fā)起,在本例中為出租車(chē)代理帘腹。消費(fèi)者必須定義生產(chǎn)者可以調(diào)用的端點(diǎn)(即 URL)贰盗,以便將通知發(fā)送給消費(fèi)者。一旦信息準(zhǔn)備好阳欲,就會(huì)通知消費(fèi)者舵盈。

這種交互類型稱為Webhook,是異步 API 的首選樣式球化。

這種交互構(gòu)成了均勻驅(qū)動(dòng)架構(gòu)的基礎(chǔ)秽晚。

API 流式處理(用“出租車(chē)”場(chǎng)景描述)

讓我們稍微改變一下提供者的能力。而不是回答“準(zhǔn)備好/未準(zhǔn)備好”筒愚,現(xiàn)在的答案是出租車(chē)的當(dāng)前狀態(tài)赴蝇。

機(jī)器告訴資源狀態(tài)是很自然的。

這將允許另一種交互:API Streaming巢掺。

上面的API版本是:

消費(fèi)者實(shí)時(shí)接收狀態(tài)的每個(gè)變化句伶。

通常,Webhook旨在從應(yīng)用程序到應(yīng)用程序陆淀,而Streaming更針對(duì)于與用戶端的人進(jìn)行實(shí)時(shí)交互考余,直接實(shí)時(shí)消費(fèi)信息。

現(xiàn)在從微服務(wù)架構(gòu)模式的角度來(lái)看這個(gè)

設(shè)計(jì)微服務(wù)有不同的方法轧苫,本博客主要關(guān)注微服務(wù)架構(gòu)模式楚堤,請(qǐng)求驅(qū)動(dòng)和事件驅(qū)動(dòng)。

什么是微服務(wù)浸剩?

它是一個(gè)松耦合钾军、高度可測(cè)試、獨(dú)立部署绢要、定義清晰的業(yè)務(wù)領(lǐng)域邊界并由相對(duì)較小的團(tuán)隊(duì)輕松維護(hù)的應(yīng)用程序吏恭。

請(qǐng)求驅(qū)動(dòng)的微服務(wù)

電子商務(wù)應(yīng)用示例

優(yōu)點(diǎn)

  • 有明確的流程控制,看編排器的代碼重罪,我們可以確定動(dòng)作的順序樱哼。

權(quán)衡取舍

  • 單點(diǎn)故障 如果 Orchestrator 服務(wù)出現(xiàn)故障,這將是單點(diǎn)故障剿配。當(dāng)此服務(wù)關(guān)閉時(shí)搅幅,整個(gè)流程將不會(huì)執(zhí)行。
  • 重播數(shù)據(jù)以進(jìn)行恢復(fù)并不容易 沒(méi)有簡(jiǎn)單的方法可以通過(guò)重新處理對(duì)依賴服務(wù)的失敗調(diào)用來(lái)恢復(fù)操作呼胚。
  • 緊密耦合的服務(wù)(相對(duì)) 如果依賴服務(wù)之一出現(xiàn)故障茄唐,則很有可能排除對(duì)其他服務(wù)的調(diào)用。依賴服務(wù)的 Rest API 不能輕易修改。如果改變了沪编,API的消費(fèi)者也需要修改呼盆。因此,微服務(wù)不是松耦合的蚁廓。

事件驅(qū)動(dòng)的微服務(wù)

讓我們將之前的請(qǐng)求驅(qū)動(dòng)應(yīng)用程序轉(zhuǎn)換為事件驅(qū)動(dòng)的電子商務(wù)應(yīng)用程序访圃。

事件驅(qū)動(dòng)架構(gòu)的優(yōu)勢(shì)

  • 松耦合服務(wù) 消息的生產(chǎn)者不需要知道哪個(gè)服務(wù)有興趣接收它。這使得以后在不影響現(xiàn)有功能的情況下添加附加功能變得更加容易相嵌。
  • 異步 當(dāng)您發(fā)出一個(gè)事件時(shí)腿时,它是異步的,這意味著微服務(wù)可以立即繼續(xù)其工作饭宾,而無(wú)需等待事件的使用者完成批糟。這意味著事件峰值不會(huì)減慢用戶界面或其他關(guān)鍵功能。
  • 可擴(kuò)展性 由于微服務(wù)專注于做好一件事而不與其他服務(wù)緊密耦合捏雌,因此您可以單獨(dú)擴(kuò)展具有最大工作負(fù)載的服務(wù)跃赚,以確保每個(gè)微服務(wù)的工作日志都是最新的。
  • 恢復(fù) 事件是易于存儲(chǔ)的時(shí)間點(diǎn)事實(shí)性湿,并且與任何其他數(shù)據(jù)自然分離纬傲。
  • 可維護(hù)性 事件可以通過(guò)重放事件日志簡(jiǎn)單地丟棄并用新模式重新填充。不再需要復(fù)雜的數(shù)據(jù)遷移肤频!

權(quán)衡取舍

  • 沒(méi)有中央?yún)f(xié)調(diào) 器 沒(méi)有明確的中央位置(協(xié)調(diào)器)來(lái)定義整個(gè)流程叹括。
  • 回滾很復(fù)雜 管理分布式事務(wù)可能很復(fù)雜。有多個(gè)服務(wù)消耗一個(gè)事件宵荒,因此汁雷,如果其中一個(gè)服務(wù)發(fā)生異常,那么整個(gè)流程應(yīng)該發(fā)生什么或?qū)崿F(xiàn)回滾過(guò)程是具有挑戰(zhàn)性的报咳。

結(jié)論

兩種模式都有好處侠讯,權(quán)衡取舍,它們的適用性還取決于用例暑刃。還可以根據(jù)應(yīng)用需求選擇使用混合架構(gòu)厢漩。但是,如果有機(jī)會(huì)實(shí)現(xiàn)事件驅(qū)動(dòng)的微服務(wù)岩臣,那肯定會(huì)為構(gòu)建松散耦合的微服務(wù)提供良好的基礎(chǔ)溜嗜。

本文使用 文章同步助手 同步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市架谎,隨后出現(xiàn)的幾起案子炸宵,更是在濱河造成了極大的恐慌,老刑警劉巖谷扣,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件土全,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)裹匙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)野哭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人幻件,你說(shuō)我怎么就攤上這事』桌#” “怎么了绰沥?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贺待。 經(jīng)常有香客問(wèn)我徽曲,道長(zhǎng),這世上最難降的妖魔是什么麸塞? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任秃臣,我火速辦了婚禮,結(jié)果婚禮上哪工,老公的妹妹穿的比我還像新娘奥此。我一直安慰自己,他們只是感情好雁比,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布稚虎。 她就那樣靜靜地躺著,像睡著了一般偎捎。 火紅的嫁衣襯著肌膚如雪蠢终。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天茴她,我揣著相機(jī)與錄音寻拂,去河邊找鬼。 笑死丈牢,一個(gè)胖子當(dāng)著我的面吹牛祭钉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赡麦,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼朴皆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了泛粹?” 一聲冷哼從身側(cè)響起遂铡,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晶姊,沒(méi)想到半個(gè)月后扒接,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年钾怔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碱呼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宗侦,死狀恐怖愚臀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矾利,我是刑警寧澤姑裂,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站男旗,受9級(jí)特大地震影響舶斧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜察皇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一茴厉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧什荣,春花似錦矾缓、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至因篇,卻和暖如春泞辐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背竞滓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工咐吼, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人商佑。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓锯茄,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親茶没。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肌幽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容