首页 > 其他分享 >nsq整体架构及各个部件作用详解

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

时间:2023-07-29 20:06:11浏览次数:45  
标签:架构 部件 nsqlookupd topic 详解 nsqd nsq channel


文章目录

        前言

        nsq的整体架构图

        部件:nsqd

        部件:nsqlookupd

        部件:nsq连接库

        部件:nsqadmin 


前言

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

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

nsq的整体架构图

nsq整体架构及各个部件作用详解_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整体架构及各个部件作用详解_github_02

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

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

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

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

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

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

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

好了,大家先对nsq的各个部件有个大致的认识,后面我们开始对这些部件详细讲解

todo

标签:架构,部件,nsqlookupd,topic,详解,nsqd,nsq,channel
From: https://blog.51cto.com/u_15912066/6895008

相关文章

  • 《面试1v1》Kafka的架构设计是什么样子
    面试官:嗨,小明!听说你对Kafka的架构设计很感兴趣,是吗?候选人:是的,我一直对Kafka很好奇。它是如何处理大规模数据流的呢?面试官:哈哈,没错!Kafka是一个强大的分布式流处理平台。它的架构设计非常有趣,我们来一起探索一下吧!候选人:太好了!我迫不及待想了解更多。面试官:那我们先从Kafka的基......
  • 性能优化之详解各种指标
    前言上篇文章最后提到了我们可以通过performance的一些属性对性能做统计,我们会发现performance对象下有非常多的属性,远不止上篇文章提到的DOMContentLoaded与Load这两个事件。或许你在浏览器控制台见过它们这些身影:DCL、LCP、FP、FCP、L这里的DCL与L就是我们上篇文章介绍的DOMConte......
  • 【d2l】【常见函数】【19】 torch.squeeze( ), torch.unsqueeze( )
    torch.squeeze()压缩大小为1的维度参考:https://pytorch.org/docs/stable/generated/torch.squeeze.htmltorch.unsqueeze()在指定的维度处增加一个维度,大小为1参考:https://pytorch.org/docs/stable/generated/torch.unsqueeze.html......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的并且指定cuda和cudnn版本的docker镜像
    本篇讲的重点是如何拉取带有cuda和cudnn的docker镜像,因此这些的镜像源的频道为NVIDIA:官方地址:https://hub.docker.com/r/nvidia/cuda   根据官方资料我们知道NVIDIA的docker的tag分为三类:  base版本、runtime版本、devel版本:base版本只安装了cuda,runtime版本安装......
  • 快读快写 原理详解
    快读快写原理详解目录快读快写原理详解代码快读readquickly快写writequickly代码解释快读第一部分第二部分第三部分第四部分第五部分快写第一部分第二部分第三部分第四部分第五部分参考文献C++的cincout和C的scanfprintf等IO函数已经够我们是用了,但是它们很慢,......
  • EF 管理数据库架构
    本章会主要了解EF提供的独立迁移项目,用独立迁移项目自动创建dgml设计关系图和sql脚本。迁移项目通常也叫(CodeFirst代码优先),在EF中迁移项目是在,在代码中设计数据库,每次对数据库的设计都将被保留记录。这种模式只会向前修改,不会向后修改。因为一旦数据已经存在,不易删除改变结构,只能......
  • 如何拉取指定CPU架构的并且指定ubuntu版本的docker镜像
     拉取不同CPU架构下ubuntu22.04镜像:aarch64(armv8)CPU架构:dockerpull--platform=linux/aarch64ubuntu:22.04 x86_64CPU架构:dockerpull--platform=linux/x86_64ubuntu:22.04  ---------------------------------------------------------------------------......
  • PHP8的标记风格-PHP8知识详解
    欢迎来到PHP服务网学习PHP8的知识详解系列教程,本文学习的是PHP8的标记风格,本文教程纠正了很多网站的错误知识,补充了很多教程网站的遗漏之处,虽然很多网站的文章标题也是PHP标记风格。但是很多教程却不适合PHP8的版本了。当PHP8解析一个文件时,PHP8会寻找起始标记和结束标记,也就是<?......
  • PHP8的注释-PHP8知识详解
    欢迎你来到PHP服务网,学习《PHP8知识详解》系列教程,本文学习的是《PHP8的注释》。什么是注释?注释是在程序代码中添加的文本,用于解释和说明代码的功能、逻辑或其他相关信息。注释通常不会被编译器或解释器处理,而是用于帮助程序员理解代码。在大多数编程语言中,注释以特定的语法结构或......
  • KV存储架构学习
    原文: 美团万亿级KV存储架构与实践美团KV存储历程一致性hash->memcached宕机摘除节点,会丢失数据扩容一致性hash也会丢数据。一致性hash->redis主从哨兵可以管理节点宕机扩缩容还是不行。阿里Tair美团基于tair研发出Cellar美团自研Squirrel基于开源redi......