NSQ 消息队列

异步任务与消息队列

同步任务:一定要等任务执行完了,得到结果,才执行下一个任务。

异步任务:不用等任务执行完,直接执行下一个任务。

异步任务最简单可以用异步线程实现,golang 中可以用goroutine实现,但受时间和不确定因素限制,进程有可能超时、退出或者被杀死,消息队列可以定义任何时间的延迟,几天都可以。异步线程、goroutine只是单机的实现,消息队列是分布式的,可以跨语言夸系统。消息队列是独立的,跨线程概念的,实现跨主机的分布式并发。

消息队列实现分布式的异步任务,利用分布式架构,实现可扩展性,高性能等,解决异构系统通信,实现服务间的解耦。

消息系统类型

  1. Streaming的适合log日志批量写入,强调性能。
  2. Queque队列强调可靠性,保证消息的正确传达与处理,强调task概念。

NSQ学习

NSQ是消息队列的一种实现,采用producer/consumer基于订阅的模式,开源、设计简单、架构容易理解,从而debug问题变得简单明确,

因为NSQ简单,可以通过NSQ了解和入门消息队列,知道什么是消息队列,消息队列的基本概念和基本实现。

通过学习NSQ源代码,可以深入对go语言的理解。NSQ实际基于goroutine管道模式,传出过程:将goroutine chan 中传递message对象根据NSQ传输协议转换成http tcp流中的frame二级制形式,传入过程:通过http tcp 管道scream流读写解析消息,转换到内部go routine chan 消息,
,这样就实现跨机器的网络传输,从而实现分布式队列。

t.memoryMsgChan = make(chan *Message, ctx.nsqd.getOpts().MemQueueSize)

NSQ可以定义内存队列的大小(通过golang chan 方式 ),超过了直接落盘,为了可靠性可以将内存队列长度定义为零,让所有消息直接落盘。

NSQ队列实现通俗理解

领导负责布置任务,把一个个任务放入队列中,个人负责完成任务,从队列中取出任务,任务完成后,给领导一个反馈(ACK)任务就被从队列中删除。重试过程相当于,一次任务搞不定(出错了)会被重新放进任务队列,但是会给你一个缓冲时间,等间隔预定义规则的时间再把任务发给你。

NSQ分布式设计

NSQ分布式实现简单,不依赖第三方组件,不依赖于复杂算法。
具体实现:consumer动态订阅全部的nsqd,可以从任何nsqd接收指定topic指定channal的消息,这样不管从哪个nsqd发的消息都能收到,某个nsqd挂了不影响使用(可用性,producer前可以挂loadblancer,或者通过主机池库(如:随机选择主机ip),均匀向不同主机的不同nsqd发布消息,实现负载均衡,简单理解就是一个反过来的多http server加loadblancer的模型。

NSQ特性

NSQ支持消息的压缩
NSQ消息本身没有顺序
NSQ可以实现topic channel暂停
NSQ提供了简单的web ui,实现了可视化。

消息队列分两种一种push 一种pull。
NSQ采用推的方式,通过ready inflight状态来限流。

NSQ使用扩展

通过nsq_to_file,用某个channel通过文件备份消息,可以配置类似log的Rotation周期。

通过nsq_to_nsq 把一个nsq群集的消息同步转发到另一个nsq群集中,实现扩展。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容

  • 1. 概述 NSQ 是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一...
    楚江云阅读 6,654评论 0 10
  • NSQ是一个实时的分布式消息平台。它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架。 NS...
    零一间阅读 2,407评论 0 1
  • NSQ是一个实时的分布式消息平台。它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架。 NS...
    零一间阅读 2,188评论 0 2
  • 1.安装 根据官方安装指引页面下载最新稳定版的二进制包https://nsq.io/deployment/inst...
    渺小Y阅读 6,991评论 1 4
  • 使用场景 我这儿用一个实例来说明nsq的使用,假设我有一个apiServer的程序,它负责面向用户。有一个data...
    我的饭卡呢阅读 7,468评论 0 3