SlideShare a Scribd company logo
大型系统的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
                                       消息   软负
 分布式存储                                           配置
                     服务框架              中间   载中
                                                 管理
并行计算平台                                  件    心
 监控/告警     Service           Service

 运维平台
依赖、容量管理              数据层


          DB    DB      DB(S) DB(S)


                     迁移/复制
Java中间件@淘宝
• 消息中间件

• 服务框架

• 软负载与配置管理

• 数据层
Java中间件-服务框架
               LoadBalancer


  搜索
          WebApp           WebApp
  Cache
                                       消息   软负
 分布式存储                                           配置
                     服务框架              中间   载中
                                                 管理
并行计算平台                                  件    心
 监控/告警     Service           Service

 运维平台
依赖、容量管理              数据层


          DB    DB      DB(S) DB(S)


                     迁移/复制
Java中间件-消息中间件
• Notify   正在准备开源
  – 轻量级支持最终一致
  – 支持订阅者集群
• MetaQ(metamorphosis)   已经开源
  – 消息顺序
  – 事务
Notify-最终一致性
  本地事务域
                          T4业务操作
              Publisher                 业务操作


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

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

                          SubscriberA

                                        A1   A2
    Publisher    Notify
                          SubscriberB

                                        B1   B2


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


  B1和B2也是类似的关系
Queue In JMS
• 每个连接都有唯一的ClientId


        JMS Server
消息(1-
8)                         Queue




                      A1     A2    B1    B2

                     1,5    2,6    3,7   4,8
Topic In JMS
• 每个连接都有唯一的ClientId
                               A1   1-8




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

                               B1   1-8



                               B2   1-8
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
消息可靠

• Oracle+小型机+高端存储

• 写双份Mysql

• Mysql Replication

• 基于文件

• 基于内存.
Notify vs MetaQ
• 功能
 – 顺序

 – 去重

 – 事务

 – 集群订阅者与组内广播

 – 扩容

 – 可靠性.
消息中间件

• 功能外要考虑的
 – 隔离

 – 降级

 – 性能

 – 问题定位和排查.
Java中间件-服务框架
               LoadBalancer


  搜索
          WebApp           WebApp
  Cache
                                       消息   软负
                                                 配置
 分布式存储               服务框架              中间   载中
                                                 管理
并行计算平台                                  件    心
 监控/告警     Service           Service

 运维平台
依赖、容量管理              数据层


          DB    DB      DB(S) DB(S)


                     迁移/复制
Java中间件-服务框架
• 需求的产生

  Denali   LoadBalancer
                   Mckinley     Fortuna        ……



      WebApp         WebApp

                服务框架
                    Cache          分布式文件系统
      DB
      Service         Service


    DB      DB 非可靠通知服务
                DB(S) DB(S)               搜索
Java中间件-服务框架
 服务发布



 服务查询



 服务调用



 服务治理
Java中间件-服务框架
• 纯Proxy方式

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




  调用者          服务提供者
   调用者          服务提供者
Java中间件-服务框架

                   服务提
      调用者
                   供者
       服务          服务
       框架          框架

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

                   服务提
      调用者
                   供者
       服务          服务
       框架          框架




            服务注册
            查找中心
定于服务地址信息            发布服务地址信息
 中心会主动推送
Java中间件-服务框架
• 上线不仅仅是功能这么简单
 – 隔离
 – 路由
 – 降级/流控
 – 依赖图
 – 跨语言支持
 – 跨机房处理.
• 计划6月底前开源
Java中间件-服务框架
                         各种规则
            持久配置
             中心




                   服务提
      调用者
                   供者
       服务          服务
       框架          框架
                         请求直接送达服务端
                         没有中心代理服务器
                   服务提
      调用者
                   供者
       服务          服务
       框架          框架




            服务注册
            查找中心
定于服务地址信息            发布服务地址信息
 中心会主动推送
Java中间件-软负载中心
               LoadBalancer


  搜索
          WebApp           WebApp
  Cache
                                       消息   软负
                                                 配置
 分布式存储               服务框架              中间   载中
                                                 管理
并行计算平台                                  件    心
 监控/告警     Service           Service

 运维平台
依赖、容量管理              数据层


          DB    DB      DB(S) DB(S)


                     迁移/复制
Java中间件-软负载中心
 配置中心是一个基于经典的“发布/订阅”模型的通讯框架。并在此
 基础上融入了适合淘宝网情的一些本土化特性,比如数据发布的
 自动聚合、生命周期关联……




