曾宪杰谈 Java 在淘宝的应用

  • 丁雪丰

2011 年 7 月 14 日

话题:Java开源MySQL架构阿里巴巴DevOps语言 & 开发

在 7 月 10 日举行的淘宝技术嘉年华淘宝技术专场上,来自淘宝产品技术部中间件团队曾宪杰(花名华黎)为大家介绍了近几年 Java 在淘宝的应用情况――《Java@Taobao》

演讲之初,曾宪杰先分四个阶段介绍了淘宝的建构变迁:

  • 2003 年 5 月至 2004 年 5 月,小而快的简单架构,基于 LAMP,符合当时的需求。
  • 2004 年 2 月至 2008 年 3 月,一个懵懂的阶段,开始分为多个层次。这个阶段需要一个能够支撑百万到千万用户级的架构,必须容易扩展;系统从 WebLogic 迁移至了 JBoss;开发了大量软件,例如TFS、iSearch、TDBM 和 CDN。
  • 2007 年 10 月至 2009 年 11 月,开始有前瞻性,走向产品化及服务化。能够支持大型团队的并行开发,系统逐步模组化、中心化,可快速扩容,可用性大大提升,基础软件也开始走产品化道路。非核心的数据由 Oracle 迁移到了 MySQL 上,构建起了消息系统和服务框架,淘宝开放平台(TOP)正式上线。
  • 2009 年 8 月至今的淘宝则更系统化、智能化及专业化,这是发展的必然方向。知识经验慢慢融入工具之中,降低了门槛,减少误操作几率;操作从人工处理逐步转为系统自主决策;在稳定性和性能方面有长足发展(在 2010 年以前 eBay 的稳定性要好于淘宝)。

曾宪杰指出所谓大型网站就是要同时满足高访问量和搞数据量的要求,核心是通过分布式系统解决数据的处理、存储及访问问题。随后,他根据淘宝网站的结构示意图,分别介绍了其中涉及到的 Java 基础技术产品。

首先是在阿里集团内被广泛使用的 Turbine 风格的 MVC 框架――WebX,其核心代码由阿里巴巴 18 创始人之一的周悦虹(宝宝)编写,具有很好的层次化、模块化特点,高度可扩展,WebX 还对 Velocity 模板做了编译优化,在一般情况下能有 20% 至 50% 的性能提升。

其次是中间件中的服务框架,负责服务的发布、查询、调用和治理。该服务框架使用上简单透明,支持软负载(没有中间层,服务使用方直接连接到服务提供方,使用服务注册查找中心进行管理),灵活可控,方便扩展,为保证稳定性提供了有力支持。

接下来是实现系统松耦合的消息中间件 Notify,这是一个高性能、高可靠、可扩展组件,支持最终一致性和订阅者集群。所谓订阅者集群,即将订阅消息的客户端分为多个集群,集群之间采用 Topic 方式,让每个集群都能收到消息,集群之中再按照 Queue 的方式,仅由一个客户端来处理消息。

在数据层上,为了更好地支持分库分表以及读写分离,也做了一定的封装,对上层应用而言还是在操作 JDBC,实际则是在使用淘宝分布式数据层(TDDL),它能实现 SQL 解析、规则路由、数据合并;既可以用 jar 的方式在客户端直接连接数据库,也可以让客户端通过 DBProxy 服务器访问数据库;还支持非对称数据复制。如果将众多数据源看成一个矩阵,横向是同一数据库的主库与从库,纵向是不同的数据库,TDDL 将数据源分为三个层次――TAtomDataSource,封装单个数据源,将配置进行集中管理;TGroupDataSource,封装横向的多个数据源,支持权重和节点的增减;TDataSouce,管理整个数据源矩阵。在具体的场景中,系统可以选择配置的粒度。

在分布式存储方面,淘宝基于HBase 0.90.2 做了一些扩展,主要是提供了一个运维页面,修正了 Master 节点恢复时间过长以及备用 Master 无法自动接管的问题,并做了一些优化。林昊在下午的iDataForum上就 HBase 做了更详细的分享。截止两周前的使用情况:

  • 一淘拥有 100 台服务器,已使用 60T。
  • 数据魔方拥有 10 台服务器,已使用 500G。
  • 交易日志拥有 12 台服务器,已使用 360G。
  • UDC 拥有 8 台服务器,使用 600G。
  • 此外还有众多应用,例如历史库搜索等。

搜索方面,基于LuceneSolr开发了终搜,可进行中心化的配置管理,容易接入,支持多种 Dump 机制。淘宝还拥有国内最大的Hadoop集群(云梯 I 系统),总容量超过 1400 台服务器,约 30PB,利用率 55.2%。主要做了 JobTracker 的异步化,NameNode 优化,存储优化以及小作业优化。为了提升稳定性,除了哈勃(使用Cassandra存储数据,由云梯处理数据)对全网服务器基础数据进行采集分析以外,淘宝还有 CSP 监控,它主要监控核心应用,协助进行容量规划,以及服务的依赖于降级。目前 CSP 一共有 15 台服务器,15 个库,对 200 多个系统进行监控,每日采集数据超过 5000 万行。淘宝如此大规模的系统的运维也是由系统完成,目前在系统的部署、发布、监控方面已经做了很多工作,在运维管理方面稍有欠缺。演讲最后,曾宪杰列举了众多各有特色的业务系统,分析了它们的架构,说明了各基础技术产品在这些系统中的应用。

如果您没有参加淘宝技术嘉年华,或者错过了心仪的主题,官方网站上已经陆续放出了演讲的幻灯片,可以访问日程安排页面进行下载。

Java开源MySQL架构阿里巴巴DevOps语言 & 开发