全栈算力,加速行业AI落地 了解详情
写点什么

NSQ:分布式的实时消息平台

  • 2015-02-06
  • 本文字数:1673 字

    阅读完需:约 5 分钟

NSQ 是一个基于 Go 语言的分布式实时消息平台,它基于 MIT 开源协议发布,代码托管在 GitHub,其当前最新版本是 0.3.1 版。NSQ 可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。NSQ 具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ 非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用 Go 和 Python 库。如果读者兴趣构建自己的客户端的话,还可以参考官方提供的协议规范

NSQ 是由四个重要组件构成:

  • nsqd :一个负责接收、排队、转发消息到客户端的守护进程
  • nsqlookupd :管理拓扑信息并提供最终一致性的发现服务的守护进程
  • nsqadmin :一套 Web 用户界面,可实时查看集群的统计数据和执行各种各样的管理任务
  • utilities :常见基础功能、数据流处理工具,如 nsq_stat、nsq_tail、nsq_to_file、nsq_to_http、nsq_to_nsq、to_nsq

NSQ 的主要特点如下:

  • 具有分布式且无单点故障的拓扑结构 支持水平扩展,在无中断情况下能够无缝地添加集群节点
  • 低延迟的消息推送,参见官方提供的性能说明文档
  • 具有组合式的负载均衡和多播形式的消息路由
  • 既擅长处理面向流(高吞吐量)的工作负载,也擅长处理面向 Job 的(低吞吐量)工作负载
  • 消息数据既可以存储于内存中,也可以存储在磁盘中
  • 实现了生产者、消费者自动发现和消费者自动连接生产者,参见 nsqlookupd
  • 支持安全传输层协议(TLS),从而确保了消息传递的安全性
  • 具有与数据格式无关的消息结构,支持 JSON、Protocol Buffers、MsgPacek 等消息格式
  • 非常易于部署(几乎没有依赖)和配置(所有参数都可以通过命令行进行配置)
  • 使用了简单的 TCP 协议且具有多种语言的客户端功能库
  • 具有用于信息统计、管理员操作和实现生产者等的 HTTP 接口
  • 为实时检测集成了统计数据收集器 StatsD
  • 具有强大的集群管理界面,参见 nsqadmin

为了达到高效的分布式消息服务,NSQ 实现了合理、智能的权衡,从而使得其能够完全适用于生产环境中,具体内容如下:

  • 支持消息内存队列的大小设置,默认完全持久化(值为 0),消息即可持久到磁盘也可以保存在内存中
  • 保证消息至少传递一次, 以确保消息可以最终成功发送
  • 收到的消息是无序的, 实现了松散订购
  • 发现服务 nsqlookupd 具有最终一致性, 消息最终能够找到所有 Topic 生产者

官方和第三方还为 NSQ 开发了众多客户端功能库,如官方提供的基于 HTTP 的 nsqd 、Go 客户端 go-nsq 、Python 客户端 pynsq 、基于 Node.js 的 JavaScript 客户端 nsqjs 、异步 C 客户端 libnsq 、Java 客户端 nsq-java 以及基于各种语言的众多第三方客户端功能库。更多客户端功能库, 请读者点击这里查看。

从NSQ 的设计文档中得知,单个nsqd 被设计为一次能够处理多个流数据,NSQ 中的数据流模型是由stream 和consumer 组成。Topic 是一种独特的stream,Channel 是一个订阅了给定Topic 的consumer 逻辑分组。NSQ 的数据流模型结构如下图所示:

从上图可以看出,单个nsqd 可以有多个Topic,每个Topic 又可以有多个Channel。Channel 能够接收Topic 所有消息的副本,从而实现了消息多播分发;而Channel 上的每个消息被分发给它的订阅者,从而实现负载均衡,所有这些就组成了一个可以表示各种简单和复杂拓扑结构的强大框架。


NSQ 最初为提供短链接服务的应用 Bitly 而开发。另外,还有众多著名的应用在使用 NSQ,如社交新闻网站 Digg 、私密的社交应用 Path 、著名的开源的应用容器引擎 Docker 、支付公司 Stripe 、新闻聚合网站 Buzzfeed 、查看家人所在位置的移动应用 Life360 、网络工具公司 SimpleReach 等。

