NATS簡介

zhenfeng-zhu發表於2018-07-30

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
  • 訂閱者的自動裁剪
  • 基於文字的協議
  • 多種服務質量
    • 最多一次投遞
    • 至少一次投遞
  • 持久
  • 快取