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

    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)分发大量消息
          少量数(publisher-生产者)据需要频繁发给大量的组(subjects-消费者)
        2)寻址、发现
          给指定的实例、设备、用户发送数据。或 发现连接到自己的实例、设备或用户
        3)命令和控制(控制面板)
          向应用或设备发送命令并接收命令执行结果。如SCADA, satellite telemetry, IOT.
        4)负载均衡
        5)多路可伸缩能力
        6)定位透明
        7)容错

      NATS Streaming 是一个基于 NATS协议的数据流服务程序,除了拥有上面的功能,还可用于
        1)从指定的时间或序列号 还原事件流
        2)为终端 持久化订阅
        3)持久化或有保证的消息传送

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

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

    转自:http://www.cnblogs.com/liang1101/p/6641082.html

  • 相关阅读:
    bootstrap-treeview 实现级联选择
    MockMvc
    TCP的三次握手与四次挥手的理解
    多线程之按序打印
    java后端学习流程
    nginx安装配置
    今天给大家分享个玩具——树莓派
    nginx启动报错
    springboot自定义注解
    初探企业级应用开发主流前沿技术
  • 原文地址:https://www.cnblogs.com/yorkyang/p/8392172.html
Copyright © 2020-2023  润新知