有兴趣的读者还可以为 NSQ 贡献代码、反馈问题或者通过官方提供的快速入门教程体验下NSQ 为高吞吐量的网络服务带来的性能提升。有关NSQ 的安装部署、客户端开发等相关信息,请登录其官网查看。


感谢郭蕾对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2015-02-06 10:4648395
用户头像

发布了 46 篇内容, 共 51.5 次阅读, 收获喜欢 15 次。

关注

评论

发布
暂无评论
发现更多内容

数字电源浅析

芯动大师

数字 电源

AJAX 前端开发利器:实现网页动态更新的核心技术

小万哥

xml 程序人生 编程语言 软件工程 前端开发

npm install报错问题解决合集

百度搜索:蓝易云

node.js Linux 运维 npm 云服务器

centos用ssh登录连接缓慢处理

百度搜索:蓝易云

Linux centos 运维 SSH 云服务器

数字人的永生:科技还是幻想?

青否数字人

数字人

牛市下一个板块该轮到谁?Gamefi赛道爆发你吃到了多少?

长安区块链

IntelliJ IDEA 2023:智能编码,让开发更高效!

Rose

ide 编程开发 IntelliJ IDEA 2023破解 IntelliJ IDEA 2023 IDEA 2023激活码

苹果电脑3D壁纸屏保 Screen Wonders动态壁纸

Rose

动态壁纸 Screen Wonders壁纸 苹果电脑屏保 mac屏保

Hype 4 Pro:打造惊艳HTML5动画与交互设计的全能之选

Rose

html5 网页制作 交互设计工具 Hype 4 Pro破解版 Hype 4 Pro下载

《Java核心技术·卷 II(原书第11版)》PDF

程序员李木子

工业物联网App开发:连接未来智能制造的关键

天津汇柏科技有限公司

数字化转型 工业物联网

keyshot2023怎么保存低版本(keyshot2023下载安装教程)

Rose

KeyShot2023pro安装包 keyshot2023下载

ICP Rust CDK|使用Rust构建智能合约并操作canisters

TinTinLand

黑客 编程学习 ICP

flowjo 10破解版图文教程 flowjo 10 mac专业的细胞分析工具

Rose

mac软件下载 流式细胞分析软件 FlowJo 10下载 FlowJo 10破解版

霍格沃兹测试开发学社,全方位的测试解决方案提供商

霍格沃兹测试开发学社

牛市下一个板块该轮到谁?Gamefi赛道爆发你吃到了多少?

石头财经

解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系

股市老人

解读 Xend Finance:向 RWA 叙事拓展,构建更具包容性的 DeFi 体系

股市老人

AI能翻译动物语言吗?

算AI

人工智能

简单shell脚本的编写教程

百度搜索:蓝易云

云计算 Linux 运维 Shell 云服务器

源码解析丨一次慢SQL排查

GreatSQL

慢查询

达芬奇调色软件破解版 davinci resolve 18.6.6最新中文安装包

Rose

DaVinci Resolve 破解 DaVinci Resolve18下载 达芬奇下载 达芬奇视频调色

全智能深度演进,一键成片让视频创作颠覆式提效

阿里云视频云

云计算 媒体 云剪辑

Puppeteer实践:复杂的问题简单化

南城FE

JavaScript 前端 nodejs puppeteer

详解SpringBoot的常用注解

百度搜索:蓝易云

云计算 Linux 运维 springboot 云服务器

想在Mac电脑上畅玩Windows游戏,那就试试CrossOver 24虚拟机吧!

Rose

CrossOver 24 CrossOver 24虚拟机 如何在Mac运行win 苹果电脑虚拟机软件

ICP Rust CDK| 在IC上开发、测试和部署DApps

TinTinLand

黑客 编程学习 ICP

苹果电脑软件开发工具:Xcode 15全新发布

Rose

编程开发 Xcode Mac版 Xcode 15

低代码无法取代程序员,但为什么很多程序员却反感低代码?

天津汇柏科技有限公司

程序员 低代码 数字化转型

七大年度奖项揭晓!40+优秀白帽齐聚百度安全BSRC年度盛典

百度安全

Nacos启动常见报错解决方法

百度搜索:蓝易云

云计算 Linux 运维 nacos 云服务器

NSQ:分布式的实时消息平台_语言 & 开发_李小兵_InfoQ精选文章