沈洵:阿里数据库架构变迁及关键点抉择

我是08年加入阿里的,有幸经历了阿里业务成长最快的那段时间,也留下了很多宝贵的记忆。今天在这里给大家讲讲我们几年前经历的那些有意思的故事。

首先来讲讲去IOE。对于阿里巴巴去IOE的过程,大家可能觉得就是老板们振臂一呼,大家齐头并进就把这事儿给做了。其实,很多事情你不在实际环境中,是不会明白我们当时的想法和感受的,也就无法完全理解我们的架构。

今天就让我带大家回到当时的场景吧。

系统的第一次选择-Oracle

 

时间大概是06年左右,淘宝的业务虽然还不算很大,但是增长非常迅速,我们刚刚在国内取得竞争上的领先地位。业务对于技术的要求是,需求能够快速满足,能够撑得住就行— 看看要求有多低。

然而,就这个需求都很难被满足,开始我们选择了开源的LAMP架构,然而随着系统的压力越来越大,我们现有的系统架构已经不足以满足业务的实际需要了,这时候我们的系统就面对了第一次选择。

那么,当时为什么会选择Oracle呢? 我归纳起来主要原因是这么几个:

1)这是当年业内最好的选择

当年的企业级应用里面最为成熟的架构就是 Java 配合Oracle的企业级架构,有商业支持,系统应用广泛。在当时看起来,应用系统按需的进行scale up也确实是能够解决我们当时的系统问题。

2) ebay当时在使用这套架构

这是个非常重要的理由。我们有可以借鉴的国外先进经验。在公司的发展历程里面,业务的正常发展是第一位的事情,这个如果出现问题那么之前我们付出的一切努力就白费了。就像是双11这样的应用场景,如果真的因为系统架构问题导致我们的一些活动没能取得很好的结果,那么很可能就会丧失掉最关键的发展机遇。

当年的我们,还购买了SUN公司的技术支持,来为我们的技术发展保驾护航,我们选择了EJB来构造我们的企业金融级业务系统。

这样的系统架构经过了两年的发展后,大家突然发现似乎一个新的风潮出来了,当时有一本书叫《J2EE without EJB》。我们意识到对于那些复杂的概念,复杂的实现方式,原来困惑的不止我们一家啊。

于是我们在应用层做了一个重构,把EJB和相关的J2EE Server干掉了。 使用了一些开源的web server,基于spring来实现了我们的业务逻辑,下面还是用的Orale。当时,因为业务的增长实在太快,Oracle永远都是在最高处理容量上高位运行,出的奇葩问题也非常多,于是我们的DBA就被这种严酷的环境训练成了业内的精英,每个都是trouble shooting的高手。

走上自主研发之路

 

然而,我们最终发现,这种系统的运行模式是有瓶颈的,系统的主要问题就在某商业数据库上。我印象比较深的问题是这么几个:

1) O作为商业产品,本身也有性能的上限,无法实现水平扩展。可能有些人会有些疑问:哎?不是可以scale up来扩展么? 确实如此,但如果一个硬件系统预计3年过保,然而业务的发展可能会让我们在第二年就必须考虑购买新的高端机型来升级的问题了。

2) 黑盒子。如果大家写过代码就会能体会到,对于没碰到过的场景,无论再怎么努力,也是无法预测可能出现的问题的。而当时我们还真就碰到了很多奇葩的问题,比如链接hung住,系统在某些极端情况下丢一个异常。然而查遍手册,却发现对于这个异常,某商业数据库给的提示是,理论上不会抛出。如果你看到了就联系售后支持 XD。

3)效率低,发现一个问题,翻译成英文发给对方,1个月以后才能收到回复。我们尝试,然后再发过去咨询。这种方式的效率实在是太低了。

我们真的是碰到了商业系统的边界了。然而我们真的是想使用商业产品的,毕竟商业产品比较有保障。我们环顾四周,发现已经合适的商品能够解决我们的问题了。

业务不等人,我们必须做出选择(后来我们管这种事儿叫高速公路换轮子)。当时我们希望能够在一些非重要的业务应用上,使用一些我们自己研发的系统,从而实现更符合我们业务要求的产品。

于是,我们选择了一个测试性应用,应用来上线我们的DRDS(TDDL)+MySQL产品。这个应用的的技术特性是,数据量非常大,系统可以接受偶发的离线,比较适合作为数据存储类产品的启动项目。

整个上线的过程还是挺顺利的。大家当时对DRDS这个产品的最大担心是,系统分了很多库和表,因此运维管理上会不会变得很复杂?我们实践下来发现,其实在良好的运维系统的辅助下, 分布式系统的运维能力跟单机系统其实差不了太多,更多的还是要不断实践。

