【稳定性day1】从DBA到运维架构总监之路 - 专注的力量

本文来自宝宝树运维总监刘秋岐的分享。随着MySQL的不断成熟,逐渐被用于更多大规模的网站和应用了,比如说当前最火的Facebook、淘宝、阿里、兰亭集势、宝宝树这样的大型的网站都在使用MySQL数据库,足见MySQL在稳定可靠性方面,并不会比我们的商业厂商的产品有太多的逊色。本期访谈我们邀请到了宝宝树(全球第一的母婴社区)网站架构运维总监刘秋岐,他对Mysql在互联网多种业务场景下的设计和优化有着丰富经验,只用了短短五年的时间,就从DBA成功转型成了架构运维总监,让我们一起来看看他的成长之路。

访谈(Q1):刘总,您好!短短的五年时间内,您从一名搜狗的DBA转型成了宝宝树的架构运维总监,可能在很多人眼里,尤其是对于毕业生而言,DBA和架构师是他们努力奋斗的梦想所在。能否简单介绍下自己?谈谈毕业这些年来您在工作中的收获和体验。

acmore(A1):首先,我想说的是,不管是在学校学习还是毕业后工作,大家要关注两点,就是——成长和目标,男人要不怕苦和累,时时刻刻关注自己是否有“成长”,这很重要。

先谈一下“目标”


我总觉得我是一名幸运儿,在大学大二的时候,大家都在按部就班,上课做作业的时候,有一位我生命中的贵人告诉我,我要有自己一个毕业的时候的目标。那时候 07年,刚来北京上大学,坐355公交路过搜狐网络大厦的时候,就想毕业要是能去搜狐上班多好,因为听学长说,那里毕业生起薪就是8K。随后我告诉我的那位贵人,我说我要进搜狐,搞IT。

我的这位master给我了几个方向:网站开发、数据库、安全,他让我选。由于大 一在学校搞ACM编程搞的头晕晕的,决定不深入搞开发coding,而当时看数据库的书,觉得数据库很有意思,逻辑层和物理层的东东,整个数据库的逻辑层牵一发动全身,很有意思,就立志要当一位DBA,当时刚好有个大牛DBA叫“牛新庄”,我想我要向他学习。

随后大二就开始各种看数据库书籍,大二下学期又去报了个Oracle培训班考OCP,大三实习(埃森哲、朗讯),大四找工作,一口气拿下百度、搜狗等等的DBA offer。还记得当初的梦想么,于是就去了搜狗,去了搜狐网络大厦,刚好也离母校近,大四搜狗的岁月很快乐。

看着都挺顺利,其实不然。大二大家都在玩的时候,我每周末都要去Oracle培训,每次培训完都要做一遍实验,有时候晚上熄灯了,就到楼道去用笔记本电脑做,没通过就不睡觉。大三埃森哲实习的时候,实习是做埃森哲的Oracle BI的项目,做项目的地点在丰台区,每天早上5点起床,我的室友还在美梦,我要悄悄溜起来,横跨海淀、西城、丰台三个区,晚上下班也较晚,埃森哲项目的辛 苦程度大家应该是知道的。大三为了解决上课和实习的冲突,去求老师,给老师讲我自己的想法,我的初衷,还好我的老师们很理解我,给我开“后门”。

依然记得大四上学期9月底,那天北京天气很好,去签了搜狗的offer,一块儿去签的基本都是清华硕士,回学校路上我给我妈妈电话报了个喜,电话里我回头一想,三年前的目标终于实现了,那时候那个开心得跟初恋的心情一样的,哈哈哈。

再谈“成长”


首先,感谢搜狗,感谢第一份工作。当时我入职搜狗搞数据库当DBA,刚好有个DBA叫尹博学离职去了百度(现在是百度DBA架构师),我接了他的位子,承担起搜狗所有数据库的运维和架构设计。正值搜狗快速成长,我经历了数据库集群从8台成长到300多台一个过程,在这个过程中我扛起了整个DBA Team的KPI,比较痛苦,因为开始的数据库架构就主从,没有更多,连keepalived都没有弄,生怕宕机,生怕由于数据库问题导致页面打不开,影响整个Team的KPI,于是周末去哪里都把笔记本电脑背身上。后来不断改进,去做高可用、分库分表、建立DB Server Buffer Pool,再到后来搞DBProxy。

