当前位置:网站首页>基于NSQ搭建高可用分布式消息队列
基于NSQ搭建高可用分布式消息队列
2022-08-05 11:38:00 【叶赫那拉 赫敏】
NSQ介绍
NSQ是一款Go语言编写的开源分布式消息队列中间件,具备非常好的性能、易用性和可用性。
性能方面,采用了分布式可横向扩展的架构,让其适用于超大规模的消息实时处理,能够满足绝大部业务量级的需要;
易用性方面,NSQ配置和部署都非常的简便,提供了清晰的文档和多语言且功能全面的SDK,同时还提供了浏览器nsqadmin、nsqlookupd等非常好用的易用性组件,nsqadmin可以实现可视化的管理消息集群;
可用性方面,NSQ具备非常高质量的工程实现,程序鲁棒性非常好,完全具备长期自动稳定运行的能力。在架构上,NSQ采用了分布式和去中心化的拓扑结构,可实现无单点的高可用部署。在消息消费上采用了RDY-FIN设计,确保消息被可靠消费。
NSQ是一款非常成熟的消息队列中间件,已在大规模生成环境下应用验证。
核心组件
nsqd、nsqlookupd、nsqadmin是NSQ的三个关键组件,三个组件独立部署运行。
nsqd是NSQ最核心的组件,负责接收消息,存储队列和将消息发送给客户端。nsqd 可以多机器部署,当使用客户端向一个topic发送消息时,可以配置多个nsqd地址,消息会随机的分配到各个nsqd上,nsqd优先把消息存储到内存channel中(也可以通过配置让消息全部落盘存储),当内存channel满了之后,则把消息写到磁盘文件中。nsqd可以独立运行。
一个nsqd中可以创建多个队列(topic)。支持组播,一个队列可以有多个通道(channel)来同时消费,每个通道都将接收到这个队列中所有消息的副本,保证每个通道中消费到的消息一致,各通道可以有自己的消费进度,互相不会影响。
nsqlookupd负责管理拓扑信息,提供最终一致服务发现能力。客户端可以通过查询 nsqlookupd 来发现指定队列(topic)的nsqd地址。
nsqadmin提供了一个非常好用的可视化管理后台,可以可视化的管理队列和查询消息处理情况。
通常在生成环境中,这三个组件会一起部署。
部署拓扑
虽然机器故障是小概率事件,但是也无法彻底避免,我们要提供高可用的服务,就必要考虑机器故障。NSQ采用的是一个完全分布式的拓扑结构,非常适合构建起一个高可用的消息集群。
要实现高可用,有多个等级,比如部分兼容机器故障、兼容单机房故障、兼容地域主干网络故障等等。绝大部分的业务场景下,做到兼容部分机器故障是基本要求,这里我们主要总结下如何兼容部署机器故障,如果要做到更高的可用性部署拓扑也类似,就是多机房、多地域部署。
nsqd的数量决定整个集群的吞吐能力,NSQ具备非常好的消息处理性能,具体按实际业务量级决定部署nsqd节点规模,但考虑到可用性, 最少不要少于3个nsqd节点,同样也不要少于3个nsdlookupd节点。
示例部署拓扑:
启动3个nsdlookupd,所有nsqd都连接到这三个nsdlookupd。生成消息是直接通过负载均衡写入到nsqd,如果那个nsqd挂掉,生产者就无法继续往这个nsqd写消息了。消费消息通过nsdlookupd做服务发现,配置3个+nsdlookupd,其中某个挂掉不会影响消息消费,nsqd仍然可以通过其他nsdlookupd被发现。nsqadmin是个web-ui管理后台,无任何本地状态,单机部署多机部署都可以。
消息备份/回放
前面我们做到了一个高可用的部署拓扑,但是由于消息是写到一个单一的nsqd的,如果那个nsqd部署机器挂掉无法恢复,可能会导致这个nsqd中积压的消息丢失。所以我们还需要设计消息备份和异常回放的机制。
01
备份
◆ NSQ提供了nsq_to_file工具,可以用来做消息备份。所有消息实时备份到本地文件,按小时切割文件,消息文件三备份,备份数据存储n天。
◆ 需要备份的消息使用nsq_to_nsq工具,同步写入备份队列,备份机器上运行nsq_to_file订阅备份队列的数据,写到磁盘备份。
02
回放
◆ 机器挂掉能重启恢复,重启恢复后重启服务即可,nsqd的内存队列大小设置为0,数据全部落盘,重启不会丢失数据。
◆ 机器不能重启恢复的情况下,从备份数据中回放该nsqd的备份消息。需要注意回放时对消息去重,因为写备份时采用全部备份写成功才算成功的方案,可能会导致消息重复。
集群监控
同时我们还需要部署监控,实时监控NSQ集群的运行情况,以便出现问题时能技术感知修复。
1
机器状态:cpu、内存、磁盘、网络等;
2
服务状态:进程、端口存活等;
3
消息队列:队列数量、队列积压情况等;
这样就可以做到整个系统无单点,数据三备份,及时感知集群异常。做到一个基础的可用性要求,能够满足绝大部分的场景使用了。
边栏推荐
- Exploration and practice of transaction link under multi-service mode
- SonarQube即将亮相第十八届GOPS全球运维大会
- 申请百度地图API Key进行百度地图开发,获取经纬度对应地点
- Linux: Remember to install MySQL8 on CentOS7 (blog collection)
- No developers, received a job to develop an IoT system, do you want to do it?
- hdu1455 Sticks(搜索+剪枝+剪枝+.....+剪枝)
- Keras 模型多输出 loss weight metrics 设置
- 没开发人员,接到开发物联网系统的活儿,干不干?
- [7.29-8.5] Review of wonderful technical blog posts in the writing community
- 365天挑战LeetCode1000题——Day 050 在二叉树中增加一行 二叉树
猜你喜欢
Go Quick Start Guide: Basic Types
有多一只“手”的机器狗出没?就在昇腾AI开发者创享日·南京站
Android 开发用 Kotlin 编程语言 二 条件控制
Hands-on Deep Learning_GoogLeNet / Inceptionv1v2v3v4
Android development with Kotlin programming language II Conditional control
Version Control | Longzhi invites you to go to the GOPS Global Operation and Maintenance Conference to explore the road of large-scale, agile, high-quality and open software development and operation
支持向量机SVM
2022 CCF国际AIOps挑战赛决赛暨AIOps研讨会报名已开启
Byte Qiu Zhao confused me on both sides, and asked me under what circumstances would the SYN message be discarded?
Naive bayes
随机推荐
硅谷来信:快速行动,Facebook、Quora等成功的“神器”!
Image segmentation model - a combination of segmentation_models_pytorch and albumations to achieve multi-category segmentation
IPMP、PMP、CPMP三个证书该如何选择,有什么区别,哪个对于工作上的
Google启动通用图像嵌入挑战赛
Official release 2022 Nanjing Zhibo Expo is scheduled to be held in Xinzhuang National Exhibition in October
知乎提问:中国是否还能实现伟大民族复兴
四、kubeadm单master
祝所有码农七夕快乐~
Student Information Management System (first time...)
I'm going crazy.Again A few days can not be A problem
Flink Yarn Per Job - RM启动SlotManager
机器学习——集成学习
Http-Sumggling缓存漏洞分析
Five reasons why developers choose Klocwork, a static analysis tool for code quality, for software security
Linux:记一次CentOS7安装MySQL8(博客合集)
五大理由告诉你为什么开发人员选择代码质量静态分析工具Klocwork来实现软件安全
常见的 web 安全问题总结
Version Control | Longzhi invites you to go to the GOPS Global Operation and Maintenance Conference to explore the road of large-scale, agile, high-quality and open software development and operation
【硬件架构的艺术】学习笔记(2)同步和复位
花的含义