一些旁路系统逐渐开始使用这套新架构。当时,DRDS还是个挺土的东西。现在可能有人研究过cobar和他的衍生产品,其实那就是DRDS5年前的样子。不支持跨机Join,分布式查询合并不支持,高可用切换不支持,bug比较多等等,都是当年成长路径中留下来的阵痛啊。

在做了一大批旁路系统以后,DBA的同学们和开发的同学们都越来越有信心了。于是就开始要做核心的系统了。可能有些人又会问了,做点周边不就行了,为什么要做核心啊?多危险。没错。但当时我们面对的抉择是,不做,肯定挂,做了,可能会挂。

我们并没有很激进的直接全部切换。某商业数据库并不贵,小型机才是成本的元凶,如果我们能把小型机去掉不也就可以节省成本了么。我们采用了一种稳定的的方案,用某商业数据库+小型机做主机,承担写入,而我们认为可能会挂掉的某商业数据库+PC Server 做备机,承担读取。这样,我们就既利用了某商业数据库+小型机的好处,又规避了可能风险。

于是,这个方案就开始在商品上面进行了实践了。最终却导致了一个比较严重的失败。而这次失败却成为了改变历史的起因。

改变历史的时刻

 

当我们用了半年的时间终于把这套架构做出来时,我们发现,当年的某商业数据库在AIX上面跑的很欢快,但在Linux pc机上竟然会出现系统hung住的情况,整个操作系统无响应。我们必须去给机房打电话关电源才能解决这个问题。于是我们项目组的同学们,排了个班,每个人一晚上,只要发现系统有问题,就给机房打电话让他们关电源。我们给商业支持服务发邮件,打电话,希望他们能够支持我们一下,然而我们却真的无法得到任何解决的建议,因为他们也没经历过这种情况。

这套系统就没有上线成功。我们进入了下一个周期,在半年内,必须把系统架构用DRDS+MySQL做出来,否则应用就会有危险!

这套系统在老板们的支持下,花费了几个月的时间终于做出来了。当时我们发现了一种很强大的东西叫PCI-E卡+SSD,性能很高,只比内存慢十倍,可惜就是成本太高,存TB级的数据实在是不是上算。于是我们又给某商业数据库发函,询问他们能不能帮忙支持一下,让这个PCI-E卡+SSD能做二级缓存,但是没有收到答复。

我们开始在市面上寻找能支持这个需求的商品。 我们发现FB开源了一个基于MySQL的flashcache卡的插件。拿过来做仔细研究,发现是可以支持的。赶紧测试一下,效果非常好,只用做简单修改。

于是我们决定用这套模型。上线后,系统非常平稳。后面有件印象最深的一件事,我看一个业务上线没有经过DBA的SQL审核,我很善意的提醒DBA说,这个还没审核呢,上线有风险吧? DBA回答,非重要应用,现在系统容量buffer很足,先上线,不行后面再优化就好。 我立刻就明白了我们做这件事的价值。

因为这件事,我们也突然发现这种方式确实比原有的方案要好,系统的延迟低,性能好(MySQL其实在简单查询的时候性能会超越当时的Oracle),可控性好,需求响应快 。往后的道路就是,上一个系统,上一个系统,上一个系统.....而这件事,也就成为了转动历史的时刻。

这就是我想讲述的去IOE的故事。

运维现状

 

那么,阿里的现状是什么样子的呢?

我们的服务面向公司内的时候,一直都是采用DevOps的,开发和运维在一起。这样的最大好处是,我们可以对产品有持续改善。

答疑,部署,bug fix ,运维工具,都是我们开发的。这样效率非常高,可以在最佳的位置进行最合适的优化。

但是,我们发现,当这套系统向外输出的时,这种的模式便不能满足需求。因为外部企业内的环境复杂,运维和答疑和在阿里企业内部的实现难度不在一个数量级。所以我们目前在尝试实现运维能力产品化。希望我们将来能够与我们外部的运维合作伙伴一起,解决外部客户的实际问题。

Q & A  
 

Q1:现在阿里在mysql方面发展到何程度了?

A1:MySQL上有不少自己的patch,也都提交到webscalesql里面了。目前所有积累都在DRDS+RDS上做产品化输出。mysql方面主要是一些高并发场景的优化。

Q2:去ioe用mysql据说多是因为成本和扩展性双重因素,成本是最先出现的考虑的因素吗?

A2:成本并不是主要考虑方向。小型机是比较贵的,oracle其实还好。但更多的时候是因为发现mysql跟Oracle一样能满足需求,而很多核心技术都积累在DRDS。

Q3:一般到什么样的数量级可以考虑去?

A3:能不做就不做。业务容量、性能、扩展性预计在1年以后会出现问题的时候再采取这种策略。

Q4:我看过你的演讲,你说传统行业(银行)已经开始接触阿里云,你对传统行业的运维和系统架构师有什么好的建议,如何转型?

A4:我觉得可以先利用一些实际的项目来感受一下新的编程方式和方法。其实它跟传统的构造模式差异并不大。主要还是对之前这10多年经验的总结而已。开发的方式一定是以简单为主的,不会弄的很复杂。因为互联网的架构模式基本上都是实践出来的,没有太多的顶层设计因素,所以不会像IBM那样厚重。

Q5:阿里开发和运维在一起,所以开发和运维的分工可能不会太难定义。有的公司开发和运维在两个部门,就容易出现问题。比如数据库是运维部门管,开发的sql在数据库里跑的慢了,是由于索引不佳等原因。阿里是怎么对这种情况进行责任分工的?

A5:目前来看 DBA的工作是单独分出来的水平团队,他会给所有的业务团队以支持。他们也会写一些自己用的运维系统,来支持他们的工作,比如自动sql审计,监控,日常运维等。

Q6:在分库分表后有没有出现某些节点数据增长比较快,是如何解决的?

A6:DRDS是可以支持动态扩容的。

Q7:以后的dba得怎么发展,面对自动化运维的到来?

A7:1)学点开发技能不是坏事。2)就我们的实践来看,数据库这套系统还是需要数据业务架构师的。索引调优和数据表设计什么的,还是比较专业的一件事。

Q8:请问dba需要学哪些开发技能?

A8:越多越好,其实如果写过数据库,数据库优化的很多原理就很容易精通了。

Q9:mysql在做分库分表的时候是用中间件还是业务逻辑分比较好。cobar有新版本么。

A9:结合比较好,cobar 大家可以继续依托来做二次开发 。

Q10:阿里内部团队分享是什么样一个机制,写文章吗,是强迫的么?

A10:老板会在一些时候号召大家做分享,但大部分时候不是强迫的,你也能看到很多博客做了一段时间就荒废了。 就是因为大家其实挺忙的。

Q11:在互联网公司里,团队的组织和成长方式如何?

A11:互联网公司内,团队也分水平团队和垂直团队(基于服务化架构做某一块服务)。水平团队(水平支撑),类似系统运维,dba,过程改进等等,都是水平团队支持全部的垂直业务。垂直团队,则其实什么都可以做,包括系统发布等等,权利都是下放到联排级的。水平团队因为人数的限制,也会逐渐开始将人工的服务都变成系统,提供给垂直团队。 所以,其实理论上来说,业务系统应该都是以系统通信得方式做接驳的,当然,实际的情况是里面还是有不少人工痕迹的。

Q12:阿里云mysql的架构核心还是主从么。主从切换有没有遇到binlog需要人肉的问题。怎么解决的?

A12:还是主从 。不用人肉,这些都是系统自动解决的。

Q13:为什么不采用jboss呢?

A13:jboss是j2ee的Ejb容器,当不用ejb的时候,再用jboss意义就不大了。我们最后一个使用的jboss组件是jboss的datasource,其实这东西挺稳定的,不过就是依赖太多了。

Q14:如果主写的过程中crash了,这部分binlog日志落盘后没到从。从切换成主了,开始写入。这部分binlog你们日志怎么处理的?

A14: 这个目前是回补策略。也有强一致的方案。

讲师介绍:沈洵

  • 2016全球敏捷运维峰会演讲嘉宾。
  • 阿里巴巴中间件技术部资深专家。
  • 08年加入阿里,参与过阿里巴巴的分布式数据库TDDL的以及分布式消息系统项目。
  • 目前主要在负责阿里的云产品的技术与服务,包括分布式数据库DRDS, 分布式消息系统MQ,以及企业级应用服务框架EDAS。


时间: 2024-07-31 01:58:49

沈洵:阿里数据库架构变迁及关键点抉择的相关文章

映客直播技术实战:直播平台的数据库架构演变

摘要:8月24日,阿里云数据库技术峰会到来,本次技术峰会邀请到了阿里集团和阿里云数据库老司机们,为大家分享了一线数据库实践经验和技术干货.在本次峰会上,特邀嘉宾映客直播架构师王振涛分享了映客直播作为创业公司从0至日活千万的数据库架构变迁,数据库在直播中的经典应用场景,数据库存储的优化思路,以及如何构建一个高可用数据库架构. 以下内容根据演讲嘉宾现场视频以及PPT整理而成. 本次分享的内容将主要围绕以下四个部分: 一.映客直播发展历程 二.直播遇上云数据库 三.风口上的数据库架构变迁 四.直播典型

阿里沈询:阿里技术架构演变,及基于EDAS的敏捷服务开发与架构实践

