nats是一个开源的,云原生的消息系统。Apcera,百度,西门子,VMware,HTC和爱立信等公司都有在使用。
核心基于EventMachine开发,原理是基于消息发布订阅机制,每台服务器上的每个模块会根据自己的消息类别向MessageBus发布多个消息主题,而同时也向自己需要交互的模块,按照需要的主题订阅消息。能够达到每秒8-11百万个消息,整个程序很小只有3M Docker image,它不支持持久化消息,如果你离线,你就不能获得消息。使用nats streaming可以做到持久化,缓存等功能。
NATS server
nats提供了一个go编写的轻量级服务器。发行版包括二进制和docker镜像
NATS clients
nats官方提供的客户端有Go,Node,Ruby,Java,C,C#,NGINX等。
NATS 设计目标
核心原则是性能,可伸缩和易用性。
- 高效
- 始终在线和可用
- 非常轻巧
- 支持多种质量的服务
- 支持各种消息传递模型和使用场景
NATS 使用场景
nats是一个简单且强大的消息系统,为支持现代云原生架构设计。由于可伸缩性的复杂性,nats旨在容易使用和实现,且能提供多种质量的服务。
一些适用nats的场景有:
- 高吞吐量的消息分散 —— 少数的生产者需要将数据发送给很多的消费者。
- 寻址和发现 —— 将数据发送给特定的应用实例,设备或者用户,也可用于发现并连接到基础架构中的实例,设备或用户。
- 命令和控制(控制面板)—— 向程序或设备发送指令,并从程序/设备中接收状态,如SCADA,卫星遥感,物联网等。
- 负载均衡 —— 主要应用于程序会生成大量的请求,且可动态伸缩程序实例。
- N路可扩展性 —— 通信基础架构能够充分利用go的高效并发/调度机制,以增强水平和垂直的扩展性。
- 位置透明 —— 程序在各个地理位置上分布者大量实例,且你无法了解到程序之间的端点配置详情,及他们所生产或消费的数据。
- 容错
使用nats-streaming的附加场景有:
- 从特定时间或顺序消费
- 持久性
- 有保证的消息投递
NATS消息传递模型
- 发布订阅
- 请求回复
- 排队
NATS的特点
nats的独特功能有:
- 纯净的pub-sub
- 集群模式的server
- 订阅者的自动裁剪
- 基于文本的协议
- 多种服务质量
- 最多一次投递
- 至少一次投递
- 持久
- 缓存