有一天,运维部高级总监告诉我,要时刻关注“成长”。我觉得他说得很对,“成 长”很痛苦。上学跟工作是完全不一样的,实习时候的心态和责任跟上班更是很不一样的。DBA是个综合素质要求比较高的职位,首先Mysql很简单,很多东 西都需要DBA自己去补充。其次DBA要做的一些事情需要开发配合,那你推动一个改进和上线让开发去实施,开发为什么相信你的方案是靠谱的,开发为你多做 了些事儿对人家又能有哪些好处,所以整个工作过程很锻炼人,一年过去,我思考我的成长——技术进步很多,又一年过去,回头再看,心态已经跟毕业时候远远不同了——懂得了聆听,懂得了巧妙的推动,懂得了技术怎么结合实践,懂得了如何斡旋,怎样做好优化,既能节省时间金钱,又能省运维成本。

有时候我想,搜狗DBA阶段,我完全可以只做好数据库管理员就好,没必要去立项搞数据库的白盒监控、细粒度指标(结合阈值),也完全可以不去搞slowlog挖掘平台什么的,但是我却一直主动去想,怎么才能提高数据库的高可用性,让response time变得更短。提到“成长”,如果今天做的只是重复昨天的,何谈“成长”。后来去了兰亭搞电商也是为了更多的成长,毕竟电商对数据库技术要求更高更锻炼人,再后来去了宝宝树搞架构设计,也是为了更快更好的成长。

最后,回到开头,我们要有“目标”,我们要时刻关注“成长”。

访谈(Q2):作为最流行的开源数据库软件之一,MySQL数据库软件广为人知了,被甲骨文收购二度易主后,MySQL命运能否被改写?到底是拥抱IOE还是力挺"去IOE"呢?

acmore(A2):MySQL被Oracle收购后,我个人觉得MySQL变得越来越好了。且Oracle也一直秉承着MySQL的开源思想,未有任何MySQL商业化趋势,我觉得还是很赞的。MySQL5.5之后性能大有提升,对事务性支持更好,总体上Oracle是推进了MySQL的发展。

关于去IOE的问题,我觉得还是要具体问题具体对待,不能“一锤子买卖”。在互联网行业,非电商类应用,事务性要求不是非常严格的完全可以使用Mysql,既给老板省了钱,Mysql对大数据量的扩展又比Oracle轻量化,使用Mysql何乐而不为。但是金融系统,比如银行的存取款交易,Mysql虽然支持事务,但是在事务的日志记录以及回滚、审计方面都没有Oracle更加完善,在主从复制方面更是没有Oracle的三种安全的复制模式可供选择,所以某些系统上,使用Mysql远不如Oracle让人放心,所以还必须使用Oracle。最终,必须使用IOE的地方是让IOE更好的去“扬长”,而可以去IOE的地方是让IOE更好的去“避短”。

访谈(Q3):宝宝树作为互联网行业的领军母婴类电商网站,它的网站架构到底是怎样的?对于月均几百万的用户访问量,如何保障网站不宕机?作为宝宝树网站架构运维总监,您能否从数据库、服务器、中间件、负载均衡等角度为我们分享下宝宝树的网站架构。

acmore(A3):我们宝宝树的网站架构分模块的,有主站系统、广告系统、日志系统、邮件系统、分布式图片系统等。基本还是基于linux+apache/nginx+memcache/redis+php的实现,数据库有Mysql和Mariadb,有使用蓝汛和网宿的CDN。各个子系统的输入都是来自nginx的数据分发,输出都是将数据持久化到数据库里。

