NSQ 概述

简介: NSQ 概述

NSQ 是什么?使用 go 语言开发的一款开源的消息队列,具有轻量级、高性能的特点,而关于消息队列,我在之前的文章中介绍过另一款 RabbitMQ,感兴趣的也可以看看:

RabbitMQ 入门系列(一)

RabbitMQ 入门系列(二)

RabbitMQ 入门系列(三)

RabbitMQ 入门系列(四)




01


概述



NSQ 组件:

1、nsqd:接受、排队、传递消息的守护进程,消息队列中的核心。

2、nsqlookupd:管理拓扑信息,其实就是围绕 nsqd 的发现服务,因为其存储了 nsqd 节点的注册信息,所以通过它就可以查询到指定 topic 主题的 nsqd 节点。

3、nsqadmin:一套封装好的 WEB UI ,可以看到各种统计数据并进行管理操作。

4、utilities:封装好的一些简单的工具(实际开发中用的不多)。


如下图所示:

1、生产者 producer 将消息投递到指定的 nsqd 中指定的 topic 主题。

2、nsqd 可以有多个 topic 主题,一旦其接受到消息,将会把消息广播到所有与这个 topic 相连的 channel 队列中。

3、channel 队列接收到消息则会以负载均衡的方式随机的将消息传递到与其连接的所有 consumer 消费者中的某一个。


注意:生产者关注的是 topic,消费者关注的是 channel。消息是存在 channel 队列中的,其会一直保存消息直到有消费者将消息消费掉,同时 channel 队列一旦创建其本身也不会自动消失,另外消息默认是存在内存中的,一旦超过内存大小(可通过 --mem-queue-size 配置)则会被存储到磁盘上。


再看下图:

通过 nsqadmin 可以看到整个集群的统计信息并进行管理,多个 nsqd 节点组成集群并将其基本信息注册到 nsqlookupd 中,通过 nsqlookupd 可以寻址到具体的 nsqd 节点,而不论是消息的生产者还是消费者,其本质上都是与 nsqd 进行通信(如第一张图所示)。



02


其它



1、默认情况下消息不会被持久化到磁盘,只有当超出内存限制时才会将部分消息写入磁盘,但只要设置 --mem-queue-size=0 就可以将所有消息都持久化到磁盘

2、NSQ 保证消息至少被传递一次,但也有可能极端情况下会被传递多次,消费者需要额外注意这一点。

3、消息是无序的。

4、官方建议将 nsqd 与消息的生产者部署到一起,这种模式将消息流构建为消费问题而不是生产问题,这种模式更加简单但非强制。

5、nsqlookupd 并非一定要使用,但在集群模式下建议使用,官方建议每个数据中心部署至少三个 nsqlookupd 就可以应对成百上千的集群节点(每个nsqlookupd 中间是相互独立的,保证其高可用)。

6、topic 和 channel 没有内置的限制,但其会受限于宿主机的CPU和内存性能。

7、nsq 没有复杂的路由,没有 replication 副本备份。



总而言之,NSQ 高效轻量、简单、易于分布式扩展。另外有赞团队自己改造了一版 NSQ 并开源了出来( https://github.com/youzan/nsq ),视频:

https://www.youtube.com/watch?v=GCOvuCKe5zA ,感兴趣的也可以了解下。

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
网络安全 数据安全/隐私保护
等保二级配置(四)口令复杂度策略和禁止root登录
等保二级配置(四)口令复杂度策略和禁止root登录
665 0
|
数据采集 安全 网络协议
DDoS 攻防之 HTTP Flood|学习笔记
快速学习 DDoS 攻防之 HTTP Flood
1769 0
DDoS 攻防之 HTTP Flood|学习笔记
|
传感器 监控 物联网
golang开源的可嵌入应用程序高性能的MQTT服务
golang开源的可嵌入应用程序高性能的MQTT服务
991 3
|
存储 数据采集 安全
各种系统架构图与详细说明
原文:各种系统架构图与详细说明 共享平台逻辑架构设计 如上图所示为本次共享资源平台逻辑架构图,上图整体展现说明包括以下几个方面: 1 应用系统建设 本次项目的一项重点就是实现原有应用系统的全面升级以及新的应用系统的开发,从而建立行业的全面的应用系统架构群。
27770 1
|
网络协议 Serverless
|
机器学习/深度学习 人工智能 并行计算
《量子计算对人工智能发展的深远影响》
在科技发展的浪潮中,量子计算与人工智能的融合正引领着深刻的科技变革。量子计算利用量子比特的叠加和纠缠特性,实现并行计算,显著提升机器学习训练速度、优化问题求解、大数据分析能力及AI模型泛化能力,催生新型AI算法,并拓展新应用领域。然而,这一融合仍面临硬件稳定性和软件开发等挑战。
711 4
《量子计算对人工智能发展的深远影响》
|
SQL 机器学习/深度学习 人工智能
今日 AI 开源|共 4 项|DeepSeek 推出新一代 AI 推理模型,实力比肩 OpenAI o1-preview!
本文介绍了四个最新的 AI 开源项目,涵盖多模态生成式 AI、自然语言到 SQL 转化、多模态数学推理和复杂逻辑推理等多个领域,为 AI 应用开发提供了丰富的资源和工具。
916 0
今日 AI 开源|共 4 项|DeepSeek 推出新一代 AI 推理模型,实力比肩 OpenAI o1-preview!
|
存储 监控 数据库
什么是聚集索引和非聚集索引?
【8月更文挑战第3天】
9695 6
|
数据采集 机器学习/深度学习 算法
Python中的CatBoost高级教程——时间序列数据建模
Python中的CatBoost高级教程——时间序列数据建模【2月更文挑战第14天】
576 1
Python中的CatBoost高级教程——时间序列数据建模
|
消息中间件 存储 Go
Golang微服务框架Kratos应用NSQ消息队列
NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。 NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。 NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。
436 1

热门文章

最新文章