淘宝 Java 中间件之路
About me <ul><li>姓名 : 曾宪杰 </li></ul><ul><li>花名 : 华黎 </li></ul><ul><li>淘宝 - 产品技术 - 通用产品 </li></ul><ul><li>团队博客  http://rdc....
Agenda <ul><li>淘宝没有 Java 中间件之前 </li></ul><ul><li>Java 中间件在淘宝的诞生和发展 </li></ul><ul><li>Java 中间件在淘宝的现状和未来 </li></ul>
淘宝没有 Java 中间件之前
那是在 2007 年下半年的时候 LoadBalance WebApp WebApp Cache 分布式存储 搜索 DB DB CDN
Java 中间件在淘宝的诞生和发展 消息中间件 服务框架 分布式数据层
消息中间件 -Notify
消息中间件 <ul><li>Message-oriented middleware  ( MOM ) is software infrastructure focused on sending and receiving messages be...
消息中间件 <ul><li>业务系统完成一件事情后,需要其他系统进行处理的,通过定时程序来驱动 </li></ul>业务系统 Do something 业务 DB 定时程序 获取任务 Do action
消息中间件 - 我们的需求 <ul><li>轻量级支持最终一致 </li></ul><ul><li>支持订阅者集群 </li></ul><ul><li>消息可靠 </li></ul>
消息中间件 - 最终一致性 Publisher Notify Storage T1 发送 half 消息 T4 业务操作 T3 返回消息入库结果 T2 存储 half 消息 T6  提交 : 更新数据库 标识消息可发送 回滚:删除消息 S1 定...
消息中间件 - 订阅者集群 订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成的一个集群 A1 和 A2 是 SystemA 中的两个机器 A1 和 A2 共同来消费投递到 SystemA 的消息 B1 和 B2 也是类似的关系
消息中间件 -Queue In JMS <ul><li>每个连接都有唯一的 ClientId </li></ul>消息 (1-8) Queue JMS Server A1 A2 B1 B2 1 , 5 2 , 6 3 , 7 4 , 8
消息中间件 -Topic In JMS <ul><li>每个连接都有唯一的 ClientId </li></ul>消息 (1-8) JMS Server A1 A2 B1 B2 Topic 1-8 1-8 1-8 1-8
消息中间件 - 消息可靠 <ul><li>Oracle+ 小型机 + 高端存储 </li></ul><ul><li>写双份 Mysql </li></ul><ul><li>Mysql Replication </li></ul><ul><li>...
有了 Notify 之后 LoadBalance WebApp WebApp Cache 分布式存储 搜索 DB DB CDN 消息中间件 (Notify)
服务框架 -HSF
服务框架 - 当时面临的问题 <ul><li>上百人维护一个代码百万行的前台核心应用 </li></ul><ul><ul><li>共享一个代码模块,部署分离 </li></ul></ul><ul><li>多个业务系统中的代码重复编写 </li>...
服务框架 - 系统示意结构 商品中心 用户中心 交易中心 商品 用户 交易 商品系统 商品系统 登录注册 登录注册 交易系统 交易系统 <ul><li>服务化 </li></ul><ul><ul><li>解决了业务核心的稳定和一致的问题 </l...
服务框架 - 我们的需求 <ul><li>简单好用,像使用 Spring Bean 一样 </li></ul><ul><li>请求路由灵活可控 </li></ul><ul><li>提供稳定性支持 . </li></ul>
服务框架 <ul><li>系统间调用 </li></ul>调用者 服务提供者 How ?
服务框架 <ul><li>系统间调用 </li></ul>调用者 服务提供者 How ? 调用者 服务提供者
服务框架 <ul><li>系统间调用 </li></ul>调用者 服务提供者 调用者 服务提供者 调用者 服务提供者 调用者 服务提供者
服务框架 - 结构 调用者 服务提供者 调用者 服务提供者 服务注册查找中心 发布服务地址信息 定于服务地址信息 中心会主动推送 请求直接送达服务端 没有中心代理服务器 HSF HSF HSF HSF
服务框架 - 结构 调用者 服务提供者 调用者 服务提供者 服务注册查找中心 发布服务地址信息 定于服务地址信息 中心会主动推送 请求直接送达服务端 没有中心代理服务器 HSF HSF HSF HSF
服务框架 - 路由 调用者 调用者 配置中心 推送路由规则 基于接口的路由 基于方法的路由 基于参数的路由 HSF HSF
服务框架 - 服务端保护 服务提供者 服务提供者 配置中心 推送保护策略 线程池隔离和并发数控制 基于请求来源的流控 HSF HSF
有了 HSF 之后 LoadBalance WebApp WebApp Cache 分布式存储 搜索 DB DB CDN 消息中间件 (Notify) Service Service 服务框架 (HSF)
分布式数据层 -TDDL
分布式数据层 User User1 User2 User1-M User2-M User2-S User1-S 分库 分表 读写 分离 数据库架构的演进 Trade/User Trade 垂直拆分
分布式数据层
分布式数据层
分布式数据层 User1-M User2-M User2-S User1-S TAtomDataSource TGroupDataSource TDataSource 数据源的三层重构 业务可以灵活选择
分布式数据层 - 读写分离 Master Slave
分布式数据层 - 读写分离 Slave Master1 Slave1-1 Slave1-2 通过拦截 SQL 操作 -> 记录日志 -> 完成复制 支持不同维度、不同目标的复制 目前也完成了对于 Mysql 的日志解析,可以基于日志进行复制
分布式数据层 - 提供 DbProxy <ul><li>Client->DB 方式走向了 Client->Server->DB </li></ul>
分布式数据层 <ul><li>SQL 解析,路由规则,数据合并 </li></ul><ul><li>Client->DB 和 Client->Server->DB 模式 </li></ul><ul><li>非对称数据复制 </li></ul><...
有了 TDDL 之后 LoadBalance WebApp WebApp Service Service Cache 分布式存储 搜索 DB DB 消息中间件 (Notify) 服务框架 (HSF) CDN Tddl Tddl Tddl
Java 中间件在淘宝的现状和未来
Java 中间件现状 - 一些数据 <ul><li>Notify </li></ul><ul><ul><li>每日消息总量   4.4 亿 。 Half 消息的量    1 亿 5 千万 / 天 ; Committed 的消息的量    2 亿...
Java 中间件现状 - 存在的问题 <ul><li>易用性 </li></ul><ul><ul><li>开发 </li></ul></ul><ul><ul><li>调试 </li></ul></ul><ul><ul><li>运维 </li><...
Java 中间件未来 <ul><li>开源 </li></ul><ul><li>根据业务需求的新功能 </li></ul><ul><li>易用性和稳定性 </li></ul>
Thanks !
Upcoming SlideShare
Loading in …5
×

