一个大型MySQL分布式系统诞生

from  http://zhaolinjnu.blog.sohu.com/116545760.html

    在淘宝,有一个业务系统,在一年半以前,这个业务系统很小,访问量很低,相关的表跟核心数据库放在一起,后来由于产品升级,新产品的许多功能很受会员的喜爱,会员大量使用,很快就对核心数据库造成了相当程度的IOPS冲击与威胁,也迅速消耗着核心存储的空间,为了不影响淘宝的核心业务,我们将此业务相关的表迁移出了核心库,创建了一个独立的ORACLE数据库,这种拆分数据库的方式,就是大家常说的垂直拆分。

    这种拆分方式,对上层业务应用程序变动很小,只是需要改一下数据库连接而已。尽管数据库独立了,但从本质上来讲,并没有优化这个业务的数据库。在新的数据库里,此产品仍然在高速发展,每天都制造着大量的数据,表和索引越来越大,存储空间达到了T级。由于此业务访问的离散性,对存储IOPS消耗极高,占用了大量的宝贵的存储资源。为了减少这种消耗,我们首先在业务层面进行了优化,拿掉了一些不必要的产品功能,并加入了一些限制,控制了一部份不正常的数据增长;在数据库层面,通过观察SQL,发现了应用程序中可以改进的业务逻辑以及进行必要有索引调整;还有对有些业务点加上适当的前端的Cache策略。通过以上的改进,在一定程度上缓解了整个系统的压力。

     对整个系统的根本性改造,我们一直在探索。对于技术出身的我们来说,一个小小的xx业务系统,占用了这么多的昂贵的存储硬件资源与ORACLE软件资源,心里总有一些不平静,要去改造它。而且这个业务系统仍然在不断的膨胀,好几个表的数据都超过了十亿级,进行索引调整的难度越来越大,对于前端业务的不断变化,这种调整又是必须的。采用集中式的ORACLE数据库方式,在前期,会在相当程度上减少前端应用程序的复杂性,但到了一定的规模过后,你会发现你要付出的代价也会呈指数级的增长,可维护性在逐渐降低。而且在这种高IOPS,高并发的情况下,数据库也会很容易出问题。

     从去年开始,taobao开始在一些小系统上采用MySQL数据库,但使用的方式跟ORACLE并没有什么不同。搭建master-slave主从复制结构,应用程序访问master,slave只起到接管的作用。为了改造这个业务系统,采用这么简单的结构是不行的。我们确立了几点目标,第一搭建一个分布式集群;第二集群采用廉价的PC;第三实现读写分离,slave也要承担一定的业务读;第四是用内存来支撑IOPS,不是硬盘。对于此项目业务的数据库,根据什么规则做sharding,又是摆在我们面前一个问题?在做这个架构设计的时候,我们sharding的原则,是要保证大量的访问都是在单库上完成的,不需要跨库merge与sort。我们确立了基本方案过后,联合开发与架构,细化了设计方案,在几个月前,开始了这场攻坚。

    因为是要对大表做数据的水平拆分,将数据拆分到多个数据库上,有几个重要的问题需要思考:
1.怎么把在ORACLE中几十亿的数据按规则迁到mysql集群中;
2.如何产生主键唯一值;
3.大表根据规则拆成小表,具体拆分粒度是多少?每个库多少表?
4.如何解决这么多库这么多表的路由问题;
5.如何解决跨库的merge与sort;
6.如何对连接进行管理;
7.如何做数据订正;
8.我们需要开发哪些集群管理工具,比如说建表工具;
9.集群遇到停电怎么办?
10.如何对集群中的数据进行历史迁移?
11.尽管集群采用廉价的PC,但具体采用何种PC,差别还是挺大的,如何平衡集群的规模与可管理性方面的问题?
12.集群对机房电力的消耗与机柜占用问题?

    在项目进行期间,DBA团队先后进行了几次数据迁移测试,在数据仓库与SA团队的帮助下,尽管经历了一些困难与挑战,但最终这些问题,大都一一解决。这个项目先后进行了三次程序发布,发布期间平滑迁移数据32亿条左右,感谢负责此项目的DBA同事们与可敬可爱的开发工程师们。这个项目,也使得我们的分布式中间件有了进一步的发展与完善,大大减化了上层业务系统开发的复杂度,不必关心下层业务数据的存放逻辑,感谢架构团队的精益求精。

    项目发布后,经过观察,各库不管是master与slave,负载基本相同,但集群中各库负载基本上都在6以上,稍微有点偏高。进行了一些SQL调化,主要是索引调整后,负载降到2以下。说起索引调整,这也是第一次对这么大的mysql集群做DDL,做一次大概需要好几个小时。这个时间消耗,超过了自己的预期。

    项目一期已经完成,二期很快又会启动,如果你想不断挑战自我,实现自我价值,加入淘宝DBA团队,这里有一流的环境,成为一名优秀的mysql DBA指日可待。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
