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