

高性能消息中间件 NSQ 解析-整体介绍
source link: http://blueskykong.com/2021/03/03/nsq-1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。
一提到消息队列 MQ(Message Queue),我们会想到很多应用场景,比如消息通知、用户积分增减、抽奖中奖等,可以看出来 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、广播分发,达到数据的最终一致性,满足具体的业务场景需求。
Nsq 是用 Go 语言开发的轻量级的分布式消息队列,适合小型项目使用、用来学习消息队列实现原理,对于学习 Go channel的原理和用法,以及如何用 Go 语言来写分布式是一个很不错的入门项目。
Nsq 模块介绍
NSQ 最初是由 bitly 公司开源出来的一款简单易用的分布式消息中间件,它可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息。
NSQ 特性
NSQ 具有如下特性:
- 分布式: 它提供了分布式的、去中心化且没有单点故障的拓扑结构,稳定的消息传输发布保障,能够具有高容错和高可用特性。
- 易于扩展: 它支持水平扩展,没有中心化的消息代理( Broker ),内置的发现服务让集群中增加节点非常容易。
- 运维方便: 它非常容易配置和部署,灵活性高。
- 高度集成: 现在已经有官方的 Golang、Python 和 JavaScript 客户端,社区也有了其他各个语言的客户端库方便接入,自定义客户端也非常容易。
NSQ 组件
首先看下 NSQ 的项目结构:
核心包为:nsqd、nsqadmin 和 nsqlookupd。apps 包中存放了各个入口方法。
- nsqd: nsqd 是一个守护进程,负责接收(生产者 producer )、排队(最小堆实现)、投递(消费者 consumer )消息给客户端。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的。
- nsqlookupd: nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题( topic )的生产者,并且 nsqd 节点广播话题(topic)和通道( channel )信息。有两个接口: TCP 接口, nsqd 用它来广播。 HTTP 接口,客户端用它来发现和管理。
- nsqadmin: nsqadmin 是一套 WEB UI,用来汇集集群的实时统计,并执行不同的管理任务。
除此之外,图中还涉及到一些基本的概念:
- Topic:一个 topic 就是程序发布消息的一个逻辑键,当程序第一次发布消息时就会创建 topic。
- Channels: channel 与消费者相关,是消费者之间的负载均衡, channel 在某种意义上来说是一个“队列”。每当一个发布者发送一条消息到一个 topic,消息会被复制到所有消费者连接的 channel 上,消费者通过这个特殊的 channel 读取消息,实际上,在消费者第一次订阅时就会创建 channel。 Channel 会将消息进行排列,如果没有消费者读取消息,消息首先会在内存中排队,当量太大时就会被保存到磁盘中。
- Messages:消息构成了我们数据流的中坚力量,消费者可以选择结束消息,表明它们正在被正常处理,或者重新将他们排队待到后面再进行处理。每个消息包含传递尝试的次数,当消息传递超过一定的阀值次数时,我们应该放弃这些消息,或者作为额外消息进行处理。
常用工具类:
- nsq_to _file:消费指定的话题(topic)/通道(channel),并写到文件中,有选择的滚动和/或压缩文件。
- nsq_to _http:消费指定的话题(topic)/通道(channel)和执行 HTTP requests (GET/POST) 到指定的端点。
- nsq_to _nsq:消费者指定的话题/通道和重发布消息到目的地 nsqd 通过 TCP。
本文主要介绍 nsq 的模块、特性及其组成部分。nsq 专门为分布式、集群化而生,在处理 SPOF(single point of failure, 单点故障)、高可用、最终一致性方面很有优势。
订阅最新文章,欢迎关注我的公众号
赞赏是不耍流氓的鼓励
Recommend
-
39
前 言 这段时间我的主要工作内容是将公司系统中使用的RabbitMQ替换成NATS,而此之前我对Nats一无所知。经过一段时间紧张的学习和开发之后我顺利的完成了任务,并对消息中间件有了更深的了解。在此感谢同事钟亮在此过程中对我的...
-
32
网上看了好多,都是抄个官网 README,很多重要的东西不说清楚。只好自己研究了一下。本人博客,关键词 Less-Bug.com ,欢迎关注。NSQ 的全家桶介绍nsqd:守护进程,客户端通信。默认端口 4150(TCP) 4151
-
4
高性能消息中间件 NSQ 解析-窥探 nsq 设计思路(一)
-
39
高性能消息中间件 NSQ 解析-应用实践
-
4
高性能消息中间件 NSQ 解析-nsqd 实现细节介绍
-
10
高性能消息中间件 NSQ 解析-nsqlookupd 实现细节介绍
-
28
NSQ消息Inflight机制 发表于 2018-12-10 ...
-
4
作者 | 葛贤亮,单位:中国移动智慧家庭运营中心Labs 导读近年来,互联网技术发展迅猛,各行各业的信息量急剧膨胀。随着云计算和算力网络时代的到来,消息中间件在国内许多行业的关键应用中越来越受到重视。在高并发分布式...
-
4
消息中间件系列介绍-传输与消费模式 作者:移动Labs 2022-10-28 13:33:05 开发 虽然Push模式在语义上更符合事件驱动架构风格,但在当...
-
5
作者 | 葛贤亮,单位:中国移动智慧家庭运营中心Labs 导读近年来,互联网技术发展迅猛,各行各业的信息量急剧膨胀。随着云计算和算力网络时代的到来,消息中间件在国内许多行业的关键应用中越来越受到重视。在高并发分布式...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK