nats是一個開源的,雲原生的訊息系統。Apcera,百度,西門子,VMware,HTC和愛立信等公司都有在使用。
核心基於EventMachine開發,原理是基於訊息釋出訂閱機制,每臺伺服器上的每個模組會根據自己的訊息類別向MessageBus釋出多個訊息主題,而同時也向自己需要互動的模組,按照需要的主題訂閱訊息。能夠達到每秒8-11百萬個訊息,整個程式很小隻有3M Docker image,它不支援持久化訊息,如果你離線,你就不能獲得訊息。使用nats streaming可以做到持久化,快取等功能。
NATS server
nats提供了一個go編寫的輕量級伺服器。發行版包括二進位制和docker映象
NATS clients
nats官方提供的客戶端有Go,Node,Ruby,Java,C,C#,NGINX等。
NATS 設計目標
核心原則是效能,可伸縮和易用性。
- 高效
- 始終線上和可用
- 非常輕巧
- 支援多種質量的服務
- 支援各種訊息傳遞模型和使用場景
NATS 使用場景
nats是一個簡單且強大的訊息系統,為支援現代雲原生架構設計。由於可伸縮性的複雜性,nats旨在容易使用和實現,且能提供多種質量的服務。
一些適用nats的場景有:
- 高吞吐量的訊息分散 —— 少數的生產者需要將資料傳送給很多的消費者。
- 定址和發現 —— 將資料傳送給特定的應用例項,裝置或者使用者,也可用於發現並連線到基礎架構中的例項,裝置或使用者。
- 命令和控制(控制皮膚)—— 向程式或裝置傳送指令,並從程式/裝置中接收狀態,如SCADA,衛星遙感,物聯網等。
- 負載均衡 —— 主要應用於程式會生成大量的請求,且可動態伸縮程式例項。
- N路可擴充套件性 —— 通訊基礎架構能夠充分利用go的高效併發/排程機制,以增強水平和垂直的擴充套件性。
- 位置透明 —— 程式在各個地理位置上分佈者大量例項,且你無法瞭解到程式之間的端點配置詳情,及他們所生產或消費的資料。
- 容錯
使用nats-streaming的附加場景有:
- 從特定時間或順序消費
- 永續性
- 有保證的訊息投遞
NATS訊息傳遞模型
- 釋出訂閱
- 請求回覆
- 排隊
NATS的特點
nats的獨特功能有:
- 純淨的pub-sub
- 叢集模式的server
- 訂閱者的自動裁剪
- 基於文字的協議
- 多種服務質量
- 最多一次投遞
- 至少一次投遞
- 持久
- 快取