专栏首页陌无崖知识分享NSQ分布式消息基础入门

NSQ分布式消息基础入门

作者 | 陌无崖

转载请联系授权

介绍

NSQ是一个基于Go语言的分布式实时消息平台,可以大规模的运用于实时消息服务,每天可以处理数亿级别的消息,设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。

NSQ核心组件

nsqlookupd

用于守护进程负责管理拓扑信息,它使用tcp(默认端口4160)管理nsqd服务,使用http(默认端口4161)管理nsqadmin服务。同时为客户端提供查询功能。

特点 1、具有唯一性,在一个Nsql服务中只有一个nsqlookupd服务。 2、去中心化,即使该组件崩溃,也不影响正常运行。 3、充当nsqd和naqadmin信息交互的中间件。 4、提供一个http查询服务,给客户端定时更新nsqd的地址目录。

nsqadmin

一套 WEB UI,用来汇集集群的实时统计,并执行不同的管理任务。

功能 1、提供一个对topic和channel统一管理的操作界面以及各种实时监控数据的展示。 2、展示所有message的数量。 3、能够在后台创建topic和channel。 4、nsqadmin的所有功能都必须依赖于nsqlookupd,nsqadmin只是向nsqlookupd传递用户操作并展示来自nsqlookupd的数据。

nsqd

nsqd 是一个守护进程,负责接收,排队,投递消息给客户端

功能或特性 1、对订阅了同一个topic,同一个channel的消费者使用负载均衡策略(不是轮询) 2、只要channel存在,即使没有该channel的消费者,也会将生产者的message缓存到队列中(注意消息的过期处理) 3、保证队列中的message至少会被消费一次,即使nsqd退出,也会将队列中的消息暂存磁盘上(结束进程等意外情况除外)。 4、限定内存占用,能够配置nsqd中每个channel队列在内存中缓存的message数量,一旦超出,message将被缓存到磁盘中。 5、topic,channel一旦建立,将会一直存在,要及时在管理台或者用代码清除无效的topic和channel,避免资源的浪费。

官方图展示:

Nsq服务端与客户端的关系

消费者

1、消费者直接连接nsqd,缺点是服务无法实现动态伸缩(可以自己实现)。 2、通过http查询nsqlookupd获取该nsqlookupd上的所有nsqd的连接地址。然后分别建立连接,这种方式是传统的轮询方式,属于官方推荐的做法。如下图:

生产者

生产者直接去nsqd去投递message

消息的生命周期

1、生产者往nsqd中发送消息,开启一个连接,发送一个带有topic和消息体的pun的命令到nsqd中 2、topic会对消息进行copy,发送至各个channel中 3、在channel中的每条消息都会被放进队列中,直到消息被worker消费掉,如果队列超出了内存的限制,消息则会被写进磁盘中

Nsq安装

docker部署

docker-compose.yml

version: '3'
services:
  nsqlookupd:
    image: nsqio/nsq
    command: /nsqlookupd
    ports:
      - "4160"
      - "4161"
  nsqd:
    image: nsqio/nsq
    command: /nsqd --lookupd-tcp-address=nsqlookupd:4160
    depends_on:
      - nsqlookupd
    ports:
      - "4150"
      - "4151"
  nsqadmin:
    image: nsqio/nsq
    command: /nsqadmin --lookupd-http-address=nsqlookupd:4161
    depends_on:
      - nsqlookupd  
    ports:
      - "4171"
docker-compose up -d

界面

image.png

