Taobao数据库这5年

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

@tb丁原2012-04-10我的经历:Taobao数据库这5年DTCC2012DTCC2012感谢感谢it168,itpub感谢Taobaodbateam感谢在场的所有同学DTCC2012DTCC2012索引Taobao数据库这5年MySQL化面临的问题及应对DTCC2012DTCC2012weibo上的讨论DTCC2012DTCC2012为什么选择开源(MySQL)•成本驱动•公司自身技术积累,商业软件在淘宝优势逐步弱化•其他客观条件上面3点,哪点是决定性的?DTCC2012DTCC2012成本高,到底有多高刚开始买服务器(拿个袋子就去了)后来的成本(得用大卡车运钱去)DTCC2012DTCC2012成本高,到底有多高某业务真实的数据:2010年DB+硬件的投入在1100万左右。2011年DB+硬件的投入在2200万左右。2012年DB+硬件的投入在4400万左右。备注:没有不差钱的公司这单单只是某个业务的压力,可想整体成本的压力有多大既然这么贵,我们为什么不尝试免费的呢DTCC2012DTCC2012选择开源初期面临的挑战团队内部(dba):1.团队人员非常,非常擅长商业db2.对开源db的理解一穷二白,需要快速积累,放弃你最熟悉的,选择重新开始3.原有思维方式固化,改变需要时间4.其他团队外部(除dba之外的):1.为什么要拥抱开源,好处在哪儿2.用了开源软件,dba还是最专业的吗?3.打破原有集中式的思维,换一种方式,同时还要考虑更多的东西4.其他--拥抱变化推进过程强推,阻力大?一蹴而就还是按部就班,几年几年必须要完成?1.尝试阶段(小业务,小范围开始)2.积累阶段(使用过程中开发,dba面临的问题,解决问题)3.继续积累,验证(解决新的问题,逐步推广到更多的业务线)4.大规模可用阶段DTCC2012DTCC2012关键点开发易用性:成熟的中间层,尽量减少开发的难度DBA易运维:强大的MySQL底层运维平台其他:思想统一,协作,配合DTCC2012DTCC2012关于现在,未来1.关于成本开源&&商业解决方案,那个成本更加昂贵,现在我们很难知道,各有各的说法,但是未来一定是开源软件的(爱是做出来的,做了就一定有机会看到)。2.定制化开源软件的趋势(hbase,mysql,hadoop,linux内核。。。)3.DTCC2012DTCC2012MySQL的淘宝历史年份阶段重要项目(里程碑)2008年尝试阶段始于画报(poster)项目-2010年发展阶段Tddl中间层zdatasource数据源MySQL监控逐步成熟核心业务有计划的开始往MySQL上迁移-现在继续发展阶段MySQL秒级别故障切换MySQLsemisync,onlineddl,myawr定制自己的MySQL,彻底拥抱开源核心业务全部迁移到MySQLdb上NoSQL尤其hbase成为db的有力补充DTCC2012DTCC2012MySQL线上服务器统计DTCC2012DTCC2012这5年,数据存储产品比例010203040506070809010020072008200920102011商业db开源dbNoSQL存储趋势上:集中式,分布式,云?DTCC2012DTCC2012索引Taobao数据库的这5年MySQL化面临的问题以及应对DTCC2012DTCC2012商业DBvsMySQL商业db,MySQL各自的优缺点,适用场景?DTCC2012DTCC2012商业DBvsMySQL商业软件稳定,功能非常强大,代码非常严谨,不会出现低级的buglicense贵,软件黑盒子确实非常非常好用开源软件轻量级数据库(连接线程级别)扩展性好,可以针对具体业务场景进行定制地雷多(比如ddl出现丢表的情况)商业软件可能适合传统业务类型,对数据库稳定性要求非常高的业务。MySQL可能适合于变化非常快的互联网,数据量急剧膨胀,但数据的重要性相对不那么care。那,那,那我们属于哪一类?DTCC2012DTCC2012使用MySQL,你有什么顾虑使用MySQL会有很多顾虑,开发的顾虑,dba的疑虑,没有关系,我们来一起解决。•MySQL会丢数据吗•MySQL容灾快速切换方案•MySQL的性能怎么样•MySQL开源软件自身的稳定性怎么样•MySQLddl锁表(阻塞写)怎么解决•MySQL备库同步延迟,备库跟不上主库•MySQL主备库数据的一致性校验•相比商业软件成熟的解决方案,MySQL+PC架构其高可用如何保证DTCC2012DTCC2012MySQL会丢数据吗丢数据场景:1.MySQL数据库down掉会丢吗?2.Mysql服务器异常down掉(比如CPU,RAM损坏,淘宝这几年发生的几率不到5/1000)3.硬盘坏掉会不会丢数据?--innodb_flush_log_at_trx_commit参数设置为1(每个事务日志都flush到磁盘),设置为2(每个事务刷到logfile中,每秒flush到磁盘中)。--Slave远程binlog:通过slave来保证数据不丢失,binlog实时传送到远程slave,基本上在毫秒之内。会丢数据吗MySQL丢数据:更多指MySQL采用pc服务器,pc服务器存在硬件损坏的可能性(比如内存,cpu坏掉),导致丢数据。怎么来避免这种情况?DTCC2012DTCC2012MySQL高可靠方案(Semisync)淘宝MySQL对semisync做了一些改动://code.google.com/p/google-MySQL-tools/wiki/SemiSyncReplicationDesignDTCC2012DTCC2012我们在用的不丢数据方案--线上情况1.应用双写(写两份)2.应用通过记录log来实现(比如通过notify消息)3.Semisync方案DTCC2012DTCC2012MySQL高可用方案硬件故障是很难避免的。我们要做的是,挂掉的情况下如何快速恢复,减少对业务的影响?MySQLMM(和MS的区别?)机制,双向复制,数据库秒级别切换切换步骤上:1.Db主备库切换2.App数据源切换,通过zdatasource来做两者打包,做到db和数据源一键切换,尽量缩短切换时间db1db2db1db2MMAPPDTCC2012DTCC2012MySQL的性能表现线上业务机器:基本配置:2*4cpu2.3G,12*SAS,32GRAM,MySQL5.1.48单台机器的dml达到了4000/s,qps超过了15000/s(性能主要看场景和数据量,仅供参考)。DTCC2012DTCC2012MySQL性能之_软件架构线上MySQL版本:5.1.48,PerconaServer5.5.20MM架构:线上主要架构MS架构:多Slave可以提供更多的读服务,比如论坛帖子应用DTCC2012DTCC2012MySQL性能之_硬件架构业务模型决定硬件选型,业务模型是什么?•数据量大小•读写比例,读多写少还是写多读少基本硬件配置:•内存基本配置24G,48G,96G,根据业务来决定内存选型,内存cache依然为王•磁盘:Fusionio,ssd,sas,sata,fio+flashcache,oltp应用最关注的是Iops,磁盘是否给力直接决定了性能备注:这几年硬件更新换代很快,单条pc服务器的性能越来越好DTCC2012DTCC2012MySQL性能之_flashcache源于facebook,初始用于加速MySQLinnodb引擎IO现在是通用的软件方案块加速设备(土点可以理解为二级缓存)url:主备库延迟解决方案(relay-fetch预热)基本思路:在备库sql线程执行更新之前,预先将相应的数据加载到内存中业界=Label:Tool-mk_slave_prefetch&sort=type主备库延迟解决方案(transfer)原有方案:单线程--相关资料(淘宝丁奇)改进方案:多线程DTCC2012DTCC2012MySQLonlineddlonlineddl工具:业界onlineddl工具基本实现原理都是一致的,原理基本差不多的。能做到的是:在ddltable的过程中,app依然可以进行读写操作。--工具链接oak-online-alter-table::(pecona出品)myddl:(nigoo开发,已经在用)DTCC2012DTCC2012MySQL主备库逻辑复制的风险主备库:MySQL通过逻辑(statementorrow模式)复制来实现主备库数据同步。逻辑复制理论上是有风险的,极端情况下可能存在主备库数据不一致。应对方案:1.尽量采用row模式2.主备库定期数据一致性校验3.数据生命周期的binlog尽量保存下来DTCC2012DTCC2012MySQL其他问题应对•MySQL高可用解决方案MM,MS机制动态数据源机制实现异常快速切换(秒级别)通过改造后的semisync来保障数据不丢失,或是应用设计上高可用考虑应用数据补偿方案•应用设计往前一步,任何设计都假设MySQL挂掉的应对方案•开源软件带来更多灵活性,遇到BUG,及时去修复bug,也可以定制我们自己的MySQL采用MySQL:App一定要站在db的角度来考虑问题,db站在app的角度来思考。DTCC2012DTCC2012使用MySQL,你还有什么顾虑DTCC2012DTCC2012不断假设,不断去验证--测试(假设了很多场景,寻找解决方案,不断的打消我们自己的疑虑))--异常测试DTCC2012DTCC2012MySQL之技术储备怎么让开源软件好用,怎么让普通pc服务器健壮起来,这需要所有人的参与。--现有情况1.MySQL源码debug团队2.中间层(比如taobao的tddl),尽量降低分布式MySQL下的开发成本3.MySQL异常快速容灾切换,尽量做到对开发完全透明4.Os(linux)问题定位非常熟练5.MySQLonlineddl解决方案6.团队的支持,易用性稳定性努力(tddl团队,核心研发MySQL团队等)7.工具化,能工具的尽量不

1 / 39
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功