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