• 1. 开源MQ技术介绍Kimmking 2013-6
  • 2. Agenda消息系统、协议与技术 消息系统及其结构 STOMP/JMS/AMQP/MQTT EIP与SEDA 常见开源消息中间件 ZeroMQ Fqueue ActiveMQ与Apollo Kafka与MetaQ RabbitMQ MQ选型与未来发展展望
  • 3. 消息系统、协议与技术
  • 4. Messaging耦合 -> 松耦合 同步 -> 异步化 直接请求 -> 缓冲压力A系统B系统OnewayA系统B系统Request ResponseA系统B系统sendA系统B系统MOMreceivesendMOMreceivereceivesend
  • 5. RPC部署结构A系统C系统D系统F系统B系统E系统
  • 6. Messaging部署结构F系统C系统MQQueueQueueQueueA系统D系统E系统B系统
  • 7. Messaging系统结构A系统B系统MQQueueExchangeStorageDispatch客户端应用层:发送和接收消息的API接口消息模型层:消息、连接、会话、事务等等消息处理层:消息交互逻辑定义、持久化网络传输层:序列化协议、传输协议、可靠机制安全层管理层
  • 8. MQ消息中间件特性系统的稳定性与健壮性 Stability & Robustness 长期稳定运行 高并发下运行 消息的可靠性 Reliability 发送的可靠性 接收的可靠性 事务性 本地事务 分布式事务 QoS&DLQ
  • 9. MQ消息中间件特性性能 Performance Broker性能 基于内存队列 基于内存+异步/同步持久化到磁盘 基于内存+顺序/随机读写磁盘 基于内存+持久化到关系数据库 Client性能 异步/同步发送、接收 确认机制 事务性会话 消息积压 memoryConsumerProducerDiskBroker
  • 10. MQ消息中间件特性高可用性HA Cluster&Sharding 负载均衡LoadBalance 主从Master-Slave 分片Partition Failover 自动 手动 Replication 同步复制 异步复制 MasterSlaveSlaveSlaveReplicationReplicationReplicationMasterSlaveMasterMasterClientClient
  • 11. MQ消息中间件特性扩展性 Scalability 支持多种协议和规范 支持多种接入和传输方式 支持自定义消息策略 支持自定义插件机制 可管理性 Manageability Broker与Queue的管理 Client与Connection的管理 Cluster与Sharding的管理 JMX或REST方式的管理API接口
  • 12. JMS(Java消息服务)关注于应用层的API协议(类似JDBC) Message结构与Queue概念 Body\Header\Property, messages types Queue\Topic\TemporaryQueue\TemporaryTopic Connection\Session\Producer\Consumer\DurableSubscription Messaging行为 PTP&Pub-Sub 持久化 事务机制 确认机制 临时队列
  • 13. Spring-JMSJMSTemplate提供了便利的发送方法,不用再关注异常和资源释放。 CachingConnectionFactory提供了从生产者/消费者到Session,再到Connection的Cache策略,这些资源都能被重复使用。 提供了Message与Objec的转换方式。
  • 14. STOMP(简单文本消息协议)Simple (or Streaming) Text Orientated Messaging Protocol http://stomp.github.io/ 简单、基于Frame、文本的命令式操作协议 类似HTTP/SMTP/FTP等协议 易用、跨平台、MQ无关性 shell下使用telnet或nc命令与MQ交互 STMOP操作演示http://diaocow.iteye.com/blog/1725186 性能较低 ActiveMQ的STOMP支持 协议封装与转换http://activemq.apache.org/stomp.html
  • 15. AMQPAdvanced Message Queuing Protocol 来自于JPMorgan,源于满足金融系统的消息通讯业务需求: http://www.amqp.org/ 线路级协议、实现客户端与不同MQ间的互操作 五个基本部分: 数据类型与编码 消息传输交互 消息定义与行为 事务 安全性
  • 16. MQTTMQ Telemetry Transport MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。 基于TCP的简单二进制通讯协议。 协议各部分的定义精确到bit,最小消息为2bytes。 不同于一般MQ的长连接,协议规定了keep alive timer参数和ping指令。 QoS level决定了交互次数。 为物联网(Internet Of Things)准备的消息协议。
  • 17. EIP与SEDA http://www.eaipatterns.com/ Staged Event-Driven Architecture http://www.eecs.harvard.edu/~mdw/proj/seda/
  • 18. 常见开源消息中间件
  • 19. ZeroMQ项目地址 http://www.zeromq.org/ 基于C++开发,性能非常高的内存MQ内核 本身就是一个并发框架做的socket库 在集群环境下比TCP更快 支持各种常见平台,但是需要额外的绑定包装 基本不支持持久化 任何程序都可以变成MQ broker(zero brokers) 各种语言的例子 https://github.com/imatix/zguide/tree/master/examples/ 官方文档 http://zguide.zeromq.org/page:all
  • 20. Fqueue (Fast Queue)支持memcached协议(分布式和高可用机制) 基于磁盘持久化存储(顺序处理的日志文件) 高性能(20-30万写入QPS)、低内存使用 配置和使用简单 项目地址 http://code.google.com/p/fqueue/
  • 21. ActiveMQ高可靠的、事务性的消息队列 当前应用最广泛的开源消息中间件 项目开始与2005年CodeHaus 2006年成为Apache项目 Java代码44万行,xml代码3.9万行(5.7.0) 24个Committers 核心人员均为商业公司FuseSource职员 支持多种接入协议和消息协议
  • 22. Java和C++客户端支持无缝地failoverActiveMQ-Failover与Reconnect
  • 23. 状态复制 Pure Master-Slave 基于共享锁 JDBC Master-Slave(表的排它锁) Shared File System Master-Slave(文件的写锁) ActiveMQ-High Availability
  • 24. 不共享存储 全复制(所有消息、所有应答、所有事务) 从服务器(备份服务器)默认不启动对外服务组件,只同步备份主服务器的所有数据。可配置从服务器在主服务器挂机后启动服务充当主服务器。Pure Master-Slave
  • 25. 可靠性好,但性能一般。 推荐使用如果原系统已经存在企业数据库。 从服务器个数没有限制。 配置简单。 从服务器一直待机状态, 除非竞争到DB锁JDBC Master-Slave
  • 26. 推荐使用如果现存SAN 从服务器(Slave)个数无限制 配置简单 注意确认文件锁是否正常及超时时间,NFS v4Shared Storage Master-Slave
  • 27. SecuritySecure channels (SSL) Authentication File based JAAS plugin (Certificates, LDAP) Authorization Destination Level Message Level
  • 28. Apollohttp://activemq.apache.org/apollo/ Apache ActiveMQ的改进版本,使用Scala开发 主要特点: Reactor Based Thread Model 基于hawtdispatch(thread pooling/NIO event framework) Scala 2.9 Implementation Protocol Agnostic(不支持JMS) STOMP、AMQP、MQTT、OpenWire REST Based Management Message Swapping 压缩内存消息,交互到磁盘
  • 29. Kafka与MetaQKafka (基于Scala) O(1)、顺序读写的持久化,高吞吐量是主要设计目标 producer、broker、consumer都是分布式的 Partition Messages 基于ZooKeeper,轻量级broker Pull,消费记录在Consumer端 Consumer 分组 支持并行加载数据到Hadoop 异步复制和异步复制 MetaQ(Java重新实现并改进) 支持本地和分布式事务 文本的监控协议设计
  • 30. RabbitMQhttp://www.rabbitmq.com/ 基于Erlang开发 持久化方式为异步flush到磁盘 工具和插件丰富 RabbitMQ-HA active/passive pair of nodes Master-Slave的Queue镜像复制
  • 31. 使用场景与选型事务可靠性场景(ActiveMQ) 重要业务数据的异步处理 数据的增量远程同步 吞吐量优先场景(MetaQ) 一般性的通知 日志的传输和收集 系统性设计场景 系统间RPC依赖解耦和 耗时同步操作转异步 应用开源MQ最大的挑战是可管理性方面的问题
  • 32. 消息中间件的未来可扩展性 Scalability 大规模弹性的MQ cluster网络 更可靠高效的replication与failover 更细粒度和透明的sharding 可管理性 Manageability 监控 流控 … 更细粒度的专用性MQ 与其他技术领域更紧密的衔接与融合
  • 33. Q&A Any Question?
  • 34. Thanks!