Download presentation
Presentation is loading. Please wait.
1
消息中间件在大型分布式系统的应用
2
个人简介 2008年——至今 淘宝网技术专家 之前在Ericsson和金蝶中间件工作 感兴趣领域:
2008年——至今 淘宝网技术专家 负责消息中间件的研发 之前在Ericsson和金蝶中间件工作 感兴趣领域: 并发和网络编程 大型分布式系统的构建 海量数据的分析和处理 微博:
3
Outline 淘宝消息中间件概览 消息中间件应用场景 分布式事务 数据复制 日志同步 delay queue 广播通知 总结
4
消息中间件 应用程序或组件之间的一种通讯方式 可靠性 异步 松散耦合 发送者和接收者不必了解对方,只需要认识消息 发送者和接收者不必同时在线
5
Messaging Models Point-to-Point (PTP) Publish/Subscribe 每个消息只有一个消费者
发送者和接收者没有时间依赖 接收者确认消息处理成功 Publish/Subscribe 每个消息可以有多个订阅者 客户端只有订阅后才能收到消息
6
淘宝消息中间件 Notify Push模式,消息存储转发 支持分布式事务 订阅者集群 支持多种安全级别的存储
7
淘宝消息中间件 Metamorphosis 开源MQ-kafka的Java版本 消息都是持久的,保存在磁盘
客户端pull,利用sendfile系统调用,零拷贝 吞吐量第一 支持消息顺序
8
淘宝消息中间件 Broker: Shared nothing architecture 发布者、订阅者都支持集群 ConfigServer
ZooKeeper Subscriber Publisher Broker Publisher Subscriber Broker Publisher Subscriber 集群 集群 集群
9
Notify——分布式事务 通用的消息中间件支持XA分布式事务 优点 缺点 跨越多个资源ACID的保证 编程模型简单一致 性能和可用性都不高
故障难于恢复
10
Notify——分布式事务 本地事务域 T3业务操作 Publisher 业务操作 T1 发送half消息 S1 定期检查未提交的消息
业务操作和消息存储都在本地事务域进行,不存在跨资源的事务。 提交/回滚消息有可能失败,系统会处于短暂的不一致状态 Broker会主动发送Check消息,确认消息是否提交或回滚 最终一致 将分布式事务分解在两个本地事务中 客户端需要付出的代价 实现CheckMessageListener接口 T2存储half消息 Storage Broker S3 提交:更新数据库 标识消息可发送 回滚:删除消息 T5 提交:更新数据库 标识消息可发送 回滚:删除消息 本地事务域
11
Notify——订阅者集群 订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成的一个集群 A1 A2 A3 Publisher
Broker 应用B B1 B2 B3 订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成的一个集群
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)提供分布式事务支持 保证全局数据的一致性 … 商品管理 store 物流 store 交易中心
付款成功消息 Broker … store CRM store
16
场景(二)数据复制 利用消息中间件将数据从源头复制到多个目的地 满足搜索、离线分析和分表规则变化等需求 Search DB binlog
DB Sync Broker hadoop DB
17
场景(三)日志同步 应用通过可靠异步方式将日志同步到消息中间件 可以对日志做实时或离线分析 App App App App App
Broker HBase Storm
18
场景(四)delay queue 把消息中间件当做可靠的延迟队列 分布式环境下的定时器 Publisher Broker
延迟投递 Subscriber recover
19
场景(五)广播通知 可靠的集群内广播通知 用于通知cache失效等事件 App App App ②广播通知 Broker ①发布通知 App
20
总结 消息中间件对于大型分布式系统非常重要 扩展性 可用性 自动流量调节 开源产品的选择 谨慎对待标准产品和企业级解决方案 KISS原则
Similar presentations