NSQ

Go 语言消息队列

介绍

NSQ 是一个实时分布式消息平台。

特性:

  • 支持无单点故障的分布式拓扑
  • 水平可扩展
  • 低延迟,高性能的消息传递
  • 负载均衡和消息多播路由
  • 擅长流式(高吞吐)处理和面向作业(低吞吐)的工作负载
  • 主要在内存中,超过限制将透明的保存在磁盘上。
  • 提供消费者查找生产者的服务发现
  • 等等…

说明

  • NSQ 主要是内存消息传递平台,默认情况下,消息会在内存中,这也意味着当服务崩溃时会发生丢失,可以通过 --mem-queue-size=0 来控制将每条消息都持久化到硬盘上。
  • 消息至少传递一次。这意味着由于各种原因(超时/断开连接/重新排队),消息可以多次传递。执行幂等操作或重复数据删除是用户的责任。
  • 收到消息是无序的,不能依赖消息的顺序。
  • 消费者最终找到所有主题生产者,发现服务被设计最终一致。

设计

单个 nsqd 实例支持同时处理多个数据流,流称为 “主题”,一个主题有1 个或多个"通道",每个通道都会主题的所有消息的副本。一个通道通常可以连接多个客户端,假设这些客户端都处于接收消息状态,则消息会随机传递过去。

首次发布到指定主题时,创建主题,首次订阅指定主题时,创建通道。

nsqd clients

内部设计

NSQ 由 3 个守护进程组成

  • nsqd,接收消息,排队消息,传递消息给客户端的进程
  • nsqlookupd 管理拓扑信息并提供最终一致的服务发现
  • nsqadmin,是一个 Web UI,用于实时检查集群

参考

NSQ 官方文档

Licensed under CC BY-NC-SA 4.0
本文阅读量 次, 总访问量 ,总访客数
Built with Hugo .   Theme Stack designed by Jimmy