8月30-31日20:00-21:30,一场别开生面的技术大会-- "蚂蚁金服&阿里云在线金融技术峰会"将在线举办.本次将聚焦数据库.应用架构.移动开发.机器学习等热门领域,帮助金融业技术开发者深入解析互联网应用的前沿应用与技术实践. 蚂蚁金服&阿里云在线金融技术峰会专题:https://yq.aliyun.com/activity/109 峰会统一报名链接:http://yq.aliyun.com/webinar/join/38 来自阿里巴巴的资深专家王晶昱(花名:沈

是如何做到系统无缝迁移的? 褚霸详解阿里云数据库架构演进和实践

摘要:阿里云数据库从最初的只支持MySQL,到现在支持关系数据库.NoSQL.HTAP.EMR产品体系,在管控系统和数据链路上做了好几次重大架构迭代,云产品很长的生命周期里面会遇到新老架构共存,如何做到架构连续和系统无缝迁移是个很大的挑战, 本文将为你分享云数据库架构演进和实践. 以下内容均根据演讲PPT整理而成. 在2016年ArchSummit全球架构师北京峰会上,阿里云研究员余锋,做了题为<云数据库架构演进和实践>的精彩演讲. 个人简介:余锋(花名:褚霸),阿里云研究员,有超过18年的网

数据库技术架构变迁与应用

数据库技术架构变迁与应用 智联招聘 孙伟 智联数据库架构的变迁 大数据在智联的应用 行业趋势分析 数据库技术架构变迁与应用

买单侠数据库架构之路

摘要:在2017杭州云栖大会阿里云HTAP技术专场上,上海秦苍信息科技有限公司DBA负责人赵怀刚为大家分享了HTPA型数据库产品在现实中的落地应用以及企业级数据库架构设计中的HTPA的应用. 本文内容根据嘉宾演讲视频以及PPT整理而成. 本次分享的主题是买单侠数据库架构之路.秦苍科技是一家互联网消费金融公司,我们所有的产品基本都是托管在阿里云上的,在自己的系统中大概应用了20多种阿里云数据库产品.基于阿里云平台,秦苍科技的数据库架构与传统RDS数据运维相比存在着本质的区别.接下来着重介绍一下在产

云栖大会分享:买单侠的数据库架构之路

互联网金融行业快速发展的浪潮中,面对海量增长的数据,买单侠走出了自己的数据库架构之路. 本文是买单侠DBA负责人赵怀刚在杭州云栖大会上的分享,介绍了数据库运维中遇到的问题.基于阿里云平台数据库架构的演变和案例和云数据库运维的思考.图1 赵怀刚在分享 秦苍科技是一家专注于为年轻人提供消费分期服务互联网消费金融公司,目前有"买单侠"和"星计划"系列产品,"买单侠"面向中国年轻蓝领用户,提供移动端消费分期服务."星计划"为年轻女性用

什么样的云数据库架构选型才能做到安全,稳定又可靠?

摘要:从传统IT部署到云,人肉运维已经是过去式,云上运维该怎么开展?人工智能对于运维"威胁论"也随之袭来,如何去做更智能的活,当下很多运维人在不断思考和探寻答案.在2017运维/DevOps在线技术峰会上,阿里云数据库技术专家喜乐就为大家分享了对于云数据库的选型的考量和云数据库的使用经验以及对于云数据库未来的展望,精彩不容错过. 以下内容根据演讲视频以及PPT整理而成. 演讲者简介: 喜乐,阿里云数据库技术专家,2010年加入阿里巴巴,最近四年时间一直在数据库技术组,专注于云数据库的业

听豆瓣架构变迁分享会总结

要点如下: 目前23台pc server 每天pv数2k万左右.注册用户数300万.表的数据,大部分是行数量是千万的. 5个人算法团队.另外开发人员总共11个,包括全职和兼职(以前看百姓网分享其技术也只有10名) 06年的时候每天120万左右动态请求.这个时候主要瓶颈在磁盘i/0上面,拿到风投,有钱购买硬件设备.购买两台iu服务器(双核,4g内存)一台作为应用服务器,一台作为数据库服务器,迁移到双线ip机房,使用dns解析不同网段ip(自己去找哪些网段是电信的哪些网段是网通,然后自己进行解析).

阿里互联网架构的6大最佳实践

2016云栖大会上海峰会于2016.1.20日在上海科技馆顺利举办.本文根据阿里中间件首席架构钟华(花名:古谦)在"云栖大会上海峰会"专场<"互联网+"架构及实践专场-企业级信息系统云化演进之路>中的演讲整理.钟华在演讲中主要为大家介绍了阿里技术架构发展概况,以及在阿里在构建互联网级系统架构的6大最佳实践. 古谦首先带领大家回顾了阿里技术架构前期发展状况.在2016年,淘宝的技术架构现状是一个拥有300多个功能的系统,由500多人的技术团队负责维护,该系