nsq 篇章二

nsq 需要搞清楚的几点:

  1. nsqd各节点之间是没有通讯的,所有nsqd只向nsqlookupd去register,unregister,心跳。。
  2. consumer 是可以不经过 nsqlookupd,自己直接链接nsqd的,只是通过nsqlookupd要好些(好处后面说)
  3. consumer 虽然去nsqlookupd走了一遭,但是只是去过去nsqd节点信息,获取后会跟所有的nsqd都直接建立tcp连接,记住是所有nsqd节点,并且是client端直接连接nsqd,点对点没有任务中心
  4. consumer 跟所有 nsqd 建立了tcp连接,相当于订阅了所有nsqd节点的对应的那个 topic-channel 了,后面只要任何节点对应的 topic-channel 有消息推送了,consumer都会收到订阅消息。
  5. producer 生产数据是需要指定nsqd的 (也就是生产者是不需认nsqlookupd的),点对点没有任何中心了
  6. producer 指定在某台nsqd节点发送生产 topic-channel 数据, 也就只有那一台nsqd有这个数据了,其它节点是没有任何感知的,这里的重点就是,这台nsqd一旦挂了,未持久化或持久化失败的消息就可就真丢了,这跟你部署N台nsqd节点都没关系,因为并没有各节点相互备份。。
  7. nsqd为啥还叫分布式?还部署nsqd集群干嘛? 集群可以帮你去把N个topic分布到M个nsqd节点上去,避免单点问题,至于它为啥还叫分布式,人家对外提供的消息队列服务支持的N个主题确实是能被分配到N个node上协同工作了的呀。。。
  8. nsq 是推模式

消息队列的几个指标

  1. 如何保证服务高可用
    答:nsq用到了集群去保证整个服务的高可用,但并不能保证单个topic的高可用,不过你可以用特定方案间接去保证。

  2. 如何保证不丢消息
    答: consumer每次消费完消息后,需要在规定时间内返回对应 报文 ,否则nsqd会认为消费超时或消费异常处理,在过一段时间后重复给你再次推送 该消息。

  3. 如何保证消息的顺序
    答:nsq不保证消息的顺序的,如有顺序被保持纯属巧合。

  4. 如何保证消息实时性
    答:nsq是主动推消息到consumer的, 实时性还是很强的。

启发

  1. 分布式编程流程
    nsq是结合nsqlookupd做的分布式,每一台nsqd节点起气来后,会在nsqlookupd去register,总之就是节点信息跟nsqlookupd (注册中心) 进行了绑定了,后面新的 client都是去 nsqlookupd 查一下 nsqd节点列表,然后循环依次tcp直连上nsqd的,也就是说nsqd跟 nsqlookupd 只是单纯的 register,unregister,没有其他太多交互。其实shunfei/cronsun这个分布式定时任务我觉着更能表现分布式思想更明确一些,所有的node节点统一接受etcd信号调度(etcd里面的watch命令),这样一来操作N个node跟操作一个node没啥区别了,node节点注册,心跳,接受etcd信号,做出相应,返回结构也是回写etcd。。。

  2. 服务管理
    多个子服务下如何设计并管理代码

3.面向协议编程
nsq的协议由于挺简单的,但人家写得也挺漂亮,所以用来了解面向协议编程怎么去设计代码倒是挺好的。协议详解

image.png

参考文献:
nsq的生产者只往一个nsqd节点生产数据nsqd之间没有通讯
shunfei/cronsun

你可能感兴趣的:(nsq 篇章二)