在保障网站不宕机方面,我们使每个功能模块都是高可用的。首先前端接入是硬件的互备的负载均衡设备,然后是互备的nginx做反向代理,再下来分登陆和非登录的访问,访问还是apache+nginx,也都是集群化,保证单台或者几台宕机都是对静态数据的访问高可用的,动态访问高可用是靠分布式的memcache缓存集群+Mysql高可用集群实现的,Mysql高可用使用了haproxy和lvs,读写分离(写使用keepalived,读使用lvs下挂mysqlserver),然后能异步减少网站load的都异步到消息队列里,消息队列也是高可用的,所有模块都是高可用的,这样网站就是高可用的,不怕宕机的。

访谈(Q4):每天有超过30万张家庭照片上传至宝宝树,累积存储达2.1亿张,这些云端照片记录了宝宝成长的每一个精彩瞬间,辣妈们还可以通过语音发帖写日记、如此海量的数据背后到底用到了哪些存储技术?

acmore(A4):首先我们确实用户的上传量很大很大,我们的数据库数据也很大。

数据持久化这里主要分两种,一种是int、char类型数据持久化到数据库集群,一种是图片类型数据持久化到分布式图片存储集群。

我们数据库分功能拆过库,有主站的论坛帖子库,有用户库,有宝宝树孕育app的数据库,有宝宝树时光app的数据库,分库根据业务耦合度来分,这样区分很清楚,减低了调用的逻辑复杂性。用户访问热门帖子可以直接从memcache中取到数据,不会给数据库集群施加压力,用户发帖是写到数据库的,为了提升数据库响应速度,我们数据库使用了大内存+ssd存储介质,使用了xfs文件系统(nobarriar),使用了raid卡和raid技术。

用户上传的图片是存储到我们分布式的图片存储中的,每台分布式图片server存储25T的图片数据,每个图片在分布式图片系统中会有3份的冗余,数据库中只记录用户图片在分布式图片系统中的路径。

访谈(Q5):在苹果iOS8上线当天,因为可以安装第三方输入法,备受期待的搜狗手机输入法仅用7小时就荣登苹果App Store中国区免费榜第一名,搜狗输入法可谓是人气扶摇直上。您曾经负责过搜狗输入法的数据库设计与运维,能否和我们分享下3亿多用户数据背后的数据库技术?

acmore(A5):搜狗输入法的数据库真的相当庞大,我们是做了分库分表的,存储到64台数据库上。这个数据库集群的关键在于分表那一环上,主要是用户表的分表,最后还是选择使用用户id去分表,对用户id做了MD5值,因为用户id是varchar,做完md5后也是一个varchar,这个varchar每位都是0—F的字母中任意一个,那么当时按照这个串的第一位就能分16张表,首字母为0的为一张表,首字母为A的为一张表,这样0—F能分16张表。后来随着业务增长,发现16张表搞不定了,于是按照第二位字母再分,这下一共分了16x16=256张表(00,01...10,11...F0,F1...),均放到了64台数据库里,这64台数据库32主,32从,保证了高可用。

访谈(Q6):随着双十一的到来,时下最火的淘宝、兰亭集序等电商网站成为了备受瞩目的焦点,为啥这些电商网站都选择采用MySQL数据库?

acmore(A6):电商网站的系统中很关键的一步是订单系统,一个下订单的操作一定是数据库的一个事物,这个事物里涉及到所买东西的减库存,订单完成回写到用户订单表等,这些都要遵循事物的ACID属性,所以必须使用支持事务的数据库,主流的支持事务的数据库就是Oracle、SQLServer、Mysql。这其中SQLServer多用于WindowsServer环境下,而互联网行业多放在Linux环境下,又加之Oracle是收费的,Mysql是免费的,所以电商网站大都采用Mysql数据库。

其实最早淘宝也是全用Oracle的,但是Oracle的license太贵了,于是淘宝把不那么“贵重”的库变成了Mysql去弄,因为Mysql也是关系型数据库,也支持事务,再到后来淘宝的DBA team越来越强大,他们可以给Mysql打patch,改源码,于是他们把商品库、仓储物流、订单都换成了Mysql,因为Mysql是开源的,免费的,所以Mysql数据库可以大大节省IT成本开销。

访谈(Q7):对很多屌丝而言,足不出户,逛逛电商网站就能轻松淘到自己想要的商品,只要输入商品名称,很快就能看到对应的商品列表,从查询到购买,整个订单过程很流畅,这些网站的后端是否用到了数据库集群?请结合您的项目经验为我们分享下您在数据库集群方面的设计经验。

