zoukankan      html  css  js  c++  java
  • NATS_01: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(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版本客户端源码及使用文档

      $ 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)企业级队列 

  • 相关阅读:
    南昌大学2021年数学分析考研试卷
    南昌大学2021年高等代数考研试卷
    吉林大学2021年数学分析考研试卷
    吉林大学2021年高等代数与解析几何考研试卷
    华中师范大学2021年高等代数考研试卷
    华中农业大学2021年数学分析考研试卷
    2021年清华大学丘成桐数学领军计划综合测试数学试题参考解析
    华中科技大学2021年数学分析考研试卷
    华中科技大学2021年高等代数考研试卷
    华东师范大学2021年数学分析考研试卷
  • 原文地址:https://www.cnblogs.com/liang1101/p/6641082.html
Copyright © 2011-2022 走看看