发布者           配置中心                订阅者
Java中间件-软负载中心
自动聚合




       配置中心



        使用场景:服务集群的成员信息汇聚,
        如:
         > 汇总服务提供者
         > 汇总服务器地址
进入Java中间件-软负载中心
生命周期关联




         配置中心



         使用场景:自动关联服务的可用状态,如:
          > 即时感知服务提供者的加入/退出
          > 服务器集群成员清单的动态维护
进入Java中间件-软负载中心
• 其他功能
  – 支持指定分组
  – 基于IP的分组
  – 机房隔离
  – 权重调整
• 教训
  – 性能
  – 生命周期的感知.
• 计划6月底之前完成开源
Java中间件-配置管理
               LoadBalancer


  搜索
          WebApp           WebApp
  Cache
                                       消息   软负
 分布式存储                                           配置
                     服务框架              中间   载中
                                                 管理
并行计算平台                                  件    心
 监控/告警     Service           Service

 运维平台
依赖、容量管理              数据层


          DB    DB      DB(S) DB(S)


                     迁移/复制
Java中间件-配置管理
•   是一个集中式的持久配置管理系统
•   简单
    –    数据库集中存储,没有集群间同步,保证数据一致
    –    以Web server + static file方式提供服务
    –    只能通过OPS&SDK发布数据

•   可靠
    –    支持主动和定时方式,保证能拿到最新数据
          •   正常情况延迟<1S,异常情况延迟<10S

    –    多级保护和容灾支持
          •   数据库、 Server挂了都不会影响应用

•   允许人工介入
    –    支持本地配置,可以脱离server运行

•   正在开源中
Java中间件-配置管理
    主动/定时获取配置                        发布配置

       Client             SDK                      OPS




            Apache      流控模块             Apache
                       mod_evasive

           Web App                       Web App
                          更新
                                                   读取数据的请求

                File                        File
                         MySQL
       更新时&定时dump
                                     replication


                         MySQL
                          MySQL
                           MySQL
Java中间件-配置管理

• 配置管理与软负载中心的关系
 – 看起来是比较像的两个系统

 – 数据来源不同

 – 数据生命周期不同

 – 数据准确程度不同
Java中间件-数据层
               LoadBalancer


  搜索
          WebApp           WebApp
  Cache
                                       消息   软负
 分布式存储                                           配置
                     服务框架              中间   载中
                                                 管理
并行计算平台                                  件    心
 监控/告警     Service           Service

 运维平台
依赖、容量管理              数据层


          DB    DB      DB(S) DB(S)


                     迁移/复制
Java中间件-数据层
数据库架构的演进



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

                          User2        User2-M   User2-S



             Trade
Java中间件-数据层




开源过程中
Java中间件-数据层
Java中间件-数据层
                     TAtomDataSource



           User1-M     User1-S

                                              TDataSource

           User2-M     User2-S




数据源的三层重构                   TGroupDataSource
业务可以灵活选择
Java中间件-数据层-DbProxy
• Client->DB方式走向Client->Server->DB
Java中间件-数据层-读写分离
Master




Slave
Java中间件-数据层-读写分离

Slave




Master1     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个集群

• 服务框架
  – 线上提供服务数量:1000+

• 数据层

  – 接入了所有重要Java应用,覆盖率超过Java应用的80%

  – 每日数据复制记录数10亿+。
总结和展望
• 易用性
 – 开发
 – 调试
 – 运维
• 稳定性
 – 降级
 – 隔离
 – 对应用的保护
总结和展望
• 中间件对于大型互联网的价值

• 构建中间件的策略.
谢谢

More Related Content

What's hot (20)

PDF
D baa s_in_xiaomi
hdksky
 
PDF
盛大游戏运维体系
Ken Liu
 
PPTX
Accelerate Database as a Service(DBaaS) in Cloud era
Junchi Zhang
 
PDF
鹰眼下的淘宝_EagleEye with Taobao
terryice
 
PPT
张铁安:Feed系统架构浅析
Leechael
 
PDF
MySQL 高可用方案及成功案例
郁萍 王
 
PDF
MySQL5.6&5.7 Cluster 7.3 Review
郁萍 王
 
PPT
腾讯大讲堂24 qq show2.0重构历程
areyouok
 
PDF
MySQL 網路參考架構
郁萍 王
 
PPTX
中大型规模的网站架构运维 Saac
Chao Zhu
 
PDF
Bdwf11 netezza james_zheng
bigdatawf
 
PPT
数据访问层开发实践
xcq
 
PDF
艺龙旅行网架构案例分享-Qcon2011
Yiwei Ma
 
PDF
开源+自主开发 - 淘宝软件基础设施构建实践
Wensong Zhang
 