本文分享自微信公众号 - golang技术杂文(gh_ebbdb61f463e),作者:无崖子天下无敌

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • NSQ:分布式的实时消息平台--简介

    源码下载地址: https://github.com/bitly/nsq NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在Gi...

    李海彬
  • NSQ:分布式的实时消息平台--简介

    源码下载地址: https://github.com/bitly/nsq NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在Gi...

    李海彬
  • NSQ:分布式的实时消息平台--简介

    源码下载地址: https://github.com/bitly/nsq NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在Gi...

    李海彬
  • 高性能消息中间件 NSQ 解析-应用实践

    Nsq 是用 Go 语言开发的轻量级的分布式消息队列,适合小型项目使用、用来学习消息队列实现原理,对于学习 Go channel的原理和用法,以及如何用 Go ...

    aoho求索
  • 高性能消息中间件 nsq 解析-介绍

    随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。

    aoho求索
  • How we redesigned the NSQ- 其他特性及未来计划

    在系列文章前面几篇中,介绍了 NSQ 改造的过程和几个基础特性,本文中我们继续介绍几个高级特性及其使用场景,这些都是结合有赞业务场景总结提炼出来的重要功能。

    有赞coder
  • 有赞NSQ多集群多机房设计

    从有赞双机房开始到金融云架构,针对业务方在多机房的应该部署以及消息发送订阅需求,需要 NSQ 针对双机房以及多机房部署提供消息发送与订阅服务。本文主要介绍了 N...

    用户1278550
  • How we redesign the NSQ-NSQ重塑之客户端

    有赞的自研版 NSQ 在高可用性以及负载均衡方面进行了改造,自研版的 nsqd 中引入了数据分区以及副本,副本保存在不同的 nsqd 上,达到容灾目的。此外,自...

    有赞coder
  • NSQ深入与实践

    1. 介绍 最近在研究一些消息中间件,常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开...

    aoho求索
  • 剖析nsq消息队列(一) 简介及去中心化实现原理

    分布式消息队列nsq,简单易用,去中心化的设计使nsq更健壮,nsq充分利用了go语言的goroutine和channel来实现的消息处理,代码量也不大,读不了...

    lpxxn
  • golang-nsq系列(一)--初识

    nsq 最初是由 bitly 公司开源出来的一款简单易用的分布式消息中间件,它可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息。

    astraw99
  • nsq(有赞分支)、kafka、rocketMq 架构浅析

    消息队列是分布式系统中重要的中间件,在实现系统高性能,高可用,可伸缩性和最终一致性架构框架中扮演着重要角色。是大型分布式系统不可缺少的核心中间件之一。

    有赞coder
  • 分布式消息系统之Kafka入门

    在大数据学习当中,重点之一就是大数据技术框架,针对于大数据处理的不同环节,需要不同的技术框架来解决问题。以Kafka来说,主要就是针对于实时消息处理,在大数据平...

    成都加米谷大数据
  • Go之NSQ简介,原理和使用

    参考上图利用消息队列把业务流程中的非关键流程异步化, 从而显著降低业务请求的响应时间

    常见_youmen
  • 基于 RocketMQ 的同城双活架构在美菜网的挑战与实践

    本文整理自李样兵在北京站 RocketMQ meetup分享美菜网使用 RocketMQ 过程中的一些心得和经验,偏重于实践。

    用户1564362
  • golang-nsq系列(四)--源码解析总结篇

    随着互联网技术在各行各业的应用高速普及与发展,各层应用之间调用关系越来越复杂,架构、开发、运维成本越来越高,高内聚、低耦合、可扩展、高可用已成为了行业需求。

    astraw99
  • 高性能消息中间件 NSQ 解析-窥探 nsq 设计思路(一)

    我们在前面介绍了 nsq 的相关概念以及 nsq 的安装与应用以及 nsqd 的实现原理、nsqlookupd 的实现细节。

    aoho求索
  • NSQ基于windows和docker的部署

    它提倡没有单点故障的分布式和分散式拓扑结构,实现容错和高可用性,同时保证可靠的消息传递。请看特点和保证。

    逍遥壮士
  • NSQ 概述

    2、nsqlookupd:管理拓扑信息,其实就是围绕 nsqd 的发现服务,因为其存储了 nsqd 节点的注册信息,所以通过它就可以查询到指定 topic 主题...

    凌虚

扫码关注云+社区

领取腾讯云代金券