NATS_01:NATS基础介绍
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(Erlang编写)、Nats(之前是Ruby编写现已修改为Go)、Redis(C语言编写)、Kestrel(Scala编写不常用)、NSQ(Go语言编写),这些消息通信系统在Broker吞吐量方面的比较:(注:来自作者Derek Collison 对不同版本的消息系统进行的比较)

按照其官网的说法,NATS是一个开源的、高性能的、简洁的、灵活的 适用于现代的可靠灵活的云和分布式系统的中枢系统。 说的很玄乎,实际上就是一个分布式的消息队列系统,支持PubSub/ReqRsp 模型。其最初由Apcera领导开发,并实现了Ruby版本的服务器和客户端,其主要作者Derek Collison自称做了20多年的MQ,并经历过TIBOC、Rendezvous、EMC公司,这里有他自己的reddit回答。
根据github里面ruby-nats的日志显示在11年Derek实现了Ruby版本的NATS服务器以及对应的客户端。然后在12年末,姑且认为是13年Derek又用Golang将服务器重写了一遍,并最终发现其效果更好,于是现在慢慢将Ruby版本的服务器淘汰了,现在官网也只维护一个Golang版本的服务器,也就是我们这里的gnatsd。
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)寻址、发现
2)命令和控制(控制面板)
3)负载均衡
4)多路可伸缩能力
5)定位透明
6)容错
NATS设计哲学认为,高质量的QoS应该在客户端构建,故只建立了请求-应答,不提供:
1)持久化
2)事务处理
3)增强的交付模式
4)企业级队列
NATS_01:NATS基础介绍的更多相关文章
- 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 ...
随机推荐
- 软件工程-东北师大站-第八次作业(PSP)
1.本周PSP 2.本周进度条 3.本周累计进度图 代码累计折线图 博文字数累计折线图 4.本周PSP饼状图
- spring冲刺第九天
昨天使炸弹可以炸死人物并可以炸没砖块,并试着将小怪加入地图. 今天设计游戏的道具,比如吃了道具人物反方向运动等. 遇到的问题设计不够完善,道具单一.
- git 提交本地文件,删除文件夹,修改文件等
1. 下载git工具包 链接: https://git-scm.com/download/win 2. 右键打开git bash 登陆到自己的github账户 $ git config --globa ...
- Codeforces Round #105 (Div. 2) D. Bag of mice 概率dp
题目链接: http://codeforces.com/problemset/problem/148/D D. Bag of mice time limit per test2 secondsmemo ...
- 作业6 团队项目之(开始第一个Sprint)
一.模仿并超越--类似应用. 五个app:1.四则运算小学堂(500-999次下载 3.57M) 2.小学生算术练习(9000+次下载 232K) 3.小学生加减题生成练习工具(2万-3万次下载 1. ...
- selenium异常问题汇总(持续更新版)
webdriver启动firefox时如果遇到以下错误,则说明selenium的版本和firefox不兼容了,升级selenium版本就好 org.openqa.selenium.firefox.No ...
- python调用docker API(CentOS6.5)
一 环境背景 python-2.7.8 docker 版本 1.15 (*yum安装为1.14版本,需升级为1.15,详见后续步骤) 二 获取Docker容器指标[指标可行性分析见笔记:] CPU : ...
- 二叉树 Java 实现 前序遍历 中序遍历 后序遍历 层级遍历 获取叶节点 宽度 ,高度,队列实现二叉树遍历 求二叉树的最大距离
数据结构中一直对二叉树不是很了解,今天趁着这个时间整理一下 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显 ...
- Python日记——nginx+Gunicorn部署你的Flask项目
转自:http://blog.csdn.net/qq_32198277/article/details/52432890 大家在学习Python的时候常常都是输入 python 文件名.py 这样 ...
- Delphi : keydown与keypress的区别,组合键
Shift 是一个集合变量. type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDoubl ...