Java中间件:淘宝网系统高性能利器

【TechTarget中国原创】淘宝网是亚太最大的网络零售商圈,其知名度毋庸置疑,吸引着越来越多的消费者从街头移步这里,成为其忠实粉丝。如此多的用户和交易量,也意味着海量的信息处理,其背后的IT架构的稳定性、可靠性也显得尤为重要。那么,他们是怎么办到的呢?

  曾宪杰(花名花黎)是淘宝Java中间件团队成员,他认为大型网站就是要同时满足高访问量和高数据量的要求,核心是通过分布式系统解决数据的处理、存储及访问问题。

  消息中间件Notify

  早期,淘宝并没有Java中间件,其系统框架比较简单。下面我们就来看看Java中间件在淘宝的诞生和发展。首先要说的是实现系统松耦合和 异步处理的消息中间件Notify,这是一个高性能、高可靠、可扩展组件,轻量级支持最终一致性和订阅者集群。所谓订阅者集群,即将订阅消息的客户端分为 多个集群,集群之间采用Topic方式,让每个集群都能收到消息,集群之中再按照Queue的方式,仅由一个客户端来处理消息。

  对于淘 宝来说,最终一致性至关重要。有过淘宝经验的人都知道,在我们完成付款之后,订单状态会立刻更改为已付款。如果用户付款之后,淘宝不能通知支付宝为该用户 的账号充值,商家也不能知道用户已经付款,也就是整个交易的所有参与方不能实现最终状态一致性的话,整个交易也就无法继续下去。曾宪杰笑言:“如果真的发 生这样的情况,那么淘宝就不用做了。”

  在实现消息的可靠性上,淘宝采用Oracle+小型机(IBM)+高端存储(EMC)的形式,写双份Mysql,同时基于文件和内存。Notify目前每天消息总量达到4.4亿,每天消息投递条次约15亿次,总共有78个消息主题,786种消息类型,部分消息订阅者超过30个集群。下图是淘宝在应用了Notify之后的系统架构图:

  淘宝服务框架——HSF

   应用了消息中间件之后,淘宝仍旧面临着一系列问题,比如上百人维护一个代码百万行的前台核心应用;多个业务系统中的代码重复编写以及数据库连接数接近瓶 颈。那怎么解决呢?服务化成为淘宝的上选。应用服务化解决了业务核心的稳定和一致的问题,重要数据库的连接数也得到了缓解;此外,系统分解后,效率和稳定 性也得到了显著提升。

  曾宪杰介绍他们的这个服务框架称之为HSF。目前HSF线上提供的服务数量超过六百个,每日的调用总量达到150亿以上,现在甚至更高。下图是应用了HSF之后的系统架构图:

  淘宝分布式数据层TDDL

   在淘宝的数据库架构演进过程中,为了更好地支持分库分表以及读写分离,进行了一定的封装。对上层应用而言仍旧操作JDBC,实则是在使用淘宝分布式数据 层(TDDL),它能实现SQL解析、规则路由、数据合并;既可以用jar的方式在客户端直接连接数据库,也可以让客户端通过DBProxy服务器访问数 据库;具备三层的数据源结构,还支持非对称数据复制。

  目前TDDL每日SQL执行量达到30亿以上,每日的数据复制量约为2.8亿多。下图是淘宝加上TDDL之后的系统架构:

  尽管目前淘宝的Java中间件发展顺利,但也并不意味已经解决了一切问题。目前仍旧存在一些问题需要解决,曾宪杰表示在这些问题上,他们希望通过开源的途径得到解决,同时能够根据业务需求提供相应的新功能,另外系统的稳定性仍旧是他们要关注的内容。

时间: 2024-10-12 07:59:40

Java中间件:淘宝网系统高性能利器的相关文章

java调用淘宝api

代码下载地址:http://www.zuidaima.com/share/1550463234034688.htm 原文:java调用淘宝api java代码结构: java调用淘宝api,布布扣,bubuko.com

Java 实现 淘宝秒杀 聚划算 自动提醒 源码

说明 本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时自动弹开页面(URL自己定义). 可以自定义监控持续分钟数,同时还可以通过多线程加快刷新速度. 源码 package com.itechzero.pricemonitor; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; im

