江枫先给咱们介绍一下本身,和你在此次淘宝“双十一”事件中所扮演的角色? 前端
你们好,我是淘宝技术保障部的江枫。目前主要负责数据库的稳定性这一块。双十一这一天,我主要是负责协调整个数据库团队和保障整个数据库在“双十一”过程当中的稳定性不受任何影响。数据库
那给咱们详细的谈一下淘宝网如今整个数据库总体的一个架构,包括它硬件的组成。 缓存
淘宝的数据库发展到今天,已是一个很是复杂的系统。我大概算了一下,淘宝目前全部的数据库服务器加起来可能已经超过800台。那在这么一个规模底下,淘宝的数据库团队这么多年也是随着淘宝的业务发展一块儿成长起来的,但淘宝数据库目前核心的数据库还在小型机和高端的存储上面,还有不少的数据库如今是用的是MySQL,咱们逐步在从Oracle到MySQL这个方向在转移,因此咱们MySQL PC server硬件也是很是多的了。服务器
咱们也了解到,如今淘宝的整个的数据库团队在逐渐的把一些数据库从Oracle迁移到MySQL,而后呢,把一些服务器由小型机转到PC server,那大家整个转变的动机是什么? 架构
主要是由于业务压力给了咱们最大的动力。07年我来到淘宝的时候,当时只有三个主要的数据库,所有在小型机和存储上面。以当时的压力来看,它跑起来是很是顺利的,并且你们也知道小型机它从Unix操做系统到硬件,稳定性都会比PC server其实要高不少,当时的状况下淘宝用小型机是一个很是天然的选择。
从07年开始淘宝的业务量保持每一年天然翻一番的增加,数据库质量感受到很是大的压力。那么前端业务量增加一倍,在数据库上有可能增加是好几倍,它有一个放大效应在里边。当时咱们第一步可以想到很天然的架构,就是把三个数据库拆成更多的数据库,或每个数据库支持一个比较单一的业务。好比用户、商品和交易,都会分红独立的数据库,而后放到独立的小型计算中去,这是咱们08年作的很大的事情就是垂直拆分,而后08年的业务咱们就顶住了。
当时咱们就预估09年、10年会有更大的压力增加,这个时候咱们应该怎么办?当时咱们从业界能看到不少的经验分享,包括eBay、亚马逊这些国外的大公司,他们的经验分享里面,水平拆分是咱们数据库涨到必定程度后的架构选择。咱们从Oracle到MySQL转移,主要是用水平拆分,这是咱们将来的一个弱点,那水平拆分后机器、数据库的数量都会多不少,那Oracle它自己的成本也是咱们考虑的一个重要因素,因此当时从成本考虑的话,那个时候咱们天然会选择用MySQL数据库。并发
给咱们再简单总结一下这几年,淘宝整个数据库的演变过程? 高并发
刚才说到08年咱们作完垂直拆分之后,09年到今年咱们主要作的工做其实就是水平拆分。今年在十月份以前咱们所有完成了淘宝最核心的三个系统:交易数据库、商品数据库和用户数据库的水平拆分。因此到“双十一”以前,在咱们内部采访中,我一直跟采访人员说,当时数据库情绪稳定。基本上咱们没有作什么事情,只是在不停的看报表,看数据,而后很开心的看到交易曲线以超过45度的趋势往上涨。性能
那前期仍是作了很是完善的准备。据咱们了解在整个从小型机到PC server的迁移,包括从Oracle到MySQL数据库的迁移,大家在作这个事情的时候,都作过好几个月的压力测试。你讲讲这个背景和故事。 测试
是这样的,今年咱们年初决定,咱们商品库从小型机迁到PC server上面去,这是淘宝压力最大的一个数据库,当时是用四台小型机加两个高端存储来支撑的。要把这么大一个数据库进行迁移,咱们内心面也是没有底的,由于不知道要多少台PC server可以支撑,须要什么样的配置来支撑这个压力?当时咱们可以想到一个很直观的想法就是模拟线上彻底同样的压力,甚至加上几倍的压力来测它的极限值。
咱们和开发团队、咱们的性能测试团队,加上DBA团队和ops团队,成立了一个很是大的项目组,而后作了接近两个月的性能测试,在整个测试过程当中发现了很是多的问题,包括咱们给Oracle、MySQL等厂商都提交了不少Bug,有些Bug也获得厂商回应,进行修复。大数据
那总体的转变的过程到如今进行到了什么样的程度?包括你在整个转变的过程当中遇到哪些问题?
咱们如今最核心的用户数据库今年已经完全完成了从小型机、存储和Oracle切入到PC server加MySQL的架构。
咱们内部有一个提法叫作去O、去I、去E,其实就是咱们要从高端硬件Scale up模式到低端硬件的Scal out水平扩展的模式,这是淘宝内部最大最核心的系统,今年已经顺利完成了所有区的水平扩展。其余几个系统,好比说交易和商品已经完成了一部分,完成了水平拆分的一部分,可是没有达到咱们但愿的进度,这多是明年咱们须要作的事情。
在转型过程当中主要遇到哪些问题?
让咱们以为比较大的问题就是咱们从可靠的小型机迁移到大规模,大数据量的PC server上来,从架构上就对咱们就是一个很是大的挑战。你们都知道,每个PC server的稳定性确定和单台小型机会有必定的差距,再加上咱们一个机群有多是32台或者64台PC server。每一台PC server即便有四个9的可用性,但若是咱们整个系统合在一块儿,可能它最后的两个9的可用性都达不到。这就须要咱们从软件层、架构层要作很是多的改进,可以要让单点的一些失效对总体的系统不形成任何影响,由于咱们和架构部门、开发部门一块儿作了不少事情,才能保证咱们的集群稳定上线。
其实“双十一”这个时间应该说是对过去的技术转变的检验,如今回头来看,这个检验的结果怎么样?
当时是有点提心吊胆的,以后又以为相对来讲今年咱们作的不少事情仍是很是成功的。可是如今再回头仔细想一想仍是有点后怕,“双十一”那天的凌晨零点不是有一次Ipad的秒杀吗,当天晚上咱们都在线上观察数据,在零点的一瞬间,就看到全部数据库指标已经达到了之前正常时候最高峰的指标,有些甚至还超过了。
当天晚上睡觉的时候内心就有点在打鼓:才零点就这个样子了,明天下午明天晚上最高峰的时候咱们应该怎么渡过?因此次日早上八点多的时候咱们一进到指挥部里面就看到全部的指标, 包括CDN的指标、各个业务线的指标、数据库的指标都是噌噌的往上涨,这时内心面实际上是很忐忑不安的。
可是咱们比较放心的是这三大核心系统,商品、用户和交易,在咱们今年全部的水平扩展项目作完了之后,好比说商品功能作完了之后,从咱们的机械压测里面它是有十倍的流量的,因此当天百分之一百,百分之两百的流量基本上对数据库没有形成太大的影响,因此当时仍是很开心的看到这个指标快速的往上涨,但愿交易可以经过10个亿、20个亿,我以为都是可以承受的。
那对于整个数据库架构的演进下一步有什么打算?
下一步其实就是刚刚说的咱们有几个核心系统尚未彻底的作到这个水平扩展,加上“双十一”那天咱们仍是有一个小惊险:咱们有一个数据库,跟交易核心有一点点联系的,但它仍是放在小型机上面,当时已经提早为它准备了百分之一百的余量,就是说它能够承担平时最高压力的两倍。
可是那天已经达到平时最高压力的1.8倍左右的时候,把咱们吓出了一身冷汗。若是当时淘宝的交易最高峰的流量再增加20%的话,有可能数据库就会到瓶颈了。因此咱们明年是要把更多这种Scale up可以看到天花板的数据库所有要拆分红水平库存这种数据库。
那你刚才所提到的去Oracle,去小型机,去高端存储,这个“三去”的总体思路给淘宝网带来了哪些经济上的效应?
当时咱们知道小型机和存储的价格是很是昂贵的,仍是拿咱们刚才说压力最大的商品数据库举个例子,当初咱们数据库是用了四台高端的小型机,两套高端的存储,成本加起来起码都是三千万以上。那目前咱们用的是32台PC server来搭建的一个机群,价格也就是300万~500万的级别。相对来讲咱们作完这个事情之后,解决了两三千万的硬件成本。
这样来说,总体的经济效益仍是很是不错的。可是其实刚才咱们在前期沟通的时候也提到,你要从Oracle转到MySQL,包括从小型机转到PC server,其实里面仍是会遇到蛮多问题的,包括它的不稳定性等等,那对于这一方面你有没有什么经验可谈?
在这一方面,我以为有两个很重要的因素。第一个是咱们须要和咱们的开发前端应用架构部门可以紧密的合做,可以让咱们的应用融入刚才说的整个机群的单点失效和容灾的问题。都须要咱们和架构部门一块儿来考虑的;第二个比较大的经验就是目前咱们在作的,深刻研究MySQL的源代码。咱们从研究和压力测试的过程当中,发现MySQL它自己代码的一些缺陷,可能在高并发大压力下会有不少隐藏的Bug。
在咱们最近的此次测试当中,咱们还发现了Facebook发布的FlashCache二级缓存的软件,当时咱们是测出它一个很是大的Bug:并发压力很是大的状况下,它会致使MySQL成为一个僵尸进程。咱们发现了之后,很快反馈给Face book,而后Face book很快就修复了这个问题,这也是咱们对使用开源软件带来更大的一个信心,就是开源可以在全球获得更多的支持,你们都可以从原代码层面来解决更深层次的一个问题。
我想这也多是淘宝技术团队如今那么开放,那么注重开源的动力之一。那若是说想对MySQL的一些核心代码作编译,就须要对人才的储备,包括各方面资源整合的要求仍是蛮大的,那你在这方面有没有什么感触?
说到人才这个话题,08年的时候,淘宝当时准备大规模的往MySQL方向上转,咱们内部也是有一些置疑的声音。他们说淘宝DDA团队之前都是在Oracle方面比较专精,在业界来讲,淘宝的DDA团队在Oracle方面更加有名气一些。因此咱们内部有置疑的声音。就是说大家有MySQL专家吗,MySQL出问题了之后能很快的解决吗?因此从08年到如今,咱们慢慢的一路走过来,内部培养了不少的MySQL的人才,包括这几年咱们的应届生的成长,再加上咱们从外部招到一些专家,咱们对MySQL的理解已经愈来愈深。
刚才说到,咱们已经可以给MySQL打Patch,已经可以给MySQL report这些Bug。到如今为止,我以为MySQL的成长已经达到了很是高的一个程度,咱们对MySQL已经愈来愈有信心,可是将来淘宝的MySQL确定是要作得愈来愈大的,淘宝还有不少小型机上面扩展不太容易的系统须要迁移到可扩展的机群上面来,但咱们也但愿业界可以有更多的MySQL伙伴加入咱们,和咱们一块儿来作这么一件很是有意义的事情。
我想可以加入到淘宝的技术团队,去经历那么多有大交易量的技术实践仍是很是宝贵的。另一个问题就是虽说如今咱们用的愈来愈多的是MySQL,可是如今你们也知道MySQL已经被Oracle收购了,那对像淘宝这样的团队有什么影响呢?
你们都知道MySQL实际上是基于GPL的协议来开源的软件,那淘宝在使用过程当中,前期是已经考虑到一些风险。因此咱们全部的MySQL都是本身来作编译作优化的,并且我想MySQL被Oracle收购了之后,如今看起来Oracle应该是给MySQL在开发这方面是提供了更大的帮助,像以前在Sun的时候,MySQL的版本相对来讲是比较混乱的,包括咱们如今在用的5.0和5.1的正式版本,最近还有包括开发方面就还有两个,一个6.0,一个5.4,这些特性会互相交织在一块儿,让咱们选择的时候也有点不知道到底选哪一个版本会更好一点。但如今Oracle收购MySQL之后,他把5.4跟6.0这些版本已经合成了一个比较规范的5.5的版本,而且为它制订了很好的一个milestone15:31,将来要怎么发展这个里程碑,M一、M二、M三、M4这种发展方向,而到如今为止这个5.5已经发展到5.六、5.7的版本,并且已是IC版本了,很快就要GA了,那我想这对于MySQL来讲应该是一个好消息。咱们能够用到更多更稳定的新特性, 5.5版本里有几个新的特性是咱们很是关注的,好比Google已经达到英文15:57这个pach,因此咱们以为对咱们将来的这个MySQL这个系统很是有用的一个功能。那咱们也等着Oracle的5.5这个版本可以尽快的GA出来。