NSQ是一个实时分布式消息平台
特性
-
支持分布式拓扑结构,无单点故障问题
-
支持横向扩展,无中间人(brokers),可无缝添加多个节点到集群中
-
基于推送的低延迟消息投递
-
结合负载均衡和广播的消息路由方式
-
擅长流(高吞吐)和面向job(低吞吐)的工作负载
-
内存优先(超过内存队列的消息将写入硬盘中)
-
消费者可在运行时发现生产者的服务
-
TLS加密传输
-
消息数据无格式要求
-
很少依赖,简单部署,沙箱,有默认配置
-
在统计、管理和生产者的信息方面都有http接口
-
整合了实时仪表工具statsd
-
强大的集群管理接口
可靠性
- 消息默认不持久化
虽然nsq支持“漏气阀”(–mem-queue-size),消息数量超过消息队列阀门时,消息会被写入硬盘,但是nsq主要还是一个内存消息平台
–mem-queue-size可以设置为0,保证所有的消息被持久化到硬盘。如果nsq的挂了之后,可尽可能的降低影响范围。
- 消息至少投递一次
意味着消息可以被投递多次(消费者超时、连接断开、重新入列等)。消费者要确保消息操作的幂等性。
- 消息接收是无序的
你不能依赖于消息投递的顺序,这是因为消息重新入列、内存消息和硬盘消息的结合、每个nsq节点并不共享消息。
- 消费者最终可以找到所有的消息生产者
服务发现(nsqlookup)的设计是基于最终一致性,nsqlookup并不协调状态或者应答