分布式系统之消息队列(草稿)

消息队列概述--概念和特性

      队列——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的替代品

            

公司现有日志处理框架

分布式系统之消息队列(草稿)