全局代理是什么意思呢怎么寫,全局代理啥意思?


我發(fā)現(xiàn)人們可能會(huì)混淆什么是事件代理,什么是消息代理。事件代理可以用來代替消息代理,但消息代理不能完全實(shí)現(xiàn)事件代理的功能。下面深入比較一下它們。

消息代理?yè)碛杏凭玫臍v史并已被許多組織用于大型的面向消息中間件架構(gòu)。消息代理使得系統(tǒng)可以通過發(fā)布/訂閱消息隊(duì)列進(jìn)行網(wǎng)絡(luò)通信。生產(chǎn)者將消息寫入隊(duì)列,而消費(fèi)者會(huì)消費(fèi)這些消息并進(jìn)行相應(yīng)的處理。然后,消息在消費(fèi)時(shí)得到應(yīng)答,并立即或在之后不久被刪除。消息代理被設(shè)計(jì)為處理與事件代理不同類型的問題。

事件代理是圍繞提供有序的事實(shí)日志而設(shè)計(jì)的。事件代理滿足消息代理無法滿足的兩個(gè)非常具體的需求。首先,消息代理只提供消息的隊(duì)列,消息的消費(fèi)是基于每個(gè)隊(duì)列進(jìn)行處理的。共同消費(fèi)一個(gè)隊(duì)列的應(yīng)用程序只能接收到記錄的一個(gè)子集。這就無法通過事件來正確地傳遞狀態(tài),因?yàn)槊總€(gè)消費(fèi)者都無法獲得所有事件的完整副本。與消息代理不同,事件代理維護(hù)著一個(gè)單獨(dú)的記錄總賬,并通過索引管理每個(gè)單獨(dú)的訪問,因此每個(gè)單獨(dú)的消費(fèi)者能夠訪問所有必需的事件。此外,消息代理會(huì)在應(yīng)答之后刪除事件,而事件代理會(huì)根據(jù)組織的需要保留它們。消費(fèi)后刪除事件使得消息代理不足以向所有應(yīng)用程序提供無限期存儲(chǔ)、全局可訪問、可重放和單一的事實(shí)來源。

事件代理支持一個(gè)不可變的追加日志,以保留事件順序的狀態(tài)。消費(fèi)者可以在任何時(shí)候從日志中的任何位置提取數(shù)據(jù)并進(jìn)行重新處理。此模式對(duì)于啟用事件驅(qū)動(dòng)型微服務(wù)是必不可少的,但消息代理無法提供。

請(qǐng)記住,消息代理中使用的隊(duì)列在事件驅(qū)動(dòng)型微服務(wù)中仍然扮演著一定的角色。隊(duì)列提供了有用的訪問模式,但在使用嚴(yán)格分區(qū)的事件流時(shí)可能難以實(shí)現(xiàn)。對(duì)于事件驅(qū)動(dòng)型微服務(wù)架構(gòu)來說,消息代理系統(tǒng)引入的這些模式當(dāng)然有效,但它們不足以實(shí)現(xiàn)此架構(gòu)所需的全部職責(zé)。本書剩余部分不會(huì)聚焦于消息代理架構(gòu)或應(yīng)用程序設(shè)計(jì),而會(huì)聚焦于事件驅(qū)動(dòng)型微服務(wù)架構(gòu)中事件代理的使用。

從不可變?nèi)罩局邢M(fèi)

雖然不是一個(gè)明確的標(biāo)準(zhǔn),但通??捎玫氖录硎褂靡环N只追加的不可變?nèi)罩?。事件被追加到日志尾部并分配一個(gè)自增的索引 ID。數(shù)據(jù)消費(fèi)者使用索引 ID 的引用來訪問數(shù)據(jù)。然后,可以依據(jù)業(yè)務(wù)需要和事件代理能夠提供的功能,以事件流或隊(duì)列的形式消費(fèi)事件。

01. 以事件流形式消費(fèi)

每個(gè)消費(fèi)者負(fù)責(zé)更新自己的指針,該指針指向事件流中之前讀取數(shù)據(jù)的索引。這個(gè)索引稱為偏移量,是從事件流開始處到當(dāng)前事件的度量。偏移量允許多個(gè)消費(fèi)者相互獨(dú)立地消費(fèi)并跟蹤它們的進(jìn)度,如圖 2-6 所示。

消費(fèi)者組允許將多個(gè)消費(fèi)者視為同一個(gè)邏輯實(shí)體,并可用于消息消費(fèi)的橫向擴(kuò)展。新的消費(fèi)者加入消費(fèi)者組中會(huì)導(dǎo)致事件流分區(qū)指派的重新分配。新的消費(fèi)者僅從分配給它的分區(qū)中消費(fèi)事件,就像組中之前的舊消費(fèi)者實(shí)例僅從分配給它們的分區(qū)中消費(fèi)事件一樣。通過這種方式,在同一個(gè)消費(fèi)者組內(nèi)可以平衡事件的消費(fèi),同時(shí)確保給定分區(qū)的所有事件是由單一的消費(fèi)者實(shí)例獨(dú)占消費(fèi)的。在消費(fèi)者組內(nèi)激活的消費(fèi)者實(shí)例數(shù)量受限于事件流中的分區(qū)數(shù)量。

02. 以隊(duì)列形式消費(fèi)

在基于隊(duì)列的消費(fèi)中,每個(gè)事件僅被一個(gè)微服務(wù)實(shí)例所消費(fèi)。一旦被消費(fèi),該事件就被事件代理標(biāo)記為“已消費(fèi)”并不再提供給任何其他消費(fèi)者。當(dāng)以隊(duì)列形式消費(fèi)時(shí),消費(fèi)者數(shù)量與分區(qū)數(shù)量就變得沒有耦合性,因?yàn)槿我鈹?shù)量的消費(fèi)者實(shí)例都能用于消費(fèi)。

當(dāng)以隊(duì)列形式進(jìn)行處理時(shí),事件順序是無法保證的。并行的消費(fèi)者無序地消費(fèi)和處理事件,同時(shí)單個(gè)消費(fèi)者可能在處理一個(gè)事件時(shí)失敗,進(jìn)而將其放回隊(duì)列以待后面再處理,然后就繼續(xù)消費(fèi)接下來的事件了。

不是所有的事件代理都支持隊(duì)列。例如 Apache Pulsar 目前支持隊(duì)列,Apache Kafka 則不支持。圖 2-7 展示了使用單獨(dú)的偏移量應(yīng)答的隊(duì)列的實(shí)現(xiàn)。

提供單一事實(shí)來源

持久和不可變的日志為單一事實(shí)來源提供了存儲(chǔ)機(jī)制,事件代理成了服務(wù)消費(fèi)和生產(chǎn)數(shù)據(jù)的唯一位置。這樣,每個(gè)消費(fèi)者都能獲得一份完全相同的數(shù)據(jù)副本

采用事件代理作為單一事實(shí)來源需要組織進(jìn)行一次文化轉(zhuǎn)變。之前團(tuán)隊(duì)可能只需編寫直接的 SQL 查詢語(yǔ)句來訪問單體數(shù)據(jù)庫(kù)中的數(shù)據(jù),而現(xiàn)在團(tuán)隊(duì)還必須把單體數(shù)據(jù)發(fā)布到事件代理上。管理單體數(shù)據(jù)庫(kù)的開發(fā)者必須確保生成的數(shù)據(jù)是完全正確的,因?yàn)槭录骱蛦误w數(shù)據(jù)庫(kù)之間的任何不一致都會(huì)被認(rèn)為是生產(chǎn)團(tuán)隊(duì)的事故。數(shù)據(jù)消費(fèi)者不再直接耦合于單體數(shù)據(jù)庫(kù),而是從事件流中進(jìn)行消費(fèi)。

采用事件驅(qū)動(dòng)型微服務(wù)可以創(chuàng)建只使用事件代理進(jìn)行存儲(chǔ)和訪問數(shù)據(jù)的微服務(wù)。雖然微服務(wù)的業(yè)務(wù)邏輯肯定會(huì)使用事件的本地副本,但事件代理仍然是所有數(shù)據(jù)的唯一事實(shí)來源。

好了,這篇文章的內(nèi)容發(fā)貨聯(lián)盟就和大家分享到這里,如果大家網(wǎng)絡(luò)推廣引流創(chuàng)業(yè)感興趣,可以添加微信:80709525  備注:發(fā)貨聯(lián)盟引流學(xué)習(xí); 我拉你進(jìn)直播課程學(xué)習(xí)群,每周135晚上都是有實(shí)戰(zhàn)干貨的推廣引流技術(shù)課程免費(fèi)分享!


版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 sumchina520@foxmail.com 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。

您可能還會(huì)喜歡:

發(fā)表評(píng)論

◎歡迎參與討論,請(qǐng)?jiān)谶@里發(fā)表您的看法、交流您的觀點(diǎn)。