《淘宝数据库架构演进历程ppt课件.ppt》由会员分享,可在线阅读,更多相关《淘宝数据库架构演进历程ppt课件.ppt(42页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物淘宝数据库架构演进历程淘宝数据库架构演进历程丹臣/赵林数据架构师2010-12-12我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物提纲提纲l淘宝数据库发展的三个阶段l用户,商品,交易现在的架构l2010双11大促的挑战lMySQL源代码研究的一些思路l淘宝自主数据库Oceanbase原理介绍我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是
2、我也感到愉快,证实我的猜测没有错:表里边有一个活的生物淘宝的数据很美丽淘宝的数据很美丽我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物淘宝数据库发展三阶段淘宝数据库发展三阶段我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物SQL语句变化语句变化多表关联Join单表复杂查询主键查询SQL语句复杂程度由繁到简的过程,折射出淘宝数据架构的一些变化。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但
3、是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物淘宝电子商务网站的特点淘宝电子商务网站的特点l高并发,PV13亿,光棍节促销PV达到了17亿l数据实时性要求高l数据准确性要求高l大多数页面属于动态网页l网站需要大量商品图片展示l用户通过搜索引擎,广告,类目导航寻找商品l网站读多写少,比例超过10:1l卖家相关的数据量较大,比如商品数,评价数l业务量快速增长我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物不同的时期,不同的策略不同的时期,不同的策略正是因为如上的业务特点:l早期的淘宝前端应用系统,严重
4、依赖于数据库系统l早期单机式的mysql的使用方式,在业务的高速发展下,很快达到瓶颈lMysql迁移到Oracle,并升级到小型机,高端存储后,几年的时间里,满足了淘宝业务快速变化发展的需要。l我们的业务发展很快,但我们的技术没有成长我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物数据库里的数据数据库里的数据第一,二阶段的单台数据库里,用户,商品,交易等数据都在一起,存在许多的关联查询,应用完全耦合用户商品交易评价收藏我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到
5、愉快,证实我的猜测没有错:表里边有一个活的生物连接数问题连接数问题Oracle数据库太多的应用机器太多的应用机器有限的链接池有限的链接池需要数据库连接需要数据库连接小型机的内存有限,发现了Oracle数据库有连接数瓶颈,5000个以后相当吃力。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物中心化,服务化中心化,服务化l用户,商品,交易三大中心的建设我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物HSF的诞生的诞生l中心
6、化后面临另一个问题,服务调用者,与服务者之间如何进行远程通信,淘宝HSF诞生,数据库一些OLTP join问题解决。A服务B服务HSF我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物数据垂直化数据垂直化l应用中心化之后,底层数据库系统按照不同的业务数据进行了一系列的垂直拆分.此类拆分方式具有如下的特点: a. 拆分方式简单,只需要把不同的业务数据进行分离 b. 避免了不同的业务数据读写操作时的相互影响 c. 该业务内部及其所导致的问题依旧用户商品交易评价我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在
7、这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物问题问题l单库IOPS 3wl单库连接数已经4k个了,应用还在不断加机器?l单库每秒SQL执行次数到4w次l搜索dump数据缓慢,DW ETL缓慢用硬盘来拼IOPS?我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物一台高端存储的处理能力一台高端存储的处理能力480块盘的hdisk,max IOPS 6w注意应用可以接受的IO response time,以及IOPS点。比如3w IOPS以上,会达到20ms以上我吓了一跳,蝎子
8、是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物数据库架构发展新思路数据库架构发展新思路异构数据库读写分离原始架构图(08年8月份): 我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物异构的读写分离异构的读写分离 a. 写库为集中式的oracle环境,提供数据安全性保障 b. 读库使用mysql, 采用数据分片,分库分表,每台mysql放少量的数据,单个数据分片内部采用mysql复制机制 c. 读库的超大memory容量,起到了很好的c
9、ache作用,在内存中的数据查询性能远远高于在硬盘上的性能 d. oracle到多台mysql按规则复制,由TDDL完成 e. 分区键的选择至关重要,尽量让数据访问落在单台数据库上 g.利用好当前的高端硬件,保护好自己的投资 我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物构建数据查询的高速公路构建数据查询的高速公路l应用到DB的数据写入与查询从双向通行变成了单向通行,通行效率更高,大大避免了相互影响。“借道行驶”的情况不再出现。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?
10、但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物跨不过去的坎跨不过去的坎l为什么不直接迁到MySQL上面去呢? a. 对于核心业务,停机时间有限,宠大的数据无法短时间内迁移 b.无法在短时间内完成项目发布过程中的测试 c.没有搞过mysql分布式系统,对完全使用MySQL还没有信心 我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物大数据量核心业务数据迁移思路大数据量核心业务数据迁移思路采用两步走战略,不仅走得稳,而且走得好:l 先采用异构的数据库读写分离,将数据复制到目标mysql各结点,不断切换
11、应用相关的读服务到mysql结点上,验证可靠性,机器压力,服务响应时间l 将写压力从oracle结点迁移到mysql各结点,oracle停止写对于一些不太核心,业务不太复杂,相关影响点不多的数据,可以直接进行迁移。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物水库模型水库模型你的系统可以撑多少?系统余量还有多少?我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物数据库系统余量数据库系统余量两轮测试过程,确保上线稳定:l底
12、层数据库环境性能,稳定性的基础测试,常用的工具可以采用sysbench, orion, supersmackl选择不同的硬件,软件组合,模拟应用的压力测试,要超越当前业务压力的几倍进行,这个压力的幅度可以根据自己的业务增长设计一个合理的值。我们如何做到用数据来说话?靠测试拿数据,不靠经验我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物数据库系统余量数据库系统余量我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物数据生命周期
13、之历史迁移数据生命周期之历史迁移DataOnline DataHistory Data商品,交易,评价,物流等数据都有自己的生命周期。通过数据历史迁移,减少在线库的容量,提高在线库的性能。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物在线与历史应用分离在线与历史应用分离Online DataDatabaseHistory DataDatabaseOnline Application History Application 数据迁移程序在线库与历史库重要等到级不同,在线库更高同一应用的在线应用与历史应用分离
14、高级别的应用不能直接依赖于低级别的数据库我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物商品访问框架商品访问框架主键查询卖家查询淘宝商品的几个主要的查询:a.主键查询通过分布式数据库,以及分布式缓存系统解决b.卖家商品管理类查询,这一类的查询数据量大,并且还有like查询的需求,通过实时搜索解决商品分布式缓存分布式数据库实时搜索注:考虑不同的读载体的技术实现,性能,成本我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物用户
15、用户l用户登陆事件数据(日志量90%)与用户主数据(日志量10%)分离,不仅要分表,而且要放到不同的数据库集群中,并且作好不同数据等级的容灾处理。用户信息用户主信息用户信息扩展用户主信息数据库集群用户信息扩展数据库集群我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物过度中心化过度中心化用户中心Tair分布式缓存商品中心交易中心评价中心用户中心调用次数,高峰时期达到了每天60亿次,用户中心的过度中心化问题越来越显著,成为各种操作的关键路径。Mysql集群我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这
16、样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物用户中心中的读写分离用户中心中的读写分离用户中心Tair分布式缓存商品中心交易中心评价中心Mysql集群在其它中心中内置可以访问tair的客户端,大部份的读不需要经过用户中心,直接读tair,写需要经过用户中心。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物交易的读写分离框架交易的读写分离框架l主库按照买家拆分,读库按照卖家拆分。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证
17、实我的猜测没有错:表里边有一个活的生物一些难题一些难题l数据库集群自动扩展仍然是个难题,但是是可以忍受的,底层数据库集群经过评估,扩展的频率并不高。lMySQL DDL操作不便,锁表,对写操作影响较大,为了减少影响,分了比较多的表,进一步加重了维护的负担。l其它。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物光棍节大促光棍节大促活动前,经过了充分的准备与系统评估工作:CDN面临的压力最大,预估流量将会达到280G左右,准备了各个层面的系统降级方案。我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样
18、一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物一个小意外一个小意外lDataguard+mirror redo对写的影响比较大,临时删除远程的redo member解决这个问题我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物MySQL源代码研究源代码研究我们主要从两方面着手:lMySQL内部,源代码熟悉,性能优化,新增功能lMySQL外部,比如利用binlog做数据复制我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测
19、没有错:表里边有一个活的生物MySQL源代码研究源代码研究内部新增的一些功能:a.给innodb动态加数据文件b.禁止新连接c.表的访问统计d.Innodb ssd加速e.Mysql replication并行复制我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物MySQL Binlog解析数据复制中心解析数据复制中心解决商品,用户,评价,收藏夹等应用向数据仓库,搜索增量同步数据的需求我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一
20、个活的生物MySQL Binlog解析数据复制中心解析数据复制中心lC client端特性: a. 支持mysql master,slave主备切换,获取binlog不受影响 b. 自动重连主机 c. 支持checkpoint, 支持断点续传binloglJava端复制代码特性: a. 支持statement, row两种复制模式 b. 支持按规则复制 c. 支持一定条件下的并行复制 c. 支持checkpoint我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物异地多数据中心的数据同步异地多数据中心的数据同
21、步杭州青岛other我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物异地多数据中心的数据同步异地多数据中心的数据同步l除了oracle dataguard,master-slave replication数据复制,我们还有其它哪些可选方案?我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物淘宝自主数据库淘宝自主数据库Oceanbasel动态数据与静态数据进行分离,动态数据采用集中式,静态数据存放与服务采用分布式l设计了一个
22、宽表,冗余数据,将离散型IO合并成连续型IOl每晚动态数据,与静态数据合并一次l将首先在收藏夹应用上试点我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物总结总结l架构就是用一些简单的道理,去解决问题l对多种技术,业务特征,细节都要有所了解,考虑周全l识别系统的主要问题,花80%的精力去解决80%的问题l架构都是有时效性的,需要不断探索或者接受新的思路 我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物Follow melTaobao dba 团队blog http:/ subject: Data & Architecture http:/ http:/ echo_我吓了一跳,蝎子是多么丑恶和恐怖的东西,为什么把它放在这样一个美丽的世界里呢?但是我也感到愉快,证实我的猜测没有错:表里边有一个活的生物Questions ?