淘宝Java中间件之路




              SACC2011
About me


 • 姓名:曾宪杰

 • 花名:华黎

 • 淘宝-产品技术-通用产品

 • 团队博客 http://rdc.taobao.com/team/jm/

 • Sina微博 @曾宪杰_华黎

 • Twitter @vanadies10
                                         SACC2011
Agenda

• 淘宝没有Java中间件之前

• Java中间件在淘宝的诞生和发展

• Java中间件在淘宝的现状和未来



                     SACC2011
淘宝没有Java中间件之前




                SACC2011
那是在2007年下半年的时候

                               LoadBalance




 CDN                     WebApp         WebApp
                    分布
       搜索   Cache   式存
                     储
                          DB                 DB




                                        SACC2011
Java中间件在淘宝的诞生和发展


               消息中间件
                服务框架
              分布式数据层



               SACC2011
消息中间件-Notify




               SACC2011
消息中间件

•   Message-oriented middleware (MOM) is software infrastructure focused on
    sending and receiving messages between distributed systems.
                                           --- from wikipedia.org


              Application A                         Application B


                     Application Programming Interface


                        Message Oriented Middleware

•   MOM的优点
     – 松耦合
     – 异步处理

                                                             SACC2011
消息中间件

                        定时程序
    业务系统
                        获取任务
  Do something
                        Do action




                 业务DB



• 业务系统完成一件事情后,需要其他系统进行处理的,通
  过定时程序来驱动


                                    SACC2011
消息中间件-我们的需求


• 轻量级支持最终一致

• 支持订阅者集群

• 消息可靠



              SACC2011
消息中间件-最终一致性
 本地事务域
                         T4业务操作
             Publisher                 业务操作


 T1    T3返    T5    S1
 发     回消     提     定期
 送     息入     交/    检查   S2提交/回滚
 hal   库结     回     未提
 f消    果      滚     交的
 息                  消息

                         T2存储half消息
              Notify                    Storage
                         S3 提交:更新数据库
                         标识消息可发送
                         T6 提交:更新数据库
                         回滚:删除消息
                         标识消息可发送
 本地事务域
                         回滚:删除消息
                                          SACC2011
消息中间件-订阅者集群
 订阅者集群:消息的一个逻辑上的订阅者是有多个物理节点组成
 的一个集群
                         SubscriberA

                                       A1   A2
   Publisher    Notify
                         SubscriberB

                                       B1   B2


 A1和A2是SystemA中的两个机器
 A1和A2共同来消费投递到SystemA的消息


 B1和B2也是类似的关系
                                        SACC2011
消息中间件-Queue In JMS

• 每个连接都有唯一的ClientId


           JMS Server
 消息(1-8)
                              Queue




                         A1     A2    B1    B2

                        1,5    2,6    3,7   4,8

                                                 SACC2011
消息中间件-Topic In JMS

• 每个连接都有唯一的ClientId
                               A1     1-8




          JMS Server           A2     1-8
消息(1-8)
                       Topic

                               B1     1-8




                               B2     1-8
                                    SACC2011
消息中间件-消息可靠


• Oracle+小型机+高端存储

• 写双份Mysql

• Mysql Replication

• 基于文件

• 基于内存.
                      SACC2011
有了Notify之后

                                LoadBalance




 CDN                      WebApp         WebApp
                                                    消息
                     分布                             中间
       搜索    Cache   式存                              件
                      储                            (Notify)
                           DB                 DB




                                              SACC2011
服务框架-HSF




           SACC2011
服务框架-当时面临的问题
•   上百人维护一个代码百万行的前台核心应用

    – 共享一个代码模块,部署分离

•   多个业务系统中的代码重复编写

•   数据库连接数接近瓶颈




                                 SACC2011
                      混乱,混乱,混乱
服务框架-系统示意结构
  商品    商品   登录        登录   交易     交易
  系统    系统   注册        注册   系统     系统




       商品         用户         交易
       中心         中心         中心



       商品         用户         交易

服务化
 解决了业务核心的稳定和一致的问题
 解决了重要数据库的连接数的问题
 系统分解后,提升了效率和稳定性
                                  SACC2011
服务框架-我们的需求


• 简单好用,像使用Spring Bean一样

• 请求路由灵活可控

• 提供稳定性支持.



                      SACC2011
