- 1. NATS: 自適應邊緣和分散式系統 的連線技術
- nats可以做什麼:
- 為什麼需要NATS技術:
- NATS連線技術的特性:
- 2. 什麼是NATS:面向訊息的中介軟體
- nats用來做什麼:
- NATS 服務基礎設施是什麼?
- NATS 客戶端如何連線到 NATS 伺服器?
- NATS是如何設計訊息傳遞的?
- 該設計的好處:
- 3. 基於主題的訊息傳遞
- 主題:
- 主題字串的萬用字元:
- 4. 核心NATS
- 核心NATS是什麼?
- 1、釋出和訂閱
- NATS如何釋出和訂閱?
- NATS的訊息組成:
- 分散式系統中的請求-響應模式:
- 2、請求和響應
- NATS如何實現請求-響應模式?
- 無響應者的情況:
1. NATS: 自適應邊緣和分散式系統 的連線技術
nats可以做什麼:
負責定址,發現和交換訊息,這些訊息提供給分散式系統,用來驅動常見的模式:詢問和回答(微服務)、建立和處理(增刪改)、流處理(訊息加工)
為什麼需要NATS技術:
隨著微服務、功能函式和流處理被要求轉移到邊緣,現有(用於連線移動前端和靜態後端的1:1通訊模式,如HTTPorGRPC)技術受到了挑戰。
NATS連線技術的特性:
-
M:N連線:NATS根據主題而不是主機名和埠來管理定址和發現。
-
在任何地方部署、安全、混合部署
-
可擴充套件的部署:NATS基礎設施和客戶端實時溝通所有拓撲變化。即當NATS部署發生變化時,NATS客戶端不需要改變
-
適應性:nats支援更多元件的利用和更多資料的處理。nats支援M:N的通訊模式。nats提供的定址和發現功能與DNS所繫結。以上特性決定了nats對新系統和新需求的適應性。
2. 什麼是NATS:面向訊息的中介軟體
nats用來做什麼:
-
構建分散式和可擴充的C/S應用;
-
以一般方式實時儲存和分發資料。(相容各自環境和語言)
NATS 服務基礎設施是什麼?
NATS 服務由一個或多個 NATS 伺服器程序提供,這些程序配置相互互連,提供NATS 服務基礎架構。(叢集,具有可擴充性)
NATS 客戶端如何連線到 NATS 伺服器?
-
URL: 一個 'NATS URL'。這是一個字串(以 URL 格式),指定可以訪問 NATS 伺服器的 IP 地址和埠,以及要建立的連線型別(普通 TCP、TLS 或 Websocket)。
-
認證(如需登入):認證 前端傳來的資訊,用於向 NATS 伺服器標識自己。 NATS 支援多種身份驗證方案(使用者名稱/密碼、去中心化 JWT、令牌、TLS 證書和帶挑戰的 Nkey)。
NATS是如何設計訊息傳遞的?
-
釋出者:對資料進行編碼、框架化為訊息,最後發出。
-
訊息的定址和標識過程:依賴主題字串,而非網路位置(域名,IP,Port)。
-
訂閱者:接收訊息,解碼並處理訊息。
該設計的好處:
- 各程式可共享通用的訊息處理程式碼(複用)
- 各程式之間隔離了資源和相互依賴關係(解耦)
- 可透過增加訊息處理方法進行擴充套件。
3. 基於主題的訊息傳遞
主題:
是形成名稱(用於查詢物件)的字串。建議使用ASCII字元。NATS的釋出和監聽訊息嚴重依賴_Subjects_。
主題層次結構:
主題字串的萬用字元:
- 匹配單個標記:第一個萬用字元是
*
,它將匹配單個標記。(可在同一主題重複出現)
- 匹配多個標記:第二個萬用字元是
>
,它將匹配一個或多個標記,並且只能出現在主題的末尾。(分接頭:為 > 建立一個訂閱者,可監控NATS叢集上的所有訊息)
4. 核心NATS
核心NATS是什麼?
核心NATS是NATS服務基礎設施提供的基本功能和服務質量(QoS)集。其功能是釋出/訂閱,具有基於主題的定址和佇列,以及“最多一次”服務質量。(不包括nats-server啟用JetStream後提供的功能和服務)
1、釋出和訂閱
NATS如何釋出和訂閱?
NATS實現了1:N通訊的訊息分發模型。在此模型中,訂閱者從特定主題中持續監聽訊息,而釋出者隨時向特定主題傳送訊息。訂閱者可以透過主題字串萬用字元 註冊一系列的主題(即監聽多個群聊)。此1:N的通訊模式可被稱為分發
NATS的訊息組成:
- 主題
- 以二進位制陣列形式載荷的內容
- 頭部header
- 可選項:回覆地址
訊息的預設最大載荷為1M,可自行增加至64M
分散式系統中的請求-響應模式:
即,程序傳送請求後,或是以非同步方式接收響應,或是超時等待。
此模式需要具備以下特性:位置透明性,可擴充套件性,可觀測性。
2、請求和響應
NATS如何實現請求-響應模式?
- 使用NATS核心的通訊機制:釋出-訂閱。訂閱者隨時用自己的收件箱 將請求傳送到特定主題中。持續監聽特定主題的釋出者用發來的收件箱將響應回覆給訂閱者。
- 多個NATS響應者會自動地形成動態佇列組。因此,手動去新增或移除訂閱者,影響不了響應者佇列對訊息的傳送行為。
- NATS程式在連線斷開前會排空緩衝,以減小程序規模。
- 基於釋出-訂閱機制,NATS程式可以檢視請求和響應,以測量延遲、監視異常、直接可擴充套件性等。
- NATS允許多個響應者,其中第一個送達的響應被利用,額外的響應被丟棄。這可以減少響應的延遲和抖動
無響應者的情況:
當請求被髮送到一個沒有訂閱者的主題時,如果客戶端設定了訊息的可選項:no_responder messages ,那麼則會立刻收到一個狀態碼為503,沒有body的回覆。