淘宝Java中间件之路 it168

11,162 views

Published on

Indroduction of the java middleware at taobao.com, presenting the born, architecture of the three main product of java middleware.

Published in: Technology

淘宝Java中间件之路 it168

  1. 1. 淘宝 Java 中间件之路
  2. 2. About me <ul><li>姓名 : 曾宪杰 </li></ul><ul><li>花名 : 华黎 </li></ul><ul><li>淘宝 - 产品技术 - 通用产品 </li></ul><ul><li>团队博客 http://rdc.taobao.com/team/jm/ </li></ul><ul><li>Sina 微博 @ 曾宪杰 _ 华黎 </li></ul><ul><li>Twitter @vanadies10 </li></ul>
  3. 3. Agenda <ul><li>淘宝没有 Java 中间件之前 </li></ul><ul><li>Java 中间件在淘宝的诞生和发展 </li></ul><ul><li>Java 中间件在淘宝的现状和未来 </li></ul>
  4. 4. 淘宝没有 Java 中间件之前
  5. 5. 那是在 2007 年下半年的时候 LoadBalance WebApp WebApp Cache 分布式存储 搜索 DB DB CDN
  6. 6. Java 中间件在淘宝的诞生和发展 消息中间件 服务框架 分布式数据层
  7. 7. 消息中间件 -Notify
  8. 8. 消息中间件 <ul><li>Message-oriented middleware  ( MOM ) is software infrastructure focused on sending and receiving messages between distributed systems. </li></ul><ul><li> --- from wikipedia.org </li></ul><ul><li>MOM 的优点 </li></ul><ul><ul><li>松耦合 </li></ul></ul><ul><ul><li>异步处理 </li></ul></ul>
  9. 9. 消息中间件 <ul><li>业务系统完成一件事情后,需要其他系统进行处理的,通过定时程序来驱动 </li></ul>业务系统 Do something 业务 DB 定时程序 获取任务 Do action
  10. 10. 消息中间件 - 我们的需求 <ul><li>轻量级支持最终一致 </li></ul><ul><li>支持订阅者集群 </li></ul><ul><li>消息可靠 </li></ul>
  11. 11. 消息中间件 - 最终一致性 Publisher Notify Storage T1 发送 half 消息 T4 业务操作 T3 返回消息入库结果 T2 存储 half 消息 T6 提交 : 更新数据库 标识消息可发送 回滚:删除消息 S1 定期检查未提交的消息 S2 提交 / 回滚 本地事务域 本地事务域 业务操作 S3 提交 : 更新数据库 标识消息可发送 回滚:删除消息 T5 提交 / 回滚
  12. 12. 消息中间件 - 订阅者集群 订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成的一个集群 A1 和 A2 是 SystemA 中的两个机器 A1 和 A2 共同来消费投递到 SystemA 的消息 B1 和 B2 也是类似的关系
  13. 13. 消息中间件 -Queue In JMS <ul><li>每个连接都有唯一的 ClientId </li></ul>消息 (1-8) Queue JMS Server A1 A2 B1 B2 1 , 5 2 , 6 3 , 7 4 , 8
  14. 14. 消息中间件 -Topic In JMS <ul><li>每个连接都有唯一的 ClientId </li></ul>消息 (1-8) JMS Server A1 A2 B1 B2 Topic 1-8 1-8 1-8 1-8
  15. 15. 消息中间件 - 消息可靠 <ul><li>Oracle+ 小型机 + 高端存储 </li></ul><ul><li>写双份 Mysql </li></ul><ul><li>Mysql Replication </li></ul><ul><li>基于文件 </li></ul><ul><li>基于内存 . </li></ul>
  16. 16. 有了 Notify 之后 LoadBalance WebApp WebApp Cache 分布式存储 搜索 DB DB CDN 消息中间件 (Notify)
  17. 17. 服务框架 -HSF
  18. 18. 服务框架 - 当时面临的问题 <ul><li>上百人维护一个代码百万行的前台核心应用 </li></ul><ul><ul><li>共享一个代码模块,部署分离 </li></ul></ul><ul><li>多个业务系统中的代码重复编写 </li></ul><ul><li>数据库连接数接近瓶颈 </li></ul>混乱,混乱,混乱
  19. 19. 服务框架 - 系统示意结构 商品中心 用户中心 交易中心 商品 用户 交易 商品系统 商品系统 登录注册 登录注册 交易系统 交易系统 <ul><li>服务化 </li></ul><ul><ul><li>解决了业务核心的稳定和一致的问题 </li></ul></ul><ul><ul><li>解决了重要数据库的连接数的问题 </li></ul></ul><ul><ul><li>系统分解后,提升了效率和稳定性 </li></ul></ul>
  20. 20. 服务框架 - 我们的需求 <ul><li>简单好用,像使用 Spring Bean 一样 </li></ul><ul><li>请求路由灵活可控 </li></ul><ul><li>提供稳定性支持 . </li></ul>
  21. 21. 服务框架 <ul><li>系统间调用 </li></ul>调用者 服务提供者 How ?
  22. 22. 服务框架 <ul><li>系统间调用 </li></ul>调用者 服务提供者 How ? 调用者 服务提供者
  23. 23. 服务框架 <ul><li>系统间调用 </li></ul>调用者 服务提供者 调用者 服务提供者 调用者 服务提供者 调用者 服务提供者
  24. 24. 服务框架 - 结构 调用者 服务提供者 调用者 服务提供者 服务注册查找中心 发布服务地址信息 定于服务地址信息 中心会主动推送 请求直接送达服务端 没有中心代理服务器 HSF HSF HSF HSF
  25. 25. 服务框架 - 结构 调用者 服务提供者 调用者 服务提供者 服务注册查找中心 发布服务地址信息 定于服务地址信息 中心会主动推送 请求直接送达服务端 没有中心代理服务器 HSF HSF HSF HSF
  26. 26. 服务框架 - 路由 调用者 调用者 配置中心 推送路由规则 基于接口的路由 基于方法的路由 基于参数的路由 HSF HSF
  27. 27. 服务框架 - 服务端保护 服务提供者 服务提供者 配置中心 推送保护策略 线程池隔离和并发数控制 基于请求来源的流控 HSF HSF
  28. 28. 有了 HSF 之后 LoadBalance WebApp WebApp Cache 分布式存储 搜索 DB DB CDN 消息中间件 (Notify) Service Service 服务框架 (HSF)
  29. 29. 分布式数据层 -TDDL
  30. 30. 分布式数据层 User User1 User2 User1-M User2-M User2-S User1-S 分库 分表 读写 分离 数据库架构的演进 Trade/User Trade 垂直拆分
  31. 31. 分布式数据层
  32. 32. 分布式数据层
  33. 33. 分布式数据层 User1-M User2-M User2-S User1-S TAtomDataSource TGroupDataSource TDataSource 数据源的三层重构 业务可以灵活选择
  34. 34. 分布式数据层 - 读写分离 Master Slave
  35. 35. 分布式数据层 - 读写分离 Slave Master1 Slave1-1 Slave1-2 通过拦截 SQL 操作 -> 记录日志 -> 完成复制 支持不同维度、不同目标的复制 目前也完成了对于 Mysql 的日志解析,可以基于日志进行复制
  36. 36. 分布式数据层 - 提供 DbProxy <ul><li>Client->DB 方式走向了 Client->Server->DB </li></ul>
  37. 37. 分布式数据层 <ul><li>SQL 解析,路由规则,数据合并 </li></ul><ul><li>Client->DB 和 Client->Server->DB 模式 </li></ul><ul><li>非对称数据复制 </li></ul><ul><li>三层的数据源结构 </li></ul>
  38. 38. 有了 TDDL 之后 LoadBalance WebApp WebApp Service Service Cache 分布式存储 搜索 DB DB 消息中间件 (Notify) 服务框架 (HSF) CDN Tddl Tddl Tddl
  39. 39. Java 中间件在淘宝的现状和未来
  40. 40. Java 中间件现状 - 一些数据 <ul><li>Notify </li></ul><ul><ul><li>每日消息总量 4.4 亿 。 Half 消息的量   1 亿 5 千万 / 天 ; Committed 的消息的量   2 亿 9 千万 / 天 </li></ul></ul><ul><ul><li>每日消息投递条次约 15 亿次 </li></ul></ul><ul><ul><li>平均消息大小 1.8k </li></ul></ul><ul><ul><li>总共 78 个消息主题, 786 种消息类型,部分消息的订阅者超过 30 个集群 </li></ul></ul><ul><li>HSF </li></ul><ul><ul><li>线上提供服务数量: 600+ </li></ul></ul><ul><ul><li>每日总调用量: 150 亿 + </li></ul></ul><ul><li>TDDL </li></ul><ul><ul><li>每日 SQL 执行量, 30 亿 + 。 </li></ul></ul><ul><ul><li>每日数据复制量约 2.8 亿 + 。 </li></ul></ul>
  41. 41. Java 中间件现状 - 存在的问题 <ul><li>易用性 </li></ul><ul><ul><li>开发 </li></ul></ul><ul><ul><li>调试 </li></ul></ul><ul><ul><li>运维 </li></ul></ul><ul><li>稳定性 </li></ul><ul><ul><li>降级 </li></ul></ul><ul><ul><li>隔离 </li></ul></ul><ul><ul><li>对应用的保护 </li></ul></ul>
  42. 42. Java 中间件未来 <ul><li>开源 </li></ul><ul><li>根据业务需求的新功能 </li></ul><ul><li>易用性和稳定性 </li></ul>
  43. 43. Thanks !

×