官网测试性能不错,使用成熟,GO社区的常用消息中间系统,不同于Java社区的kafka,nats偏于redis式的消息中间件,不不像Kafka式的可以持久化。

==摘录=

https://www.cnblogs.com/liang1101/p/6641082.html

==

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(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。

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版本客户端源码及使用文档

1

$ go git https://github.com/nats-io/go-nats.git

2)使用 Go 文档查看器来查看线上文档

1

$ godoc -http :8080

  3)通过浏览器访问 API 文档

1

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理想的使用场景有:

    1)寻址、发现 
    2)命令和控制(控制面板) 
    3)负载均衡 
    4)多路可伸缩能力 
    5)定位透明 
    6)容错

  NATS设计哲学认为,高质量的QoS应该在客户端构建,故只建立了请求-应答,不提供:

    1)持久化 
    2)事务处理 
    3)增强的交付模式 
    4)企业级队列

NATS 分布式消息队列系统相关推荐

  1. 网易云音乐:基于RocketMQ的亿级分布式消息队列系统建设实践

    来源 阿里巴巴中间件(ID:Aliware_2018) 作者:林德智 十年文案老司机,不如网易评论区. 网易云音乐自2013年上线后,业务保持了高速增长.云音乐除了提供好听的音乐外,还留下了我们在乐和 ...

  2. 基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    转载:https://gitbook.cn/books/5bc446269a9adf54c7ccb8bc/index.html 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量 ...

  3. 再谈基于 Kafka 和 ZooKeeper 的分布式消息队列原理

    关于分布式消息队列,我在几个月前写过一篇文章:<深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列 >.最近,由于写作课程<分布式中间件实践之路>的契机,我 ...

  4. 深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列

    https://gitbook.cn/books/5ae1e77197c22f130e67ec4e/index.html 向作者提问 毕业于 C9 高校,硕士学历,曾在 IEEE ITS.VSD 等 ...

  5. 大型网站系统架构系列:分布式消息队列(二)

    四.JMS消息服务 讲消息队列就不得不提JMS .JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准/规范,允许应用程序组件基于JavaEE平台创建.发送. ...

  6. 21 利用分布式消息队列降低系统耦合性

    国内某大型互联网企业经常因为对同行的产品进行微创新,然后推岀自己的产品而遭人诟病,不讨论这种做法是否合适,我们分析这些产品,发现大多数都比原创产品有 更好的用户体验.这些产品常常后来居上,更速度地推岀 ...

  7. 分布式服务(RPC)+分布式消息队列(MQ)面试题精选

    分布式系统(distributed system)是建立在网络之上的软件系统.正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性.因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作 ...

  8. 用户请求队列化_分布式消息队列选型分析

    高并发架构是成为架构师的必修课,而消息队列,则是王冠上最闪亮的那颗明珠!能否驾驭消息队列这款高并发神器,亦成为架构师的试金石.本文将从队列本质.技术选型两个方面,给大家整理下个人心得,希望能对大家有所 ...

  9. 大型网站架构系列:分布式消息队列

    2019独角兽企业重金招聘Python工程师标准>>> 一.消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题.实现高性能,高可用,可伸 ...

  10. OSSIM中分布式消息队列应用

     OSSIM中分布式消息队列应用 1. 消息队列处理 企业日志数量正在以指数级形式高速增长,日志数据的具有海量.多样.异构等特点,基于传统的单一节点混合式安装的OSSIM平台(指OSSIM 4.4及以 ...

最新文章

  1. 【QM-04】Inspection Characteristic(检验特征)
  2. navicat mysql两张表建立联系_初识MySQL
  3. AAAI2021论文合集汇总!(持续更新)
  4. CF1039C Network Safety
  5. python web框架之Tornado
  6. java开源对象池_JAVA 对象池
  7. 剖析Caffe源码之Layer
  8. Python中的星号:用途及使用方法(下篇)
  9. (17)System Verilog禁止类中所有变量随机属性
  10. 解决岛屿类问题(网格)通用解法DFS(附题)
  11. jquery 固定导航
  12. 医疗大数据的风险及应对方法
  13. PDFsam Basic for mac(合并拆分PDF文档)支持m1
  14. c语言饭卡管理系统_C语言饭卡管理系统毕业设计(含毕业论文、程序源码)论文字数:15422字 C0004-C语言毕业设计下载-华软网...
  15. ANSYS应力工具与四大强度理论
  16. WebRTC之视频采集
  17. 耐克官网一直显示无法连接服务器,nikeapp无法连接服务器是什么原因 nikeapp怎么抢鞋子...
  18. 定企业生死的中台,到底长啥样?
  19. c语言浮点数和0比较大小,C-浮点数为什么不能和0比较?
  20. 如何将笔记本作为另一台电脑的副屏显示

热门文章

  1. 网站上传服务器及安装包,如何上传安装包到服务器
  2. VS,VAX一些快捷键记录
  3. hopfield tsp matlab,TSP问题—Hopfield神经网络算法
  4. qpsk matlab仿真,qpsk的matlab和simulink仿真.pdf
  5. 51单片机之TMOD寄存器
  6. Oracle:imp导入dmp文件
  7. MQL5 编程基础:数组
  8. redis 下载源地址
  9. python blp模型 估计_随机系数Logit模型及Stata实现
  10. 从《征途》看互联网盈利模式的设计