Open imjoey opened 7 years ago
NATS(Go版)是一款高性能、简单、易于扩展的分布式消息系统,它非常适用于云计算和微服务平台。本文介绍NATS的特点,为未来消息系统选型做准备。
一个消息系统,需要考量以下点:
NATS只提供消息投递的Pub-Sub模型,但基于此模型,NATS提供了三种使用方式。
此模式下,NATS可实现one-to-many消息投递。由于NATS采用了fire-and-forget机制,在publisher发布消息时,任何非active的subscriber均不能收到该消息(NATS不支持消息的持久化)。
此模式下,NATS可实现point-to-point和one-to-many通信模式。Point-to-point是让所有subcriber拼快,第一个响应返回的就是Reply;而One-to-many是Publisher可配置要收到Subcriber响应的数量。
此模式下,NATS可实现Subcribers之间的负载均衡。每个Subcriber可注册queue名字,凡是注册相同名字queue的subcribers就组成了一个queuegroup。Publisher向对应subject发布的消息会随机(而且只)发给一个subcriber。
NATS支持集群化部署方式,NATS集群可组成一个具有高容量、高弹性、高可用的分布式消息系统。
注:NATS各节点间的消息转发hop最多只有一次。
NATS集群中每个节点在启动gnastd服务时需指定配置文件,配置文件中设置了本节点可route消息的节点列表。本节点只能将发布给自己的消息转发给在列表中的节点,而且转发给自己的消息不可再次转发。
NATS不支持消息持久化(消息的堆积)。
由于NATS不支持消息的持久化,所以重启后消息会丢失。
NATS可以保证对于每一个Publisher的消息的顺序,但不保证多Publisher之间的消息顺序。
由于NATS采用了fire-and-forget机制,而且不支持消息持久化,所以NATS只支持at-most-once投递策略,
另外,NATS支持自动断开问题subcribers:
注:Subcriber的重试机制由客户端自行实现。
由于NATS不支持消息持久化和消息事务,所以它的性能非常好,发送/接收的吞吐量是其他MQ的若干倍,详见 官方介绍。
前言
NATS(Go版)是一款高性能、简单、易于扩展的分布式消息系统,它非常适用于云计算和微服务平台。本文介绍NATS的特点,为未来消息系统选型做准备。
调研的要点
一个消息系统,需要考量以下点:
功能
NATS只提供消息投递的Pub-Sub模型,但基于此模型,NATS提供了三种使用方式。
Pub-Sub
此模式下,NATS可实现one-to-many消息投递。由于NATS采用了fire-and-forget机制,在publisher发布消息时,任何非active的subscriber均不能收到该消息(NATS不支持消息的持久化)。
Request-Reply
此模式下,NATS可实现point-to-point和one-to-many通信模式。Point-to-point是让所有subcriber拼快,第一个响应返回的就是Reply;而One-to-many是Publisher可配置要收到Subcriber响应的数量。
Queueing
此模式下,NATS可实现Subcribers之间的负载均衡。每个Subcriber可注册queue名字,凡是注册相同名字queue的subcribers就组成了一个queuegroup。Publisher向对应subject发布的消息会随机(而且只)发给一个subcriber。
高可用
NATS支持集群化部署方式,NATS集群可组成一个具有高容量、高弹性、高可用的分布式消息系统。
注:NATS各节点间的消息转发hop最多只有一次。
消息持久化
NATS不支持消息持久化(消息的堆积)。
Fault Tolerance
由于NATS不支持消息的持久化,所以重启后消息会丢失。
消息顺序
NATS可以保证对于每一个Publisher的消息的顺序,但不保证多Publisher之间的消息顺序。
消息投递策略
由于NATS采用了fire-and-forget机制,而且不支持消息持久化,所以NATS只支持at-most-once投递策略,
其他特点
另外,NATS支持自动断开问题subcribers:
注:Subcriber的重试机制由客户端自行实现。
性能
由于NATS不支持消息持久化和消息事务,所以它的性能非常好,发送/接收的吞吐量是其他MQ的若干倍,详见 官方介绍。