首页 > 其他 > 详细

NATS_01:基础介绍

时间:2017-03-29 18:53:19      阅读:1694      评论:0      收藏:0      [点我收藏+]
1、介绍

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

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吞吐量方面的比较:(注:引用来自 http://blog.csdn.net/chszs/article/details/50996679 做的比较)

  技术分享

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 git https://github.com/nats-io/go-nats.git

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

  $ godoc -http :8080

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

  http://localhost:8080/pkg/github.com/nats-io/go-nats/

   注意:通过 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:基础介绍

原文:http://www.cnblogs.com/liang1101/p/6641082.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!