介绍
NSQ 是一个实时分布式消息平台。
特性:
- 支持无单点故障的分布式拓扑
- 水平可扩展
- 低延迟,高性能的消息传递
- 负载均衡和消息多播路由
- 擅长流式(高吞吐)处理和面向作业(低吞吐)的工作负载
- 主要在内存中,超过限制将透明的保存在磁盘上。
- 提供消费者查找生产者的服务发现
- 等等…
说明
- NSQ 主要是内存消息传递平台,默认情况下,消息会在内存中,这也意味着当服务崩溃时会发生丢失,可以通过
--mem-queue-size=0
来控制将每条消息都持久化到硬盘上。 - 消息至少传递一次。这意味着由于各种原因(超时/断开连接/重新排队),消息可以多次传递。执行幂等操作或重复数据删除是用户的责任。
- 收到消息是无序的,不能依赖消息的顺序。
- 消费者最终找到所有主题生产者,发现服务被设计最终一致。
设计
单个 nsqd 实例支持同时处理多个数据流,流称为 “主题”,一个主题有1 个或多个"通道",每个通道都会主题的所有消息的副本。一个通道通常可以连接多个客户端,假设这些客户端都处于接收消息状态,则消息会随机传递过去。
首次发布到指定主题时,创建主题,首次订阅指定主题时,创建通道。
内部设计
NSQ 由 3 个守护进程组成
- nsqd,接收消息,排队消息,传递消息给客户端的进程
- nsqlookupd 管理拓扑信息并提供最终一致的服务发现
- nsqadmin,是一个 Web UI,用于实时检查集群