- 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. (本页无文本内容)