acmore(A7):后端肯定使用了数据库集群。数据库集群设计的结果首先要做到高可用,其次做到高性能。高可用的数据库集群技术主要有Mysql主从复制,基于Mysql主从复制的访问ip的keepalived技术。mysql请求也是一个tcp请求,也可以使用基于tcp请求分发的haproxy或者lvs高可用技术。

高性能方面要做好对软件和硬件的优化,软件层面:

(1)、Mysql的参数调优,根据数据安全性要求合理设置

innodb_flush_log_at_trx_commit,设置innodb_write_io_threads提升写入性能,设置innodb_flush_method=O_DIRECT,设置innodb_old_blocks_time=1000等等

(2)、文件系统推荐使用xfs,挂载时候设置挂载属性noatime,nodiratime,nobarrier (nobarrier 是避免操作系统的cache)

(3)、关闭 numa=off

硬件层面:


(1)、数据库永远是大内存的好,电商128G内存最低,争取256G内存;

(2)、数据盘可以使用ssd,想要更快可以考虑PCIE-Flash,他们的对比我把图贴出来(见下图),可以数据放在SSD盘上,日志放在普通磁盘上:

访谈(Q8):从您本人的经历来讲,从搜狗、兰亭集势、到宝宝树,您在成长的过程中有哪些收获?这些互联网企业的文化有何不同?

acmore(A8):搜狗主要业务还是搜狗搜索(输入法带动浏览器往搜索导流量),兰亭主要是对外B2C电商,宝宝树主要是母婴论坛社区+移动app,搜狗是我人生第一家全职单位,在搜狗我收获了高级DBA的技术技能,也收获了较少的管理技能,搜狗的企业文化很好,有一种geek精神,技术氛围很好。兰亭主要做对外B2C电商,最早做婚纱和礼服的品类,后来做了miniinthebox站扩充了很多其他品类,在兰亭收获了电商的数据生产消费模型,收获了怎么依赖数据库去建设好电商的仓库/物流/订单/上新等系统,兰亭有一种航海文化,比较有挑战,电商对数据要求很严格,所以电商的数据要频繁的校对,就算数据库已经完全没问题了,对账程序还得每天跑,确保万无一失。宝宝树是一家有爱的企业,首先它做母婴,这是一份很有爱心的事业,然后还是处于创业阶段,母婴这块儿目前宝宝树是最大 的,竞争对手也很多,所以宝宝树也很拼的,app一版发完又一般,母婴电商也是刚做不久目前已经超过母婴电商萌芽宝贝了,在移动互联网的时代,宝宝树要做的还有更多,这对我的挑战也很大,也很锻炼人。

访谈(Q9):很多关于IT男的传说在江湖流行甚广,但真实生活中的IT男究竟是像神一样存在,还是不过芸芸众生呢?很多IT屌丝男用生命在追赶,“朝九晚五”变成了“朝九晚无”。作为一名IT精英男,您的生活与工作中是否也在上演这样的故事?

acmore(A9):哪里有神一样的存在,哈哈,也得吃饭睡觉呀,但是IT男更多的是去解决产品的需求,解决系统的问题,所以牛的IT男或者geek在解决问题方面确实有神存在一样的感觉(请参见tk教主)。

IT 工作加班是必不可少的,这也是这个行业的特色吧,不可避免,尤其是互联网,想想中国互联网也就20年不到,却已经可以频繁去美国上市,跟美国互联网看齐,说明IT互联网的伙伴们还是很拼的,所以加班是家常便饭,但是再累也需要思考提升工作效率,效率上去了,时间就腾出来了,就有时间更好的休息和娱乐生活 了,这才是一个好的正反馈系统。上班时间较长必不可免,为了不影响生活质量,我一般充分利用好碎片时间,也会积极去抽时间健身,总之,我觉得时间就这些, 规划好执行好就ok了,life is always a tradeoff,自己权衡好就好。

发布了167 篇原创文章 · 获赞 350 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/Ture010Love/article/details/104373579