NATS—基础介绍
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—基础介绍的更多相关文章
- NATS_01:NATS基础介绍
1.介绍 NATS(Message bus): 从CloudFoundry的总架构图看,位于各模块中心位置的是一个叫nats的组件.NATS是由CloudFoundry的架构师Derek开发的一个开源 ...
- Web3D编程入门总结——WebGL与Three.js基础介绍
/*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...
- C++ 迭代器 基础介绍
C++ 迭代器 基础介绍 迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围.迭代器就如同一个指针.事实上,C++的指针也是一种迭代器.但是,迭代器不仅仅是指针,因此你不能认为他们一定 ...
- Node.js学习笔记(一)基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- Node.js 基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- 1、git基础介绍及远程/本地仓库、分支
1. Git基础介绍 基于Git进行开发时,首先需要将远程仓库代码clone到本地,即为本地仓库.后续大部分时间都是基于本地仓库上的分支进行编码,最后将本地仓库的代码合入远程仓库. 1.1. 远程仓库 ...
- git基础介绍
git基础介绍 这是git操作的基础篇,是以前的写的操作文档,就没有进行手打,直接把图片贴进来了,你们担待哈,有不正确的地方可以指正出来,我将在第一时间去修改,多谢哈! 一.文件状态:git系统的文件 ...
- OSPF基础介绍
OSPF基础介绍 一.RIP的缺陷 1.以跳数评估的路由并非最优路径 2.最大跳数16导致网络尺度小 3.收敛速度慢 4.更新发送全部路由表浪费网络资源 二.OSPF基本原理 1.什么是OSPF a& ...
- iOS系统及客户端软件测试的基础介绍
iOS系统及客户端软件测试的基础介绍 iOS现在的最新版本iOS5是10月12号推出,当前版本是4.3.5 先是硬件部分,采用iOS系统的是iPad,iPhone,iTouch这三种设备,其中iPho ...
随机推荐
- cocos2d JS 监听键盘触摸响应事件(cc.EventListener.KEYBOARD)
除了可以监听键盘按键,还可以是终端设备的各个菜单键,都能使用同一个监听器来进行处理. //给statusLabel绑定键盘事件 cc.eventManager.addListener({ event: ...
- sqli-labs(十八)
第五十五关:和上一关类似,只是拼凑的方法不一样,所以需要先判断后台是怎么拼凑的 分别输入id=1'--+ id=1"--+ id=') --+ ...
- Lepus(天兔)监控MySQL部署
http://www.dbarun.com/docs/lepus/install/lnmp/ 注意:xampp mysqldb-python版本太高会导致lepus白屏 apache版本最好选择2.2 ...
- python 定义函数 调用函数
创建test.py文件 #coding=utf-8 #定义函数 def hello(): print "hello world" #调用函数 hello() 在cmd下面运行
- c# 调试模式下Swaggerf附加接口参数
c# 调试模式下Swaggerf附加接口参数,如:每个接口Header中附加参数appId 1.新增过滤器: public class GlobalHttpHeaderFilter : IOperat ...
- node事件循环和process
1.node.js事件循环 node.js事件可以继续插入事件,如果有事件就继续执行下去,每一次事件处理结束后等待下一个事件的发生:没有要处理的事件了,那整个就结束了; setTimeout插入一个 ...
- ps 证件照(1,2寸)
制作证件照 9*9打印 1,1寸 图片裁剪 2, 2寸 图片裁剪 3,将裁剪完成后的图片选择添加画布 Alt Ctrl c 将高和宽各加20px ,背景选择白色 4,将得到的带有白色 ...
- C#深入研究ArrayList动态数组自动扩容原理
1 void Test1() { ArrayList arrayList = new ArrayList(); ; ; i < length; i++) { arrayList.Add(&quo ...
- 20165305 苏振龙《Java程序设计》第一周学习总结
20165305 <Java程序设计>第一周学习总结 教材学习内容总结 我重点学习了jdk安装后面的第一章内容,算是更进一步的的了解了一些Java方面的基础知识. Java平台概论 Jav ...
- 15类Android通用流行框架
15类Android通用流行框架 Android流行框架 缓存 DiskLruCache Java实现基于LRU的磁盘缓存 图片加载 Android Universal Image Loader 一个 ...