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 ...
随机推荐
- 记事本App之NABCD
在经过了漫长的讨论之后,在经历了无数次提议.否定.再提议.改进之后.我们团队的团队项目终于有了结果,小组成员一致同意做一个移动端记事本的app.下面我就来详细的阐明我们项目的NABCD这5大项内容. ...
- Pl/sql学习笔记2
-- declare type vsal_table is table of emp.sal%type; a vsal_table; begin --必须得初始化 并且有数量上的区分 从一开的 a ...
- 软工1816 · Beta冲刺(1/7)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成beta冲刺阶段的任务安排 整理博客 接下来的计划 & 还剩下哪些 ...
- 福大软工1816 · 评分结果 · beta冲刺总评
作业地址:beta答辩总结.beta冲刺7.beta冲刺6.beta冲刺5.beta冲刺4.beta冲刺3.beta冲刺2.beta冲刺1.beta冲刺前准备 作业提交准则 按时交 - 有分 晚交 - ...
- Calculator项目的过程及感受
1.将Calculator项目传到Github上的链接地址:https://github.com/sonnypp/object-oriented/tree/master/Calculator 2.本次 ...
- Week2-作业1——关于阅读《构建之法》第1、2、16章的疑问与感悟
关于阅读<构建之法>第1.2.16章的疑问与感悟 术语解释: 第2章,23页 什么是代码覆盖率? ———————————————————— 在测试中的代码覆盖率是指,你运行测试用例后,走过 ...
- struts2的运行原理以及底层的工作机制
1 请求,请求路径是/login(发起请求,被filter拦截) 2 DispatcherFilter 3 获取当前请求的路径 通过request对象 request.getServletPath 4 ...
- 使用testng多线程来测试成交编号重复的问题
1.首先编写一个测试用的 function CREATE OR REPLACE FUNCTION getDealmainNo_test(dealdate IN varchar2, productcod ...
- js dom学习
创建dom元素 var oLi = document.creteElement('li'); //创建livar aLi = oUl.getElementsByTagName('li');oLi.in ...
- 笔记之分布式文件系统(DFS)
不知何故,老外都挺喜欢使用DFS,但是国内公司用这个的不多.一个具体的需求就是,备份服务器在国外,所以启用DFS把国内的数据同步一份到国外进行备份.最近有机会接触DFS,把一些心得体会记录一下. 1. ...