什么是發(fā)布/訂閱模式?
舉一個生活中常見的例子說明:小李到某房產(chǎn)中介提出租房需求,根據(jù)需求,房產(chǎn)中介將之前房東發(fā)布的出租信息提供給小李選擇,小李確定租房后,中介會將信息同步給房東知曉。這是一個典型的發(fā)布/訂閱模式。房東可以看作是發(fā)布者,租戶看作是訂閱者,房產(chǎn)中介作為消息代理,發(fā)布者和訂閱者之間通過消息代理進行間接通信。
發(fā)布-訂閱模式演示(租房)
發(fā)布/訂閱模式特點:
①解耦:發(fā)布者和訂閱者之間沒有直接聯(lián)系,它們通過中間的消息代理(如消息隊列或事件總線)進行通信。這種解耦使得系統(tǒng)更加靈活,可以獨立地添加或移除發(fā)布者和訂閱者,而不會影響其他組件。②異步通信:發(fā)布者發(fā)布消息后不需要等待響應,可以繼續(xù)執(zhí)行其他任務。訂閱者可以在方便的時候處理接收到的消息,不必立即響應。③一對多通信:一個發(fā)布者可以向多個訂閱者發(fā)送消息。多個發(fā)布者也可以向同一個主題發(fā)布消息,所有訂閱該主題的訂閱者都會收到這些消息。④動態(tài)訂閱:訂閱者可以在運行時動態(tài)地訂閱或取消訂閱某個主題。這種靈活性使得系統(tǒng)能夠適應不斷變化的需求。⑤廣播機制:消息會被廣播到所有訂閱了該主題的訂閱者。每個訂閱者都可以獨立處理消息,互不影響。
發(fā)布/訂閱(Pub/Sub,即Publish/Subscribe)是分布式系統(tǒng)中用于不同組件或服務之間異步通信的一種架構(gòu)設計模式。盡管發(fā)布/訂閱基于消息隊列和事件代理等早期設計模式,但它更加靈活和可擴展。其關(guān)鍵在于,發(fā)布/訂閱允許在系統(tǒng)的不同組件之間傳遞消息,而這些組件之間無需知道彼此的身份(即它們是解耦的)。發(fā)布/訂閱模式的出現(xiàn)源于擴大信息系統(tǒng)規(guī)模的必要性。在互聯(lián)網(wǎng)時代之前,甚至在互聯(lián)網(wǎng)發(fā)展的初期,系統(tǒng)大多是通過靜態(tài)方式擴展的。然而,隨著互聯(lián)網(wǎng)的擴張和基于Web的應用程序的普及,以及移動設備和物聯(lián)網(wǎng)設備的廣泛應用,系統(tǒng)需要動態(tài)地擴展。發(fā)布/訂閱模式的解耦特性使其成為管理動態(tài)可擴展系統(tǒng)架構(gòu)的理想選擇。發(fā)布/訂閱使得在不增加系統(tǒng)組件程序邏輯負擔的情況下管理擴展成為可能。
Pub/Sub架構(gòu)
Pub/Sub提供了一個框架,用于在發(fā)布者(創(chuàng)建和發(fā)送消息的組件)和訂閱者(接收和使用消息的組件)之間交換消息。請注意,發(fā)布者不會以點對點方式向特定訂閱者發(fā)送消息。相反,使用中介-Pub/Sub消息代理,它將消息分組為稱為通道(或主題)的實體。
發(fā)布/訂閱模型工作原理:? 訂閱者首先會選擇訂閱特定的主題,以便能夠接收該主題下的所有消息。? 隨后,發(fā)布者會向這些已選定的主題發(fā)送消息,這些消息包含了需要傳遞的信息或指令。? 消息代理作為核心中介,接收來自發(fā)布者的消息,并將其存儲在對應的主題中。同時,代理還會負責將這些消息分發(fā)給所有已訂閱該主題的訂閱者。
發(fā)布-訂閱模式
舉例說明:
為了更具體地理解Pub/Sub系統(tǒng)的操作,我們可以考慮以下實際場景。設想在家中,你安裝了一系列IoT設備,這些設備負責監(jiān)測煙霧濃度并控制電力與天然氣的供應。為了確保這些設備之間能夠順暢且可靠地通信,你可以采用MQTT代理作為消息傳遞的中心樞紐。在這個場景中,一旦煙霧檢測設備(作為發(fā)布者)偵測到煙霧并判定為警報狀態(tài),它會立即向MQTT代理發(fā)送一條包含警報信息的消息。而你的智能手機(作為訂閱者之一)已經(jīng)訂閱了相關(guān)的煙霧警報主題,因此會立即接收到這條消息,并通知你家中存在煙霧。值得注意的是,Pub/Sub模型的靈活性還體現(xiàn)在訂閱者也能轉(zhuǎn)變?yōu)榘l(fā)布者的能力上。例如,你的智能手機在接收到煙霧警報后,可以作為一個發(fā)布者,向另一個特定主題發(fā)送關(guān)閉電力和天然氣供應的指令消息。此時,負責控制電力和天然氣供應的IoT設備(作為訂閱者)會接收到這條指令,并據(jù)此執(zhí)行關(guān)閉操作,以確保家庭安全。通過這樣的方式,即便只發(fā)送了一條消息,也能觸發(fā)兩個獨立的IoT設備同時做出響應,從而實現(xiàn)了高效的跨設備通信與協(xié)同工作。
Pub/Sub模型有哪些優(yōu)勢?
Pub/Sub模式為表帶來了許多好處,如:
? 組件之間的松散耦合,使你的系統(tǒng)更加模塊化和靈活。
? 高可擴展性(理論上,Pub/Sub允許任意數(shù)量的發(fā)布者與任意數(shù)量的訂閱者通信)。
? 與語言和協(xié)議無關(guān),這使得將Pub/Sub集成到你的技術(shù)堆棧中變得簡單快捷。
? 異步、事件驅(qū)動型通信,非常適合實時、低延遲的應用程序。
何時應使用Pub/Sub模式?
Pub/Sub的松散耦合、異步特性和固有的可擴展性使其成為發(fā)布者和訂閱者數(shù)量較高且波動的分布式系統(tǒng)的絕佳解決方案。你可以將Pub/Sub用于許多不同的目的,例如:
? 發(fā)送事件通知
? 分布式緩存
? 分布式日志記錄
? 使用多個數(shù)據(jù)源
? 廣播更新(一對多消息傳送)
? 構(gòu)建響應式、低延遲的最終用戶體驗,例如實時聊天和多人游戲協(xié)作功能
應用場景
①事件驅(qū)動架構(gòu):在微服務架構(gòu)中,不同服務可以通過發(fā)布-訂閱模式來交換事件,實現(xiàn)松耦合的通信。例如,訂單服務可以發(fā)布“訂單創(chuàng)建”事件,庫存服務和支付服務可以訂閱該事件并相應地更新庫存和處理支付。②實時通知:在社交網(wǎng)絡應用中,用戶可以訂閱他們感興趣的話題或用戶,當有新的內(nèi)容發(fā)布時,系統(tǒng)可以實時通知訂閱者。例如,微博、小紅書等社交媒體平臺使用發(fā)布-訂閱模式來推送新博文/筆記、評論和點贊通知等。③日志和監(jiān)控:系統(tǒng)中的各個組件可以發(fā)布日志和監(jiān)控數(shù)據(jù),中央日志系統(tǒng)和監(jiān)控系統(tǒng)可以訂閱這些數(shù)據(jù),進行集中處理和分析。例如,ELK Stack(Elasticsearch, Logstash, Kibana)和Prometheus等工具可以利用發(fā)布-訂閱模式來收集和處理日志和監(jiān)控數(shù)據(jù)。④物聯(lián)網(wǎng):在物聯(lián)網(wǎng)應用中,設備可以發(fā)布傳感器數(shù)據(jù),中央控制系統(tǒng)和其他設備可以訂閱這些數(shù)據(jù),進行實時處理和響應(如前面所舉煙霧報警的例子)。
億佰特串口服務器產(chǎn)品涵蓋單串口服務器、多串口服務器、Wi-Fi串口服務器以及串口服務器模組等,可提供串口轉(zhuǎn)網(wǎng)絡功能,能夠?qū)⒋跀?shù)據(jù)轉(zhuǎn)換成TCP/IP協(xié)議數(shù)據(jù),實現(xiàn)串口與網(wǎng)絡的雙向透明傳輸。被廣泛應用于考勤系統(tǒng)、機房監(jiān)控、電力監(jiān)控等場景。
-
異步通信
+關(guān)注
關(guān)注
1文章
57瀏覽量
10136 -
模型
+關(guān)注
關(guān)注
1文章
3243瀏覽量
48840 -
分布式系統(tǒng)
+關(guān)注
關(guān)注
0文章
146瀏覽量
19227
發(fā)布評論請先 登錄
相關(guān)推薦
評論