文章目录
前言
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
最上方的nsqd1,nsqd2,nsqd3,nsqd4都是nsqd的单个节点,至少需要开一个,也可以根据实际需要开多个
nsqd是整个nsq系统的核心,且和我们的连接端,所有的nsqlookupd都直接通讯,nsqd实现了如下功能
topic的创建,清空,暂停,重新激活,销毁,同步
channel的创建,清空,暂停,重新激活,销毁,同步
message的产生,监听,中转,持久化(保存到文件,从文件加载),主动推送消息给各个客户端,消息计数
配置修改,运行状态(协程、内存)统计
部件:nsqlookupd
架构图中间的nsqlookupd1,nsqlookupd2 是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的各个部件有个大致的认识,后面我们开始对这些部件详细讲解,我尽量做到每写一篇博客就更新这里文章来源:https://www.toymoban.com/news/detail-612819.html
nsqd的架构及源码分析_YZF_Kevin的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-612819.html
到了这里,关于nsq整体架构及各个部件作用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!