服务框架
• 系统间调用

          How?
  调用者            服务提供者




                         SACC2011
服务框架
• 系统间调用

          How?
  调用者            服务提供者
   调用者            服务提供者




                          SACC2011
服务框架
• 系统间调用

 调用者      服务提供者
  调用者      服务提供者




 调用者      服务提供者
  调用者      服务提供者



          SACC2011
服务框架-结构

                    服务提
      调用者
                    供者
       HSF          HSF

                          请求直接送达服务端
                          没有中心代理服务器

                    服务提
      调用者
                    供者
       HSF          HSF




             服务注册
             查找中心
定于服务地址信息              发布服务地址信息
 中心会主动推送
                           SACC2011
服务框架-结构

                    服务提
      调用者
                    供者
       HSF          HSF

                          请求直接送达服务端
                          没有中心代理服务器

                    服务提
      调用者
                    供者
       HSF          HSF




             服务注册
             查找中心
定于服务地址信息              发布服务地址信息
 中心会主动推送
                           SACC2011
服务框架-路由

    调用者

    HSF


               配置中心



    调用者

    HSF
          推送路由规则
          基于接口的路由
          基于方法的路由
          基于参数的路由

                      SACC2011
服务框架-服务端保护


                  服务提
                  供者
                  HSF



    配置中心


                  服务提
                  供者
                  HSF

       推送保护策略
    线程池隔离和并发数控制
     基于请求来源的流控

                        SACC2011
有了HSF之后

                               LoadBalance




 CDN                     WebApp         WebApp
                                                    消息
                    分布                              中间
       搜索   Cache   式存         服务框架(HSF)             件
                     储                             (Notify)
                         Service         Service




                          DB                 DB

                                             SACC2011
分布式数据层-TDDL




              SACC2011
分布式数据层

数据库架构的演进



        垂直           分库   User1   读写   User1-M   User1-S
        拆分           分表           分离
Trade
             User
/User

                          User2        User2-M   User2-S



             Trade




                                             SACC2011
分布式数据层




         SACC2011
分布式数据层




         SACC2011
分布式数据层
                     TAtomDataSource



           User1-M     User1-S

                                              TDataSource

           User2-M     User2-S




数据源的三层重构                   TGroupDataSource
业务可以灵活选择

                                              SACC2011
分布式数据层-读写分离

Master




 Slave


              SACC2011
分布式数据层-读写分离


Slave




Master1     Slave1-1    Slave1-2



通过拦截SQL操作->记录日志->完成复制
支持不同维度、不同目标的复制
目前也完成了对于Mysql的日志解析,可以基于日志进行复制
                                   SACC2011
分布式数据层-提供DbProxy
• Client->DB方式走向了Client->Server->DB




                                      SACC2011
分布式数据层

• SQL解析,路由规则,数据合并

• Client->DB和Client->Server->DB模式

• 非对称数据复制

• 三层的数据源结构



                               SACC2011
有了TDDL之后
                              LoadBalance




 CDN                     WebApp            WebApp
                                                      消息
                    分布
                                                      中间
       搜索   Cache   式存       服务框架(HSF)
                                                       件
                     储
                                                     (Notify)
                         Service           Service

                               T               T
                               d               d
                               d               d
                               l               l


                              DB    Tddl       DB

                                            SACC2011
Java中间件在淘宝的现状和未来




               SACC2011
Java中间件现状-一些数据
•   Notify
     – 每日消息总量 4.4亿。Half消息的量 1亿5千万/天;Committed的消息的量 2亿9千万/
       天
     – 每日消息投递条次约15亿次
     – 平均消息大小1.8k
     – 总共78个消息主题,786种消息类型,部分消息的订阅者超过30个集群

•   HSF
     – 线上提供服务数量:600+

     – 每日总调用量:150亿+

•   TDDL
     – 每日SQL执行量,30亿+。

     – 每日数据复制量约2.8亿+。


                                               SACC2011
Java中间件现状-存在的问题

• 易用性
  – 开发
  – 调试
  – 运维
• 稳定性
  – 降级
  – 隔离
  – 对应用的保护


                  SACC2011
Java中间件未来

• 开源

• 根据业务需求的新功能

• 易用性和稳定性



               SACC2011
Thanks !




           SACC2011

淘宝Java中间件之路