淘宝网系统架构分析以及数据库架构简介

一个成熟的大型网站(如淘宝.京东等)的系统架构需要考虑诸多复杂的因素,因为像淘宝这种大型网站数据量比一般的网站要大的多,所以在设计架构方面也要复杂的多,既要考虑成本因素也要考虑访问速度安全性等.这里我简单的对淘宝的网站系统架构进行一个简单的分析. 淘宝作为一个大型购物网站,其数据量是很大的,所以不像一般网站,淘宝需要用各种方法来保证服务器的正常运行以及用户购买时的良好体验.主要由以下方式:1.应用.数据.文件分离 2.利用缓存改善网站性能 3.使用CDN和反向代理提高访问速度 4.使用分布式文件

淘宝的高性能可伸缩架构---session处理

应用无状态 原来 假如在session 保存大量的客户端状态信息, 保存session的服务器宕机, 通过集群解决, 集群不仅有负载均衡, 更重要的是要恢复 failover 问题 tomcat 用集群节点广播复制, jboss用配对复制 等session状态复制策略有局限 会严重影响系统的伸缩性 因为集群节点间 session通信随着节点的增多而开销增大 解决1 因此要做到应用本身的伸缩性, 就要保证应用无状态 实现1 淘宝的session框架用clientcookie实现 将状态转移到coo

手握淘宝无线流量利器,便能天下无敌!

PC端的流量大蛋糕已经被分得所剩无几,无线端显然成了今年流量开拓的新方向.但如何获取更多的无线流量,相信会是很多商家都很关注的问题.下面一起来看下无线首页的流量入口都有哪些,可以通过哪些方式获取! 一.无线首页都有哪些流量入口? 先来看一下手机淘宝的界面: 从手机淘宝的前四屏中,我们可以看到手机淘宝基本可以分为5个大版块: 1.导航 2.活动资源位:钻石展位.聚划算.淘宝头条.淘抢购.有好货.爱逛街.每日新品.天天特价.特色中国.聚名品.全球购.免费试用.天猫国际.俪人购.喵鲜生.品牌街.清仓.

Java 实现 淘宝秒杀 聚划算 自己主动提醒 源代码

说明 本实例可以监控聚划算的抢购button,在聚划算整点聚的时间到达时自己主动弹开页面(URL自定义). 能够自己定义监控持续分钟数,同一时候还能够通过多线程加快刷新速度. 源代码 package com.itechzero.pricemonitor; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamR

淘宝的高性能可伸缩架构 --- 应用拆分

方案: 将原来的系统 按一定的标准 分为不同的子系统 目标:  提高整个系统的可用性, 子系统耦合减低,  某个子系统出错, 整体系统还是可用 目标:  当某个子系统变大的时候, 可以对这个子系统水平扩展, 而不影响其他系统, 如同前端的组件化开发, 一个组件可以不断去丰富它的功能, 而不会影响到先用其他组件的功能和用法 拆分引发的问题: 子系统之间如何通讯 解决方法:高性能远程调用框架, 分为同步通讯 和 异步通讯

JAVA解析淘宝IP地址库

服务器地址: http://ip.taobao.com/instructions.php 需 JSON jar包 1 import java.io.BufferedReader; 2 import java.io.DataOutputStream; 3 import java.io.InputStreamReader; 4 import java.net.HttpURLConnection; 5 import java.net.URL; 6 7 import org.json.JSONObjec

淘宝的高性能可伸缩架构 --- 非结构数据存储

哪些数据不放在数据库: 1. 比如一些配置文件,用户对应的动态,一次交易的快照等,一般不适合保存到rdbms,更符合一种key-value的结构 2.      另一类数据,数据量非常大,但实时性要求不高,此时这些数据也需要通过另外的一种存储方式进行存储 一些静态文件,比如各个商品的图片,商品描述等信息,这些信息因为比较大,放入rdbms会引起读取性能问题, 影响其它数据读取性能,也要和其它信息分开存储,一般的选择分布式文件系统, 随 着互联网的发展,业界从08年 下半年开始逐渐流行了一个概念就