• 1. 消息中间件在大型分布式系统的应用马震(锋寒)@淘宝网 2011-11-26
  • 2. 个人简介2008年——至今 淘宝网技术专家 负责消息中间件的研发 之前在Ericsson和金蝶中间件工作 感兴趣领域: 并发和网络编程 大型分布式系统的构建 海量数据的分析和处理 微博:http://weibo.com/mz1999
  • 3. Outline淘宝消息中间件概览 消息中间件应用场景 分布式事务 数据复制 日志同步 delay queue 广播通知 总结
  • 4. 消息中间件应用程序或组件之间的一种通讯方式 可靠性 异步 松散耦合 发送者和接收者不必了解对方,只需要认识消息 发送者和接收者不必同时在线
  • 5. Messaging ModelsPoint-to-Point (PTP) 每个消息只有一个消费者 发送者和接收者没有时间依赖 接收者确认消息处理成功 Publish/Subscribe 每个消息可以有多个订阅者 客户端只有订阅后才能收到消息
  • 6. 淘宝消息中间件Notify Push模式,消息存储转发 支持分布式事务 订阅者集群 支持多种安全级别的存储
  • 7. 淘宝消息中间件Metamorphosis 开源MQ-kafka的Java版本 消息都是持久的,保存在磁盘 客户端pull,利用sendfile系统调用,零拷贝 吞吐量第一 支持消息顺序
  • 8. 淘宝消息中间件Broker: Shared nothing architecture 发布者、订阅者都支持集群 PublisherPublisherPublisherBrokerBrokerSubscriberSubscriberSubscriber集群集群集群ConfigServerZooKeeper
  • 9. Notify——分布式事务通用的消息中间件支持XA分布式事务 优点 跨越多个资源ACID的保证 编程模型简单一致 缺点 性能和可用性都不高 故障难于恢复
  • 10. Notify——分布式事务PublisherBrokerStorageT1 发送half消息T3业务操作T4提交/回滚T2存储half消息T5 提交:更新数据库 标识消息可发送 回滚:删除消息S1 定期检查未提交的消息S2提交/回滚本地事务域本地事务域业务操作S3 提交:更新数据库 标识消息可发送 回滚:删除消息
  • 11. Notify——订阅者集群订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成的一个集群 BrokerPublisherA1A2A3应用AB1B2B3应用B
  • 12. Notify——消息存储多种安全级别的存储 File Oracle+小型机+存储 MySQL MySQL + Replication 同步写入两个存储节点 支持存储节点的动态变化
  • 13. Meta——跟kafka有什么不同?用java替换scala Consumer API没有采用kafka的stream方式,而是同时实现同步获取和异步订阅两种方式 存储结构上采用自定义结构,更简洁紧凑 客户端的连接复用 实现HA复制 实现发送的软负载 支持本地和XA事务 支持http协议 数据迁移、扩容对用户透明
  • 14. Outline淘宝消息中间件概览 消息中间件应用场景 分布式事务 数据复制 日志同步 delay queue 广播通知 总结
  • 15. 场景(一)分布式事务为面向服务架构(SOA)提供分布式事务支持 保证全局数据的一致性交易中心Broker商品管理物流CRM…付款成功消息storestorestorestore
  • 16. 场景(二)数据复制利用消息中间件将数据从源头复制到多个目的地 满足搜索、离线分析和分表规则变化等需求DBDB SyncbinlogBrokerSearchhadoopDB
  • 17. 场景(三)日志同步应用通过可靠异步方式将日志同步到消息中间件 可以对日志做实时或离线分析 BrokerAppAppAppHBaseStormAppApp
  • 18. 场景(四)delay queue把消息中间件当做可靠的延迟队列 分布式环境下的定时器 BrokerPublisherSubscriberrecover延迟投递
  • 19. 场景(五)广播通知可靠的集群内广播通知 用于通知cache失效等事件BrokerAppAppAppAppApp①发布通知②广播通知
  • 20. 总结消息中间件对于大型分布式系统非常重要 扩展性 可用性 自动流量调节 开源产品的选择 谨慎对待标准产品和企业级解决方案 KISS原则
  • 21. (本页无文本内容)