1. 介绍

NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件。NATS是由CloudFoundry的架构师Derek开发的一个开源的、轻量级、高性能的,支持发布、订阅机制的分布式消息队列系统。它的核心基于EventMachine开发,代码量不多,可以下载下来慢慢研究。其核心原理就是基于消息发布订阅机制。每个台服务 器上的每个模块会根据自己的消息类别,向MessageBus发布多个消息主题;而同时也向自己需要交互的模块,按照需要的信息内容的消息主题订阅消息。 NATS原来是使用Ruby编写,可以实现每秒150k消息,后来使用Go语言重写,能够达到每秒8-11百万个消息,整个程序很小只有3M Docker image,它不支持持久化消息,如果你离线,你就不能获得消息。

NATS适合云基础设施的消息通信系统、IoT设备消息通信和微服务架构。Apcera团队负责维护NATS服务器(Golang语言开发)和客户端(包括Go、Python、Ruby、Node.js、Elixir、Java、Nginx、C和C#),开源社区也贡献了一些客户端库,包括Rust、PHP、Lua等语言的库。目前已经采用了NATS系统的公司有:爱立信、HTC、百度、西门子、VMware。

市面上常见到的和Nats功能类似的消息通信系统有:

ActiveMQ(Java编写)、KafKa(Scala编写)、RabbitMq(Ruby编写)、Nats(之前是Ruby编写现已修改为Go)、Redis(C语言编写)、Kestrel(Scala编写不常用)、NSQ(Go语言编写),这些消息通信系统在Broker吞吐量方面的比较:(注:来自作者Derek Collison 对不同版本的消息系统进行的比较)

2. NATS服务器与客户端

NATS服务器:用Golang语言开发,发行版包括二进制发布包和Docker镜像
NATS客户端:包含了多种语言的客户端及实例(官网)

官方提供的客户端

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

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

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

    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

NATS—基础介绍的更多相关文章

  1. NATS_01:NATS基础介绍

    1.介绍 NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件.NATS是由CloudFoundry的架构师Derek开发的一个开源 ...

  2. Web3D编程入门总结——WebGL与Three.js基础介绍

    /*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...

  3. C++ 迭代器 基础介绍

    C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...

  4. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  5. Node.js 基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  6. 1、git基础介绍及远程/本地仓库、分支

    1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...

  7. git基础介绍

    git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...

  8. OSPF基础介绍

    OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...

  9. iOS系统及客户端软件测试的基础介绍

    iOS系统及客户端软件测试的基础介绍 iOS现在的最新版本iOS5是10月12号推出,当前版本是4.3.5 先是硬件部分,采用iOS系统的是iPad,iPhone,iTouch这三种设备,其中iPho ...

随机推荐

  1. cocos2d JS 监听键盘触摸响应事件(cc.EventListener.KEYBOARD)

    除了可以监听键盘按键,还可以是终端设备的各个菜单键,都能使用同一个监听器来进行处理. //给statusLabel绑定键盘事件 cc.eventManager.addListener({ event: ...

  2. sqli-labs(十八)

    第五十五关:和上一关类似,只是拼凑的方法不一样,所以需要先判断后台是怎么拼凑的 分别输入id=1'--+         id=1"--+             id=') --+     ...

  3. Lepus(天兔)监控MySQL部署

    http://www.dbarun.com/docs/lepus/install/lnmp/ 注意:xampp mysqldb-python版本太高会导致lepus白屏 apache版本最好选择2.2 ...

  4. python 定义函数 调用函数

    创建test.py文件 #coding=utf-8 #定义函数 def hello(): print "hello world" #调用函数 hello() 在cmd下面运行

  5. c# 调试模式下Swaggerf附加接口参数

    c# 调试模式下Swaggerf附加接口参数,如:每个接口Header中附加参数appId 1.新增过滤器: public class GlobalHttpHeaderFilter : IOperat ...

  6. node事件循环和process

    1.node.js事件循环 node.js事件可以继续插入事件,如果有事件就继续执行下去,每一次事件处理结束后等待下一个事件的发生:没有要处理的事件了,那整个就结束了; setTimeout插入一个 ...

  7. ps 证件照(1,2寸)

    制作证件照      9*9打印 1,1寸  图片裁剪 2, 2寸 图片裁剪 3,将裁剪完成后的图片选择添加画布  Alt Ctrl  c 将高和宽各加20px  ,背景选择白色 4,将得到的带有白色 ...

  8. C#深入研究ArrayList动态数组自动扩容原理

    1 void Test1() { ArrayList arrayList = new ArrayList(); ; ; i < length; i++) { arrayList.Add(&quo ...

  9. 20165305 苏振龙《Java程序设计》第一周学习总结

    20165305 <Java程序设计>第一周学习总结 教材学习内容总结 我重点学习了jdk安装后面的第一章内容,算是更进一步的的了解了一些Java方面的基础知识. Java平台概论 Jav ...

  10. 15类Android通用流行框架

    15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...