若你在使用Go语言,你应该了解下这个消息系统

NATS简介

消息系统很多,像很多搞Java的人熟知的RocketMQ,Kafka等,包括Go语言中的NSQ。NATS这个消息系统可能在Go语言生态中运用得多,因为Go语言环境中很多人会选中用NSQ而不会选择Kafka,很明显的一个原因是Kafka等其他消息队列需要安装Jvm虚拟机,带来不必要的性能消耗以及真的没必要用jvm。

NATS也是用Go写的一个开源项目,今年来很多流行以及重要的开源项目都是用go写的,如Docker,NSQ,K8S,包括区块链行业的Ethereum、IPFS等重量级项目。

用Go写的一大原因就是高性能,NATS也一样,是一个轻量级的,高性能的,被称为cloud-native的消息系统。NATS的设计旨在原生的支持现代云计算架构模式。

据NATS官网的介绍,像西门子、HTC、百度、VMware等公司都在用NATS。

NATS的设计目标

从NATS的官网可以看出,NATS设计的核心是性能、可伸缩性以及可用性。当然每个消息系统这点都做得都不差,NATS围绕以下核心功能设计:

高性能

永远在线随时可用

极其轻量

支持多种服务特性(如保证至少一次交付)

支持各种消息模型和用列,也即是可伸缩性高。

NATS的消息传递模型

NATS支持的消息传递模型包括:

发布订阅模型

请求响应模型

队列模型

NATS的特性

纯发布订阅模型

从不假设有消息接收者;

总是在线可用。

集群模式服务器

NATS服务可用做集群;

分布式的消息队列可以跨集群;

集群发现的客户端。

订阅者的自动精简

为了支持伸缩,NATS提供客户端连接的自动精简;

如果一个客户端消费消息很慢,那么NATS将断开这个客户端;

如果一个客户端在ping-pong期间内没有响应,那么服务器会将其关闭;

客户端实现了重新尝试连接的逻辑。

基于文本的协议

对于新手来说很容易上手;

不影响服务器性能;

可以直接用Telnet连接到服务器并发送消息。

支持多种服务特性

最多一次交付(TCP级别的可靠性),NATS会立即向合适的订阅者发送消息,但不会保留消息;

至少一次交互(通过NATS流),消息一直存在,直到被订阅者确认,或者超时过气或者存储空间被占满。

持久性的订阅(通过NATS流)

维持订阅的交互状态,以便订阅可以在中断处继续。

事件驱动型数据流服务(通过NATS流)

消息可以持久化到内存、文件、或者其他第三方存储空间中。

缓存上次/初始值

对于一个订阅者来说,可以从最近发布的消息开始发送。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181218G0226H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券