分布式系统之消息队列(草稿)
消息队列概述--概念和特性
队列——FIFO
异步 -松耦合
弹性----消息可以适度积压
消息队列-模式
Topic模式和订阅模式
topic是广播的形式,一个topic地址的多个订阅者都能收到
topic数据默认不落地,是无状态的
并不保证publisher发布的每条数据,subscriber都能接受到。
Point-to-Point 点对点(这是一种可靠的模式,运用最广的)
保证每条数据都能被receiver接收
Queue数据默认会在mq服务器上以文件形式保存
消息队列架构
经典的JMS架构(只是提供了一个统一的接口,jms api programming model)
一个具体的hornetQ
消息队列的协议
1,STOMP (Streaming Text Orientated Message Protocol)
这是一个文本型简单协议,方便与用户查看和调试
2,MQTT 协议
3,AMQP
提供一个可靠的消息协议,这是一个跨语言的协议。
AMQP:
消息队列的实现
Apollo:下一代ActiveMQ
还在孵化阶段,支持多种协议(STOMP,AMQP,MQTT...)
RabbitMQ
AMQP的路由
直接路由,通过匹配路由key,点对点
广播
最后比较有意思,定义多种key,依据key来进行消息广播
apache qpid
kafka 下一代的消息队列 ((最先是为了解决日志传输)抛弃了企业级的大部分特性)
kafka的特点:
1,采用zookeeper做选举策略
2,采用生产者推,消费者主动拉
3,消息存储机制分析
消息存储,采用类似数据库的存储机制
4,对消息进行分区切分
1,每个分区对应一个consumer,
2,如果某个topic量非常大,就可以采用分区的方式,进行动态扩容
(以前只能修改代码,编程不同的topic)
5,容错机制
每个消息,都有3个副本,当一个副本不可达的时候,会被移出集群,继续重试下一个副本(一个比较好的设计)
nanomsg:zeromq的替代品
公司现有日志处理框架