Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
大型系统的Java中间件实践        2009-8-22
About me• 姓名:曾宪杰• 花名:华黎• 淘宝-产品技术部-综合业务平台• 团队博客 http://rdc.taobao.com/team/jm/• Sina微博 @曾宪杰_华黎• Twitter @vanadies10
Agenda• 中间件带来的变化• Java中间件@淘宝• 总结和展望
几个名词• 中间件• Java中间件• 大型互联网• 大型系统.
之前 App1         App2      App3        ……        DB                Cache      分布式文件系统             非可靠通知服务           搜索
之后               LoadBalancer  搜索          WebApp           WebApp  Cache                                       消息   软负 分布...
Java中间件@淘宝• 消息中间件• 服务框架• 软负载与配置管理• 数据层
Java中间件-服务框架               LoadBalancer  搜索          WebApp           WebApp  Cache                                       ...
Java中间件-消息中间件• Notify   正在准备开源  – 轻量级支持最终一致  – 支持订阅者集群• MetaQ(metamorphosis)   已经开源  – 消息顺序  – 事务
Notify-最终一致性  本地事务域                          T4业务操作              Publisher                 业务操作  T1    T3返    T5    S1  发 ...
Notify-订阅者集群  订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成  的一个集群                          SubscriberA                                    ...
Queue In JMS• 每个连接都有唯一的ClientId        JMS Server消息(1-8)                         Queue                      A1     A2    B...
Topic In JMS• 每个连接都有唯一的ClientId                               A1   1-8          JMS Server           A2   1-8消息(1-8)      ...
MetaQ                 Producer            Consemer                   App                 App  Meta Client      Meta Client...
消息可靠• Oracle+小型机+高端存储• 写双份Mysql• Mysql Replication• 基于文件• 基于内存.
Notify vs MetaQ• 功能 – 顺序 – 去重 – 事务 – 集群订阅者与组内广播 – 扩容 – 可靠性.
消息中间件• 功能外要考虑的 – 隔离 – 降级 – 性能 – 问题定位和排查.
Java中间件-服务框架               LoadBalancer  搜索          WebApp           WebApp  Cache                                       ...
Java中间件-服务框架• 需求的产生  Denali   LoadBalancer                   Mckinley     Fortuna        ……      WebApp         WebApp    ...
Java中间件-服务框架 服务发布 服务查询 服务调用 服务治理
Java中间件-服务框架• 纯Proxy方式  调用者          服务提供者   调用者          服务提供者  调用者          服务提供者   调用者          服务提供者
Java中间件-服务框架                   服务提      调用者                   供者       服务          服务       框架          框架                ...
Java中间件-服务框架• 上线不仅仅是功能这么简单 – 隔离 – 路由 – 降级/流控 – 依赖图 – 跨语言支持 – 跨机房处理.• 计划6月底前开源
Java中间件-服务框架                         各种规则            持久配置             中心                   服务提      调用者                   ...
Java中间件-软负载中心               LoadBalancer  搜索          WebApp           WebApp  Cache                                      ...
Java中间件-软负载中心 配置中心是一个基于经典的“发布/订阅”模型的通讯框架。并在此 基础上融入了适合淘宝网情的一些本土化特性,比如数据发布的 自动聚合、生命周期关联……发布者           配置中心                订阅者
Java中间件-软负载中心自动聚合       配置中心        使用场景:服务集群的成员信息汇聚,        如:         > 汇总服务提供者         > 汇总服务器地址
进入Java中间件-软负载中心生命周期关联         配置中心         使用场景:自动关联服务的可用状态,如:          > 即时感知服务提供者的加入/退出          > 服务器集群成员清单的动态维护
进入Java中间件-软负载中心• 其他功能  – 支持指定分组  – 基于IP的分组  – 机房隔离  – 权重调整• 教训  – 性能  – 生命周期的感知.• 计划6月底之前完成开源
Java中间件-配置管理               LoadBalancer  搜索          WebApp           WebApp  Cache                                       ...
Java中间件-配置管理•   是一个集中式的持久配置管理系统•   简单    –    数据库集中存储,没有集群间同步,保证数据一致    –    以Web server + static file方式提供服务    –    只能通过O...
Java中间件-配置管理    主动/定时获取配置                        发布配置       Client             SDK                      OPS            Apa...
Java中间件-配置管理• 配置管理与软负载中心的关系 – 看起来是比较像的两个系统 – 数据来源不同 – 数据生命周期不同 – 数据准确程度不同
Java中间件-数据层               LoadBalancer  搜索          WebApp           WebApp  Cache                                       消...
Java中间件-数据层数据库架构的演进        垂直           分库   User1   读写   User1-M   User1-S        拆分           分表           分离Trade      ...
Java中间件-数据层开源过程中
Java中间件-数据层
Java中间件-数据层                     TAtomDataSource           User1-M     User1-S                                             ...
Java中间件-数据层-DbProxy• Client->DB方式走向Client->Server->DB
Java中间件-数据层-读写分离MasterSlave
Java中间件-数据层-读写分离SlaveMaster1     Slave1-1    Slave1-2通过拦截SQL操作->记录日志->完成复制支持不同维度、不同目标的复制在去O以及很多Oracle作为主库下做读写分离起到很大帮助
Java中间件-数据层• 基于Binlog的数据复制的改进• 数据平滑迁移• Mysql运维平台.
Java中间件-数据层• 数据需要流向DB外• DB外的数据回流DB  Source1             Dest1  Source2   Event管道   Dest2  Source3             Dest3
Java中间件-数据层       App            App              数据层  DB         DB   DB(S) DB(S)   存储   搜索                    迁移/复制
Java中间件-数据层• SQL解析,路由规则,数据合并• Client->DB和Client->Server->DB模式• 非对称数据复制• 三层的数据源结构• 数据平滑迁移• 数据变更通知平台.
总结和展望• 消息系统  – 每日消息总量 10亿+。最终一致事务消息的量 2亿+/天;  – 每日消息投递条次约20亿次  – 平均消息大小2k  – 总共100+个消息主题,1000+种消息类型,部分消息的订阅者超过80个集群• 服务框架 ...
总结和展望• 易用性 – 开发 – 调试 – 运维• 稳定性 – 降级 – 隔离 – 对应用的保护
总结和展望• 中间件对于大型互联网的价值• 构建中间件的策略.
谢谢
Upcoming SlideShare
Loading in …5
×

