NATS—基礎介紹

1. 介紹

NATS(Message bus): 從CloudFoundry的總架構圖看,位於各模塊中心位置的是一個叫nats的組件。NATS是由CloudFoundry的架構師Derek開發的一個開源的、輕量級、高性能的,支持發佈、訂閱機制的分佈式消息隊列系統。它的核心基於EventMachine開發,代碼量很少,能夠下載下來慢慢研究。其核心原理就是基於消息發佈訂閱機制。每一個臺服務 器上的每一個模塊會根據本身的消息類別,向MessageBus發佈多個消息主題;而同時也向本身須要交互的模塊,按照須要的信息內容的消息主題訂閱消息。 NATS原來是使用Ruby編寫,能夠實現每秒150k消息,後來使用Go語言重寫,可以達到每秒8-11百萬個消息,整個程序很小隻有3M Docker image,它不支持持久化消息,若是你離線,你就不能得到消息。php

NATS適合雲基礎設施的消息通訊系統、IoT設備消息通訊和微服務架構。Apcera團隊負責維護NATS服務器(Golang語言開發)和客戶端(包括Go、Python、Ruby、Node.js、Elixir、Java、Nginx、C和C#),開源社區也貢獻了一些客戶端庫,包括Rust、PHP、Lua等語言的庫。目前已經採用了NATS系統的公司有:愛立信、HTC、百度、西門子、VMware。html

市面上常見到的和Nats功能相似的消息通訊系統有:java

ActiveMQ(Java編寫)、KafKa(Scala編寫)、RabbitMq(Ruby編寫)、Nats(以前是Ruby編寫現已修改成Go)、Redis(C語言編寫)、Kestrel(Scala編寫不經常使用)、NSQ(Go語言編寫),這些消息通訊系統在Broker吞吐量方面的比較:(注:來自做者Derek Collison 對不一樣版本的消息系統進行的比較)node

2. NATS服務器與客戶端

NATS服務器:用Golang語言開發,發行版包括二進制發佈包和Docker鏡像
NATS客戶端:包含了多種語言的客戶端及實例(官網)nginx

官方提供的客戶端git

    Go client:   https://github.com/nats-io/go-natsgithub

    Node.js client: https://github.com/nats-io/node-nats瀏覽器

    Ruby client:  https://github.com/nats-io/ruby-natsruby

    Java client:   https://github.com/nats-io/jnats服務器

    C client:     https://github.com/nats-io/cnats

    C# client:   https://github.com/nats-io/csnats

    Nginx C client:https://github.com/nats-io/nginx-nats

 還有社區提供的客戶端:

    Spring: https://github.com/cloudfoundry-community/java-nats

    Lua:   https://github.com/DawnAngel/lua-nats

    PHP:    https://github.com/repejota/phpnats

    Python:https://github.com/mcuadros/pynats

    Scala:   https://github.com/tyagihas/scala_nats/

    Haskell:https://github.com/ondrap/nats-queue

對於Golang客戶端API文檔,須要這樣:

1)用 Go 下載 go版本客戶端源碼及使用文檔

$ go git https://github.com/nats-io/go-nats.git

2)使用 Go 文檔查看器來查看線上文檔

	
$ godoc -http:8080

3)經過瀏覽器訪問 API 文檔

http://localhost:8080/pkg/github.com/nats-io/gnatsd/

注意:經過 Go 下載的項目源碼包,均可以經過這種方式去打開對應的 API 文檔。例如我從網上下載有關 GoWeb 開發的 beego 項目,也能夠經過訪問:http://localhost:8080/pkg/github.com/astaxie/beego/ 來查看對應 beego 的 API 文檔。

3. NATS的設計目標

NATS的設計原則是:高性能、可伸縮能力、易於使用,基於這些原則,NATS的設計目標包括: 
    1)高性能(fast) 
    2)一直可用(dial tone) 
    3)極度輕量級(small footprint) 
    4)最多交付一次(fire and forget,消息發送後無論) 
    5)支持多種消息通訊模型和用例場景(flexible)

4. NATS的使用場景

  NATS理想的使用場景有:

    1)分發大量消息
      少許數(publisher-生產者)據須要頻繁發給大量的組(subjects-消費者)
    2)尋址、發現
      給指定的實例、設備、用戶發送數據。或 發現鏈接到本身的實例、設備或用戶
    3)命令和控制(控制面板)
      嚮應用或設備發送命令並接收命令執行結果。如SCADA, satellite telemetry, IOT.
    4)負載均衡
    5)多路可伸縮能力
    6)定位透明
    7)容錯

  NATS Streaming 是一個基於 NATS協議的數據流服務程序,除了擁有上面的功能,還可用於
    1)從指定的時間或序列號 還原事件流
    2)爲終端 持久化訂閱
    3)持久化或有保證的消息傳送

  NATS設計哲學認爲,高質量的QoS應該在客戶端構建,故只創建了請求-應答,不提供:

    1)持久化 
    2)事務處理 
    3)加強的交付模式 
    4)企業級隊列 

轉自:http://www.cnblogs.com/liang1101/p/6641082.html

相關文章
相關標籤/搜索