`
MauerSu
  • 浏览: 513481 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

淘宝高并发访问数据库设计

 
阅读更多

源:http://xiaofang168.iteye.com/blog/1523995

评:

周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享。这里我把淘宝下单高并发解决方案的个人理解分享一下。我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的。

在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍。

要优化下单,提高下单的TPS (Transaction per second),我们首先要做的是对下单的逻辑剥离,只保留核心部分,而把附加功能剔除出去。比如说下单要考虑库存量,考虑发短信,要给卖家发旺旺消息通 知,要对订单做统计,要做销售额统计等等,这些功能是必要的,但是也是附加的功能,要最大程度提高下单这一步的TPS,就要先不考虑这些东西。

下单必然会涉及到买家查看订单,和卖家查看收到的订单,修改订单价格等,这是下单的核心。 在下单这个操作中有买家和卖家两个密切关联而有不同的视角。牧劳称为两个不同的维度。据牧劳的介绍下单这一步只有5张表,这5张表涵盖了这两个维度的操作。

下单是在一个数据库事务中进行的,要提高数据库的事务并发数,最有效的办法是拆分,拆分有两种,一是对库进行拆分,另一种是在同一个库中对表进行 拆分。要做拆分首先就要考虑拆分依据的字段,淘宝是根据订单号做拆分的,而下单中有两个维度,买家和卖家,对订单做拆分之后,必须还是可以通过买家,卖家 方便的查询着两个维度的数据。该怎么办呢?这里留个疑问,我先介绍淘宝拆分的规模,淘宝将订单表拆分到16个mysql库中,而在每个库中又将订单表横向 拆分为64份,相当于将一个表拆分为1024份。拆分之后事务会分散到1024套表中,这必然会很大程序上增加并发的事务处理能力(这儿我说是必然,但是 淘宝在使用这种方案之前是要经过压力测试,实际测试出这种方案的TPS之后,才会逐步采用这种方案的)。上面留了一个疑问,经过拆分之后如何保证买家卖家 快速的查询其下的订单呢?最好的办法是保证买家,卖家下的订单在一张表中,如何保证呢?淘宝的做法是将买家的id取模后放到订单号中。假定一个订单号是 142424594267664;这个订单号对应的订单该放在哪台服务器上的哪个表中,是根据订单的后四位7667,对1024取模之后决定的;同时 7667是买家id的后四位。这样买家在查询其订单时就可以通过其id获得其订单所在库以及表,就可以方便有效的查询买家订单了。这里会带来另外一个问 题,卖家查询订单时怎么办?前面我们已经提到卖家和买家被分成两个不同的维度来做表设计,卖家查询时不是直接查订单表,而是通过卖家维度的表来做查询。卖 家维度的表的插入,更新是通过在订单插入时发一个消息来通知插入的。同样对于发短信、发旺旺也是通过消息来处理的,这些附加功能不参与到下单的事务中去。

即使这样做了库,表的拆分,依然会有问题。淘宝在双11时的一天的交易量就达到了5000多万,这样几个月过去后,这些拆分后的表中的数据量也会 达到很大的一个量,处理速度就会下降。淘宝的做法是把三个月之前的老数据迁移到其他库中,这样就避免了数据量增大导致的系统响应时间降低的问题。但是会带 来另外一个问题,用户在查询订单时需要同时查两个库,一个是历史数据表,另一个是近期数据表;这个问题无可避免,就是通过查询两次解决。

也许有的朋友会想到拆分之后对全数据做统计会有问题。如果在拆分后的表上做统计,是肯定会有问题的。怎么做呢?其实很简单,把数据迁移到别的库中去做统计。

表做拆分可以大大的提高TPS,但是也会带来一些问题,需要通过可靠的消息通知机制通知其他模块做非核心处理的事情,需要通过高效的搜索系统保证搜索数据的及时更新。

以上是我个人对淘宝下单高并发设计的理解。这是肤浅的,实际做的时候肯定还需要考虑更多的问题,比如数据库的调优,磁盘IO方式,服务器稳定性;方案的可测试性,可量化等等。

上周六的技术还分享介绍了很多其他方面的精彩内容。感谢主办方,主持人! 期待@淘宝技术嘉年华 更多精彩的技术沙龙。

分享到:
评论

相关推荐

    淘宝数据库及源码taobaoDatebase

    1. **数据库访问层**:淘宝的源码可能包含数据库访问层(DAO,Data Access Object),封装了SQL查询和事务处理,为业务逻辑提供接口。 2. **ORM框架**:使用ORM(Object-Relational Mapping)如Hibernate或MyBatis...

    高并发Java服务器设计研究.pdf

    在高并发的情况下,服务器性能的不足可能导致用户体验下降,甚至导致系统崩溃,例如淘宝在双十一期间或铁路购票网站在高访问量时的系统崩溃事件。因此,寻找有效手段增强服务器的并发处理能力,提高服务器性能,增强...

    高并发高负载大型网站系统架构

    【高并发高负载大型网站系统架构】是指设计和构建能够处理大规模用户访问、高并发请求的网站系统。这种系统架构必须具备高安全性、高稳定性、高并发处理能力和高负载承受能力,以应对如淘宝等大型电商平台所面临的...

    淘宝数据库架构演进历程及OceanBase架构PPT课件.pptx

    * 高并发,PV13亿,光棍节促销PV达到17亿 * 数据实时性要求高 * 数据准确性要求高 * 大多数页面属于动态网页 * 网站需要大量商品图片展示 * 用户通过搜索引擎、广告、类目导航寻找商品 * 网站读多写少,比例超过10:1...

    高并发高负载网站系统架构

    本文将围绕高并发高负载网站系统架构,特别是静态化架构的设计方案展开讨论。 #### 二、高访问量系统的定义与特点 对于一个高访问量系统而言,其需要能够支撑大量的用户请求。以Java系统为例,若平均每秒需要处理...

    互联网公司技术架构资料.淘宝.数据库架构演进历程

    随着业务的发展,淘宝开始面临高并发、海量数据存储等问题,这就需要对数据库架构进行升级。 首先,淘宝引入了垂直拆分,将业务功能相关的表进行分离,减少了单个数据库的压力。这种架构改进提高了系统的处理能力,...

    2013数据库综合实验报告完整版

    3. **数据库设计**:报告可能详细讨论了数据库设计过程,包括需求分析、概念设计(ER图)、逻辑设计(表结构设计)和物理设计(索引、存储策略等)。 4. **数据库管理系统**:实验可能使用了特定的DBMS(数据库管理...

    淘宝高访问量优化

    ### 淘宝高访问量优化的关键知识点 #### 一、背景及面临的挑战 ...通过不断的优化和技术迭代,淘宝成功地解决了由高并发访问所带来的各种难题,为其他面临相似挑战的企业提供了宝贵的经验和借鉴。

    高性能数据库集群的读写分离设计.docx

    高性能数据库集群的读写分离设计是为了解决高并发读写操作场景下的性能瓶颈问题。下面是读写分离设计的关键知识点: 1. 读写分离概述 读写分离是指将数据库的读写操作分离到不同的数据库服务器上,以提高系统的...

    阿里巴巴Cobar架构设计与实践+数据库优化等4篇

    总的来说,阿里巴巴Cobar架构及其相关实践展示了在应对互联网高并发、大数据量挑战时,如何通过创新的技术方案和优化策略,构建稳定、高效、可扩展的数据库系统。这些经验对于其他大型互联网公司有着重要的参考价值...

    【61】Java高性能高并发秒杀系统实战视频教程下载 .txt

    它主要解决的是短时间内高并发访问带来的性能挑战。例如,在“双十一”、“黑色星期五”等大型促销活动中,用户会集中在一个特定的时间段内抢购商品,这就需要秒杀系统来支撑。 #### 1.2 应用场景 - **电商网站**:...

    数据库系统概论 (第四版) 学习指导与习题解析

    本书不仅包含了对数据库基础知识的讲解,还可能包含了对数据库设计、实施以及数据库系统的优化等高级主题的解析。由于本书是第四版,我们可以推断,它在前三版的基础上进行了修订和更新,以反映数据库技术的最新发展...

    音像销售系统系统设计.docx

    - **时间性能**:系统需支持多用户并发访问,确保在高并发情况下仍能正常运行。具体而言,系统需要支持至少10,000个同时在线用户,并且页面响应时间不超过3秒。 - **空间性能**:系统应确保数据存储和管理的一致性与...

    陈吉平:高可用分布式数据库系统架构实践ppt讲稿

    陈吉平在其演讲“高可用分布式数据库系统架构实践”中,分享了淘宝网在数据库架构演进过程中的宝贵经验。 #### 二、淘宝网发展历程与数据库架构变迁 ##### 淘宝网发展历程 - **2003年**:淘宝网成立之初,主要采用...

    淘宝红绿仙女版--自己搭建

    总结来说,淘宝红绿仙女版的搭建涉及前端开发、后端开发、数据库设计、服务器配置、负载均衡、高并发处理等多个方面,需要全面的IT知识和技术。在整个过程中,开发者需关注用户体验、系统性能、数据安全和稳定性,以...

    实验报告关于淘宝网架构设计

    从操作系统、应用服务器、Web服务器、数据库到开发框架,每个环节的选择都经过深思熟虑,旨在满足高并发、大数据处理的需求,同时兼顾成本控制和技术创新。通过上述分析,我们可以看到,淘宝网的成功不仅在于其庞大...

    分布式数据库ppt

    这样的设计使得分布式数据库能够处理大规模的数据量,提供高并发性,并增强系统的容错能力。 在“分布式数据库系统概述”这个主题中,我们可以深入探讨以下几个关键知识点: 1. **分片策略**:在分布式数据库中,...

Global site tag (gtag.js) - Google Analytics