大型系统的Java中间件实践q con北京

7,629 views

Published on

The practice of the java middlerware in the huge distributed system.

  • Dating direct: ♥♥♥ http://bit.ly/2F4cEJi ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ❶❶❶ http://bit.ly/2F4cEJi ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

大型系统的Java中间件实践q con北京

  1. 1. 大型系统的Java中间件实践 2009-8-22
  2. 2. About me• 姓名:曾宪杰• 花名:华黎• 淘宝-产品技术部-综合业务平台• 团队博客 http://rdc.taobao.com/team/jm/• Sina微博 @曾宪杰_华黎• Twitter @vanadies10
  3. 3. Agenda• 中间件带来的变化• Java中间件@淘宝• 总结和展望
  4. 4. 几个名词• 中间件• Java中间件• 大型互联网• 大型系统.
  5. 5. 之前 App1 App2 App3 …… DB Cache 分布式文件系统 非可靠通知服务 搜索
  6. 6. 之后 LoadBalancer 搜索 WebApp WebApp Cache 消息 软负 分布式存储 配置 服务框架 中间 载中 管理并行计算平台 件 心 监控/告警 Service Service 运维平台依赖、容量管理 数据层 DB DB DB(S) DB(S) 迁移/复制
  7. 7. Java中间件@淘宝• 消息中间件• 服务框架• 软负载与配置管理• 数据层
  8. 8. Java中间件-服务框架 LoadBalancer 搜索 WebApp WebApp Cache 消息 软负 分布式存储 配置 服务框架 中间 载中 管理并行计算平台 件 心 监控/告警 Service Service 运维平台依赖、容量管理 数据层 DB DB DB(S) DB(S) 迁移/复制
  9. 9. Java中间件-消息中间件• Notify 正在准备开源 – 轻量级支持最终一致 – 支持订阅者集群• MetaQ(metamorphosis) 已经开源 – 消息顺序 – 事务
  10. 10. Notify-最终一致性 本地事务域 T4业务操作 Publisher 业务操作 T1 T3返 T5 S1 发 回消 提 定期 送 息入 交/ 检查 S2提交/回滚 hal 库结 回 未提 f消 果 滚 交的 息 消息 T2存储half消息 Notify Storage S3 提交:更新数据库 标识消息可发送 T6 提交:更新数据库 回滚:删除消息 标识消息可发送 本地事务域 回滚:删除消息
  11. 11. Notify-订阅者集群 订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成 的一个集群 SubscriberA A1 A2 Publisher Notify SubscriberB B1 B2 A1和A2是SystemA中的两个机器 A1和A2共同来消费投递到SystemA的消息 B1和B2也是类似的关系
  12. 12. Queue In JMS• 每个连接都有唯一的ClientId JMS Server消息(1-8) Queue A1 A2 B1 B2 1,5 2,6 3,7 4,8
  13. 13. Topic In JMS• 每个连接都有唯一的ClientId A1 1-8 JMS Server A2 1-8消息(1-8) Topic B1 1-8 B2 1-8
  14. 14. MetaQ Producer Consemer App App Meta Client Meta Client Cpp Client Meta Manager Tools NotifyAdapter HDFS Meta Server Meta Ops Network Processor Agent DB Zookeeper Message Store stats remoting Meta Notify Timetunnel Notify Diamond Http Hbase Slave Slave Accepter Adapter Meta Notify Http Notify TT Master Server Client Client
  15. 15. 消息可靠• Oracle+小型机+高端存储• 写双份Mysql• Mysql Replication• 基于文件• 基于内存.
  16. 16. Notify vs MetaQ• 功能 – 顺序 – 去重 – 事务 – 集群订阅者与组内广播 – 扩容 – 可靠性.
  17. 17. 消息中间件• 功能外要考虑的 – 隔离 – 降级 – 性能 – 问题定位和排查.
  18. 18. Java中间件-服务框架 LoadBalancer 搜索 WebApp WebApp Cache 消息 软负 配置 分布式存储 服务框架 中间 载中 管理并行计算平台 件 心 监控/告警 Service Service 运维平台依赖、容量管理 数据层 DB DB DB(S) DB(S) 迁移/复制
  19. 19. Java中间件-服务框架• 需求的产生 Denali LoadBalancer Mckinley Fortuna …… WebApp WebApp 服务框架 Cache 分布式文件系统 DB Service Service DB DB 非可靠通知服务 DB(S) DB(S) 搜索
  20. 20. Java中间件-服务框架 服务发布 服务查询 服务调用 服务治理
  21. 21. Java中间件-服务框架• 纯Proxy方式 调用者 服务提供者 调用者 服务提供者 调用者 服务提供者 调用者 服务提供者
  22. 22. Java中间件-服务框架 服务提 调用者 供者 服务 服务 框架 框架 请求直接送达服务端 没有中心代理服务器 服务提 调用者 供者 服务 服务 框架 框架 服务注册 查找中心定于服务地址信息 发布服务地址信息 中心会主动推送
  23. 23. Java中间件-服务框架• 上线不仅仅是功能这么简单 – 隔离 – 路由 – 降级/流控 – 依赖图 – 跨语言支持 – 跨机房处理.• 计划6月底前开源
  24. 24. Java中间件-服务框架 各种规则 持久配置 中心 服务提 调用者 供者 服务 服务 框架 框架 请求直接送达服务端 没有中心代理服务器 服务提 调用者 供者 服务 服务 框架 框架 服务注册 查找中心定于服务地址信息 发布服务地址信息 中心会主动推送
  25. 25. Java中间件-软负载中心 LoadBalancer 搜索 WebApp WebApp Cache 消息 软负 配置 分布式存储 服务框架 中间 载中 管理并行计算平台 件 心 监控/告警 Service Service 运维平台依赖、容量管理 数据层 DB DB DB(S) DB(S) 迁移/复制
  26. 26. Java中间件-软负载中心 配置中心是一个基于经典的“发布/订阅”模型的通讯框架。并在此 基础上融入了适合淘宝网情的一些本土化特性,比如数据发布的 自动聚合、生命周期关联……发布者 配置中心 订阅者
  27. 27. Java中间件-软负载中心自动聚合 配置中心 使用场景:服务集群的成员信息汇聚, 如: > 汇总服务提供者 > 汇总服务器地址
  28. 28. 进入Java中间件-软负载中心生命周期关联 配置中心 使用场景:自动关联服务的可用状态,如: > 即时感知服务提供者的加入/退出 > 服务器集群成员清单的动态维护
  29. 29. 进入Java中间件-软负载中心• 其他功能 – 支持指定分组 – 基于IP的分组 – 机房隔离 – 权重调整• 教训 – 性能 – 生命周期的感知.• 计划6月底之前完成开源
  30. 30. Java中间件-配置管理 LoadBalancer 搜索 WebApp WebApp Cache 消息 软负 分布式存储 配置 服务框架 中间 载中 管理并行计算平台 件 心 监控/告警 Service Service 运维平台依赖、容量管理 数据层 DB DB DB(S) DB(S) 迁移/复制
  31. 31. Java中间件-配置管理• 是一个集中式的持久配置管理系统• 简单 – 数据库集中存储,没有集群间同步,保证数据一致 – 以Web server + static file方式提供服务 – 只能通过OPS&SDK发布数据• 可靠 – 支持主动和定时方式,保证能拿到最新数据 • 正常情况延迟<1S,异常情况延迟<10S – 多级保护和容灾支持 • 数据库、 Server挂了都不会影响应用• 允许人工介入 – 支持本地配置,可以脱离server运行• 正在开源中
  32. 32. Java中间件-配置管理 主动/定时获取配置 发布配置 Client SDK OPS Apache 流控模块 Apache mod_evasive Web App Web App 更新 读取数据的请求 File File MySQL 更新时&定时dump replication MySQL MySQL MySQL
  33. 33. Java中间件-配置管理• 配置管理与软负载中心的关系 – 看起来是比较像的两个系统 – 数据来源不同 – 数据生命周期不同 – 数据准确程度不同
  34. 34. Java中间件-数据层 LoadBalancer 搜索 WebApp WebApp Cache 消息 软负 分布式存储 配置 服务框架 中间 载中 管理并行计算平台 件 心 监控/告警 Service Service 运维平台依赖、容量管理 数据层 DB DB DB(S) DB(S) 迁移/复制
  35. 35. Java中间件-数据层数据库架构的演进 垂直 分库 User1 读写 User1-M User1-S 拆分 分表 分离Trade User/User User2 User2-M User2-S Trade
  36. 36. Java中间件-数据层开源过程中
  37. 37. Java中间件-数据层
  38. 38. Java中间件-数据层 TAtomDataSource User1-M User1-S TDataSource User2-M User2-S数据源的三层重构 TGroupDataSource业务可以灵活选择
  39. 39. Java中间件-数据层-DbProxy• Client->DB方式走向Client->Server->DB
  40. 40. Java中间件-数据层-读写分离MasterSlave
  41. 41. Java中间件-数据层-读写分离SlaveMaster1 Slave1-1 Slave1-2通过拦截SQL操作->记录日志->完成复制支持不同维度、不同目标的复制在去O以及很多Oracle作为主库下做读写分离起到很大帮助
  42. 42. Java中间件-数据层• 基于Binlog的数据复制的改进• 数据平滑迁移• Mysql运维平台.
  43. 43. Java中间件-数据层• 数据需要流向DB外• DB外的数据回流DB Source1 Dest1 Source2 Event管道 Dest2 Source3 Dest3
  44. 44. Java中间件-数据层 App App 数据层 DB DB DB(S) DB(S) 存储 搜索 迁移/复制
  45. 45. Java中间件-数据层• SQL解析,路由规则,数据合并• Client->DB和Client->Server->DB模式• 非对称数据复制• 三层的数据源结构• 数据平滑迁移• 数据变更通知平台.
  46. 46. 总结和展望• 消息系统 – 每日消息总量 10亿+。最终一致事务消息的量 2亿+/天; – 每日消息投递条次约20亿次 – 平均消息大小2k – 总共100+个消息主题,1000+种消息类型,部分消息的订阅者超过80个集群• 服务框架 – 线上提供服务数量:1000+• 数据层 – 接入了所有重要Java应用,覆盖率超过Java应用的80% – 每日数据复制记录数10亿+。
  47. 47. 总结和展望• 易用性 – 开发 – 调试 – 运维• 稳定性 – 降级 – 隔离 – 对应用的保护
  48. 48. 总结和展望• 中间件对于大型互联网的价值• 构建中间件的策略.
  49. 49. 谢谢

×