第1节 课程概述 [免费观看] 00:12:22分钟 | 第2节 课程背景 [免费观看] 00:09:12分钟 | 第3节 纵观大型网站架构发展,总结持久化部分需要应对的问题 [免费观看] 00:27:12分钟 | 第4节 操作系统安装以及配置 00:31:22分钟 | 第5节 在CentOS上通过yum安装mysql5.7 00:15:32分钟 | 第6节 mysql初次见面-mysql5.7的用户以及安全策略 00:05:34分钟 | 第7节 mysql初次见面续-mysql基本操作 00:37:36分钟 | 第8节 认识主从复制 00:15:01分钟 | 第9节 主从复制的准备工作01-mysql用户以及权限 00:12:11分钟 | 第10节 主从复制的准备工作02-binlog日志详解 00:33:23分钟 | 第11节 主从实战01-准备环境 00:26:06分钟 | 第12节 主从实战02-主节点配置 00:06:19分钟 | 第13节 主从实战03-从节点配置 00:10:45分钟 | 第14节 java操作主从01 00:24:26分钟 | 第15节 java操作主从02 00:13:48分钟 | 第16节 主主复制 00:32:23分钟 | 第17节 负载均衡概述以及环境准备 00:20:42分钟 | 第18节 搭建负载均衡-01 00:22:54分钟 | 第19节 搭建负载均衡-02 00:06:06分钟 | 第20节 启动haproxy的监控功能 00:14:52分钟 | 第21节 高可用以及环境准备 00:40:14分钟 | 第22节 搭建keepalived 00:19:42分钟 | 第23节 Keepalived配置简介 00:11:01分钟 | 第24节 Keepalived配置邮件 00:42:27分钟 | 第25节 Keepalived其他配置 00:12:13分钟 | 第26节 分库分表概述 00:12:18分钟 | 第27节 逻辑分表01-水平分表 00:32:43分钟 | 第28节 逻辑分表02-水平分表续及垂直分表 00:13:36分钟 | 第29节 表分区 00:42:19分钟 | 第30节 数据库中间件01-认识mycat 00:22:32分钟 | 第31节 数据库中间件02-mycat安装 00:18:18分钟 | 第32节 数据库中间件03-mycat的helloworld 00:31:11分钟 | 第33节 数据库中间件04-mycat的初识 00:13:57分钟 | 第34节 数据库中间件05-mycat的数据切分 00:13:50分钟 | 第35节 数据库中间件06-mycat的读写分离-01 00:11:16分钟 | 第36节 数据库中间件06-mycat的读写分离-02 00:24:06分钟 | 第37节 数据库中间件06-mycat的读写分离03-读写分离补充 00:03:37分钟 | 第38节 数据库中间件07-mycat的高可用-01 00:10:01分钟 | 第39节 数据库中间件08-mycat的高可用-02 00:06:13分钟 | 第40节 数据库中间件09-mycat集群 00:08:08分钟 | 第41节 mysql查询缓存 00:08:17分钟 | 第42节 数据库切分概述 00:37:09分钟 | 第43节 java环境配置 00:13:42分钟 | 第44节 水平切分原理及单表切分后的操作 00:47:46分钟 | 第45节 水平切分原理及单表切分后的操作-2 00:19:32分钟 | 第46节 水平切分多表关联操作 00:38:14分钟 | 第47节 垂直切分原理及操作 00:17:23分钟 | 第48节 全局序列号 00:21:35分钟 | 第49节 数据库切分策略-分片枚举 00:35:49分钟 | 第50节 数据库切分策略-hash 00:41:16分钟 | 第51节 数据库切分策略-范围约定 00:17:20分钟 | 第52节 数据库切分策略-取模 00:13:54分钟 | 第53节 数据库切分策略-按日期分片 00:17:43分钟 | 第54节 全局表 00:04:27分钟 | 第55节 认识MyCat 00:13:55分钟 | 第56节 部署MyCat 00:20:20分钟 | 第57节 使用MyCat完成简单的数据库分片 00:28:58分钟 | 第58节 MyCat分片策略 00:13:08分钟 | 第59节 MyCat全局表配置 00:05:18分钟 | 第60节 MyCatER表配置 00:20:27分钟 | 第61节 另外一种切分方式-使用客户端组件的方式实现数据库分 00:06:20分钟 |
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值