PPTX
Memcached vs redis
qianshi
 
PDF
MySQL5.6新功能
郁萍 王
 
PDF
低功耗服务器定制与绿色计算
Wensong Zhang
 
PPT
Cassandra简介.ppt
james tong
 
PDF
大数据时代feed架构 (ArchSummit Beijing 2014)
Tim Y
 
PPTX
分布式系统日志处理调研
klandor
 
D baa s_in_xiaomi
hdksky
 
盛大游戏运维体系
Ken Liu
 
Accelerate Database as a Service(DBaaS) in Cloud era
Junchi Zhang
 
鹰眼下的淘宝_EagleEye with Taobao
terryice
 
张铁安:Feed系统架构浅析
Leechael
 
MySQL 高可用方案及成功案例
郁萍 王
 
MySQL5.6&5.7 Cluster 7.3 Review
郁萍 王
 
腾讯大讲堂24 qq show2.0重构历程
areyouok
 
MySQL 網路參考架構
郁萍 王
 
中大型规模的网站架构运维 Saac
Chao Zhu
 
Bdwf11 netezza james_zheng
bigdatawf
 
数据访问层开发实践
xcq
 
艺龙旅行网架构案例分享-Qcon2011
Yiwei Ma
 
开源+自主开发 - 淘宝软件基础设施构建实践
Wensong Zhang
 
Memcached vs redis
qianshi
 
MySQL5.6新功能
郁萍 王
 
低功耗服务器定制与绿色计算
Wensong Zhang
 
Cassandra简介.ppt
james tong
 
大数据时代feed架构 (ArchSummit Beijing 2014)
Tim Y
 
分布式系统日志处理调研
klandor
 

Similar to 大型系统的Java中间件实践q con北京 (20)

PDF
基于云计算平台的移动Iptv系统设计及负载均衡技术研究
liangxiao0315
 
PPTX
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
 
PDF
网易 李弈远 网易服务集成框架的构建与运维
guiyingshenxia
 
PDF
网易 李弈远 网易服务集成框架的构建与运维
colderboy17
 
PPTX
分布式索引系统调研
zijingyeshao
 
PPTX
Alibaba Service Framework Practice
Shawn Qian
 
PDF
张松国 腾讯微博架构介绍08
drewz lin
 
PPT
亚马逊云计算Aws
锐 张
 
PDF
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
Xu Wang
 
PDF
Mysql HandleSocket技术在SNS Feed存储中的应用
iammutex
 
PPT
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
锐 张
 
PDF
新时代的分析型云数据库 Greenplum
锐 张
 
PDF
大型互联网广告应用系统架构
Shaoning Pan
 
PPT
如何构建企业私有云
wendy bai
 
PDF
Hadoop大数据实践经验
Hanborq Inc.
 
PDF
杜嵩 Arch summit2012 dusong@freewheel
drewz lin
 
PDF
Hadoop大数据实践经验
Schubert Zhang
 
PDF
CCCC China Telecom Jun Wan
Cloud Congress
 
PDF
07 丛磊
锐 张
 
PDF
RockStor - A Cloud Object System based on Hadoop
Schubert Zhang
 
基于云计算平台的移动Iptv系统设计及负载均衡技术研究
liangxiao0315
 
Pm 04 华胜天成openstack实践汇报-20120808
OpenCity Community
 
网易 李弈远 网易服务集成框架的构建与运维
guiyingshenxia
 
网易 李弈远 网易服务集成框架的构建与运维
colderboy17
 
分布式索引系统调研
zijingyeshao
 
Alibaba Service Framework Practice
Shawn Qian
 
张松国 腾讯微博架构介绍08
drewz lin
 
亚马逊云计算Aws
锐 张
 
何时浮云散尽(在北邮北邮纪阳老师移动互联网课程上的讲义)
Xu Wang
 
Mysql HandleSocket技术在SNS Feed存储中的应用
iammutex
 
新浪云计算公开课第一期:Let’s run @ sae(丛磊)
锐 张
 
新时代的分析型云数据库 Greenplum
锐 张
 
大型互联网广告应用系统架构
Shaoning Pan
 
如何构建企业私有云
wendy bai
 
Hadoop大数据实践经验
Hanborq Inc.
 
杜嵩 Arch summit2012 dusong@freewheel
drewz lin
 
Hadoop大数据实践经验
Schubert Zhang
 
CCCC China Telecom Jun Wan
Cloud Congress
 
07 丛磊
锐 张
 
RockStor - A Cloud Object System based on Hadoop
Schubert Zhang
 
Ad

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