乐趣区

关于程序员:高性能消息中间件-nsq-解析介绍

随着互联网技术在各行各业的利用高速遍及与倒退,各层利用之间调用关系越来越简单,架构、开发、运维老本越来越高,高内聚、低耦合、可扩大、高可用已成为了行业需要。

一提到音讯队列 MQ(Message Queue),咱们会想到很多利用场景,比方音讯告诉、用户积分增减、抽奖中奖等,能够看进去 MQ 的作用有:流程异步化、代码解耦合、流量削峰、高可用、高吞吐量、播送散发,达到数据的最终一致性,满足具体的业务场景需要。

Nsq 是用 Go 语言开发的轻量级的分布式音讯队列,适宜小型我的项目应用、用来学习音讯队列实现原理,对于学习 Go channel 的原理和用法,以及如何用 Go 语言来写分布式是一个很不错的入门我的项目。

Nsq 模块介绍
NSQ 最后是由 bitly 公司开源进去的一款简略易用的分布式消息中间件,它可用于大规模零碎中的实时音讯服务,并且每天可能解决数亿级别的音讯。

NSQ 个性
NSQ 具备如下个性:

分布式:它提供了分布式的、去中心化且没有单点故障的拓扑构造,稳固的音讯传输公布保障,可能具备高容错和高可用个性。
易于扩大:它反对程度扩大,没有中心化的音讯代理(Broker),内置的发现服务让集群中减少节点非常容易。
运维不便:它非常容易配置和部署,灵活性高。
高度集成:当初曾经有官网的 Golang、Python 和 JavaScript 客户端,社区也有了其余各个语言的客户端库不便接入,自定义客户端也非常容易。
NSQ 组件
首先看下 NSQ 的我的项目构造:

外围包为:nsqd、nsqadmin 和 nsqlookupd。apps 包中寄存了各个入口办法。

nsqd:nsqd 是一个守护过程,负责接管(生产者 producer)、排队(最小堆实现)、投递(消费者 consumer)音讯给客户端。它能够独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的。
nsqlookupd:nsqlookupd 是守护过程负责管理拓扑信息。客户端通过查问 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点播送话题(topic)和通道(channel)信息。有两个接口:TCP 接口,nsqd 用它来播送。HTTP 接口,客户端用它来发现和治理。
nsqadmin:nsqadmin 是一套 WEB UI,用来会集集群的实时统计,并执行不同的治理工作。

除此之外,图中还波及到一些根本的概念:

Topic:一个 topic 就是程序公布音讯的一个逻辑键,当程序第一次公布音讯时就会创立 topic。
Channels:channel 与消费者相干,是消费者之间的负载平衡,channel 在某种意义上来说是一个“队列”。每当一个发布者发送一条音讯到一个 topic,音讯会被复制到所有消费者连贯的 channel 上,消费者通过这个非凡的 channel 读取音讯,实际上,在消费者第一次订阅时就会创立 channel。Channel 会将音讯进行排列,如果没有消费者读取音讯,音讯首先会在内存中排队,当量太大时就会被保留到磁盘中。
Messages:音讯形成了咱们数据流的中坚力量,消费者能够抉择完结音讯,表明它们正在被失常解决,或者从新将他们排队待到前面再进行解决。每个音讯蕴含传递尝试的次数,当消息传递超过肯定的阀值次数时,咱们应该放弃这些音讯,或者作为额定音讯进行解决。
常用工具类:

nsq_to _file:生产指定的话题(topic)/ 通道(channel),并写到文件中,有抉择的滚动和 / 或压缩文件。
nsq_to _http:生产指定的话题(topic)/ 通道(channel)和执行 HTTP requests (GET/POST) 到指定的端点。
nsq_to _nsq:消费者指定的话题 / 通道和重公布音讯到目的地 nsqd 通过 TCP。
小结
本文次要介绍 nsq 的模块、个性及其组成部分。nsq 专门为分布式、集群化而生,在解决 SPOF(single point of failure, 单点故障)、高可用、最终一致性方面很有劣势。

退出移动版