NSQ的特性和可靠性

2016-11-06

NSQ是一个实时分布式消息平台

特性

  • 支持分布式拓扑结构,无单点故障问题

  • 支持横向扩展,无中间人(brokers),可无缝添加多个节点到集群中

  • 基于推送的低延迟消息投递

  • 结合负载均衡和广播的消息路由方式

  • 擅长流(高吞吐)和面向job(低吞吐)的工作负载

  • 内存优先(超过内存队列的消息将写入硬盘中)

  • 消费者可在运行时发现生产者的服务

  • TLS加密传输

  • 消息数据无格式要求

  • 很少依赖,简单部署,沙箱,有默认配置

  • 在统计、管理和生产者的信息方面都有http接口

  • 整合了实时仪表工具statsd

  • 强大的集群管理接口

可靠性

  • 消息默认不持久化

虽然nsq支持“漏气阀”(–mem-queue-size),消息数量超过消息队列阀门时,消息会被写入硬盘,但是nsq主要还是一个内存消息平台

–mem-queue-size可以设置为0,保证所有的消息被持久化到硬盘。如果nsq的挂了之后,可尽可能的降低影响范围。

  • 消息至少投递一次

意味着消息可以被投递多次(消费者超时、连接断开、重新入列等)。消费者要确保消息操作的幂等性。

  • 消息接收是无序的

你不能依赖于消息投递的顺序,这是因为消息重新入列、内存消息和硬盘消息的结合、每个nsq节点并不共享消息。

  • 消费者最终可以找到所有的消息生产者

服务发现(nsqlookup)的设计是基于最终一致性,nsqlookup并不协调状态或者应答