nsq整体架构及各个部件作用详解

文章目录

        前言

        nsq的整体架构图

        部件:nsqd

        部件:nsqlookupd

        部件:nsq连接库

        部件:nsqadmin 


前言

上两篇博客

centos环境搭建nsq单点_YZF_Kevin的博客-CSDN博客

linux环境搭建nsq集群_YZF_Kevin的博客-CSDN博客

我们讲了nsq是什么,有什么用,它的内部组成部件,下载,单点搭建,集群搭建等等

这一篇博客,我们开始讲nsq的整体架构、运行时的总体流程图,各个部件的作用

首先解释下三个重要概念

topic        :        主题也叫话题。常用于表示某个事件,不同topic的名字不可重复。例如玩家成功登录游戏后,我们一般都会抛出一个Login的事件,其他服收到该事件后会进行一些处理。此时可以认为topic的名字就是 "Login"

channel   :        监听。topic和某个处理进程之间的通道,一个topic下面至少要有一个,可以有多个channel。还是以玩家成功登录游戏为例,活动服需要监听这个topic时,需要定义一个唯一名字的channel;游戏服需要监听这个topic时,也需要定义一个唯一名字的channel;只有这样当玩家成功登陆游戏时才能既通知到活动服,又通知到游戏服

message  :       具体的消息。某个topic下面可以一直触发message。还是以上面的玩家登录为例,玩家A登录成功,会触发一个message,内部包含玩家A的信息。玩家B登陆成功,也会触发一个message,内部包含玩家B的信息。这样处理进程收到message后才能区分消息内是哪个玩家的登录成功信息

nsq的整体架构图

详细解释下

部件:nsqd

最上方的nsqd1nsqd2nsqd3nsqd4都是nsqd的单个节点,至少需要开一个,也可以根据实际需要开多个

nsqd是整个nsq系统的核心,且和我们的连接端,所有的nsqlookupd都直接通讯,nsqd实现了如下功能

topic的创建,清空,暂停,重新激活,销毁,同步

channel的创建,清空,暂停,重新激活,销毁,同步

message的产生,监听,中转,持久化(保存到文件,从文件加载),主动推送消息给各个客户端,消息计数

配置修改,运行状态(协程、内存)统计

部件:nsqlookupd

架构图中间的nsqlookupd1nsqlookupd2 是nsqlookupd的单个节点用于记录nsqd的注册,活跃维持,给连接客户端做nsqd的服务发现。

至少需要开一个,也可以根据实际需要开多个,以实现服务的高可用。使用连接端连接nsqlookup时可以直接给一个nsqlookupd地址的数组,连接端内部会轮询访问,这样即使某个nsqlookupd挂掉了或者网络问题断掉了,其他nsqlookupd进程依然可以提供服务。

部件:nsq连接库

架构图下面的是nsq连接库。它需要先跟某个nsqlookupd进行通讯(http),取到所有活跃nsqd的信息,再对所有的nsqd进行通讯(tcp和http)。连接端可以有多种身份

可以作为生产者,进行topic创建、销毁,产生消息推送给nsqd

可以作为消费者,监听指定topic或指定channel,处理nsqd推送过来的消息

还可以既是生产者产生消息,又是消费者处理消息,当然这种情况下,生产和消费的是不同类型消息

注意:nsq连接端的内部实现还是有点复杂的,至少几千行代码,如果实现得不好可能会连累nsqd出问题。但nsq作者并没有把它包含进nsq内部,可能是认为连接库应该交给第三方来实现吧,所以他用go语言实现了连接库go-nsq,放在了nsq的平台,作为go语言的官方推荐连接库,等于是打了个样版

还有其他语言的第三方连接端,nsq作者都放在nsq官方github的首页,大家可以找一下有没有自己需要的,地址 https://github.com/nsqio

常见的语言已有实现,例如:

python语言的是pynsq   github地址GitHub - nsqio/pynsq: The official Python client library for NSQ

java语言的是nsq-java    github地址https://github.com/nsqio/libnsq

c语言的是libnsq      github地址GitHub - nsqio/nsq-java: official Java client library for NSQ

部件:nsqadmin 

架构图右侧有一个nsqadmin进程,它实现了一个简单的web界面,方便用户查看,操作。

nsqadmin要和所有的nsqlookupd进行连接,收集统计信息。它只是个辅助UI,没必要多开

我们一个测试服的nsqadmin界面如下

 在NSQ页面,可以查看所有的topic

可以选择一个topic点击进去,能看到这个topic的统计信息,比如归属的nsqd进程,消息数量(内存中,磁盘中),拥有的channel数量,以及所有channel

也可以选择一个channel点击进去,能看到这个channel的统计信息,比如消息统计(内存中,磁盘中),IN-Flight表飞行中(处理中)的消息数;Deferred表延迟消息的数;Requeued表因处理失败再次入队的消息数

你可以对这些topic和channel进行操作,比如清空,暂停/重新激活,删除等等

Nodes页面,可以查看所有的nsqd进程信息

Counter页面,可以看到总消息数量

Lookup页面,可以查看所有的nsqlookupd进程信息

好了,大家先对nsq的各个部件有个大致的认识,后面我们开始对这些部件详细讲解,我尽量做到每写一篇博客就更新这里

nsqd的架构及源码分析_YZF_Kevin的博客-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值