主要讨论人员
提问: 肖鹏
解答: 徐戟(白鳝)
嘉宾介绍
徐戟(白鳝)
从事应用开发、Oracle数据库、性能优化工作超过20年,一直从事IT咨询服务和系统优化工作。
曾供职于DEC、赛格集团、长天集团、联想集团等国内外知名企业,现任南瑞集团信息系统集成分公司CTO。
1999年起致力于Oracle数据库性能优化等方面的研究,参与了大量性能优化项目,积累了大量的实际工作案例。
著有《ORACLE 优化日记》、《ORACLE RAC日记》和《DBA的思想天空》三本数据库技术图书。
曾组织开发了国内首套电信级联机实时计费系统、国内第一套三检合一的检验检疫综合管理系统,并主持设计IPP金融中间业务平台,即金融大前置,该平台目前在国内十多个商业银行中使用。
精彩问题
本文涉及的提问包括如下几个:
目前MySQL的版本更新很快,在有一定存量的基础下,怎么看待版本更新,是否可以实现不骚扰业务,也不投入过多的人力完成版本的大面积升级?
目前的数据库种类非常的多,Oracle、MySQL、Redis、MongoDB、PostgreSQL,作为DBA来说是应该专而精?还是应该广而博?是否需要区分阶段?
自动化运维系统可以极大的缓解DBA的工作,但是普遍来说DBA的综合开发能力有限,那么DBA应该以什么角色参与到自动化运维系统中,参与多深?
目前的架构一般会用到多种数据库,比如redis和MySQL,作为运维方来说在大规模的情况下,是按照软件水平方向进行运维,管MySQL的只管MySQL,管redis的只管redis,还是按照业务垂直划分,某个DBA同时管着某个业务的reids、mysql?优劣各是什么?
有没有适合DBA的学习型组织的优秀实践?
精彩回复
在有大量存量系统的情况下,纯粹为了升级而升级是没必要的。
一些企业采用了一线管系统,二线管专业技术平台的切分方法,将纵横管理划分在两条线上
DBA所需要的技能和知识涵盖面十分广。个人学习比较枯燥,学习起来也比较慢。因此群体学习是一种十分好的学习方法
Q1. 目前MySQL的版本更新很快,在有一定存量的基础下,怎么看待版本更新,是否可以实现不骚扰业务,也不投入过多的人力完成版本的大面积升级?
版本升级的目的和驱动力无外乎以下几个方面:
需要新功能支持业务
提升性能
消除BUG
运维支持能力对老版本支持不足
如果不是为了上面的原因,在有大量存量系统的情况下,纯粹为了升级而升级是没必要的。
不骚扰业务,也不投入过多人力的情况下完成大面积升级是可以做到的,通过自动化作业脚本完全可以做到批量升级。但是如果在IT架构没有达到一定水平之前做这样的事情,是风险极大的。
如果你的数据库都采用了支持自动切换的主从复制的高可用架构,那么完全可以实现对业务影响很小的后台静默升级,而且由于架构保证了数据库的高可用和数据冗余备份,因此这种操作完全可以通过自动化运维作业去实现。
比如说子衿技术团队的NBASE-MH MYSQL高可用集群拥有1主2备三个可读写分离的独立数据库,而且三个库之间可以手动和自动切换。可参考如下图:
当需要进行数据库升级的时候,如果原版本和欲升级版本之间的主从复制是兼容的,那么就可以采取先升级一台从库,等升级完成后实现数据同步,再升级另外一个从库,完成后,将主库切到其中一个从库,然后升级主库。
这些操作可以通过自动化脚本实现,事后可以进行自动化健康性检查。DBA需要重点检查告警日志就可以了。不过如果你的数据库架构没有那么完善,那还是老老实实备份了数据,然后一点点的去升级吧。
Q2. 目前的数据库种类非常的多,Oracle、MySQL、Redis、MongoDB、PostgreSQL,作为DBA来说是应该专而精?还是应该广而博?是否需要区分阶段?
专而精,广而博,一专多能是DBA的三种知识结构。其实实际上能做到任何一点的DBA,混口饭吃都是没有任何问题的,而且肯定不是只能混口饭吃的境界,完全可以比较滋润的在IT圈里混日子了。
你想做哪种DBA,实际上更主要的是你的性格和你对自己的要求而已。再说的高大上一点就是和你的幸福感来自哪里有关系。
如果你对某个数据库掌握到了比较极致的程度,那么你只需要专一种数据库,就足够让你有一份不错的工作,在圈子里有足够的人气和地位,并且让你自己的工作生活有足够的继续学习的动力了。
广而博的DBA,往往是做集成之类的工作成长起来的,没有对某种技术做特别深入的研究和学习,但是在工作中积累了大量的各种各样的工作技能,见过各种各样的数据库和系统。他的经验足以支撑他在工作中如鱼得水。不过这样的DBA也有明显得缺陷,他无法深入的在某个领域做十分高端的技术工作。这会限制他的最终发展。
一专多能是结合了上面两种的优势,做到专而精并不是每个人都能做到的,这不仅仅需要你不断的学习,更重要的是,需要一定的机遇。
而一专多能是很多DBA能做到的,刚开始的时候主攻一种技术,随着年龄和阅历的增加,接触了更多的项目,接触了更多的技术,每种技术虽然无法达到第一种的深度,但是都会涉猎,都能折腾几下。这种知识结构可以使DBA在自己的工作中获得更多的机会,也更容易抓住某个机会,成功转型。在往IT架构师发展的路上,这种一专多能的技能是十分重要的。
Q3. 自动化运维系统可以极大的缓解DBA的工作,但是普遍来说DBA的综合开发能力有限,那么DBA应该以什么角色参与到自动化运维系统中,参与多深?
自动化运维的范围太广泛了,包括自动化部署、自动化发布、自动化巡检、自动优化、自动化拓扑维护、自动化调用跟踪、应用性能监控等等。
作为DBA参与编程开发肯定不是强项,但是贡献指标采集脚本,贡献分析策略和知识库、配合系统调试,反馈系统问题等方面还是可以积极参与的。
另外具有一定开发能力的DBA,写一些小的工具,脚本,对DBA工作还是很有帮助的,学会一种脚本语言,比如PYTHON/PERL/SHELL等,在某些情况下也会派上用场。
Q4. 目前的架构一般会用到多种数据库,比如Redis和MySQL,作为运维方来说在大规模的情况下,是按照软件水平方向进行运维,管MySQL的只管MySQL,管Redis的只管Redis,还是按照业务垂直划分,某个DBA同时管着某个业务的Reids、Mysql?优劣各是什么?
横向纵向管理是各有利弊的
按系统划分维护职能,可以让运维人员对整个系统有一个十分统一的认识,对整个系统的全栈架构都了如指掌,一旦出现一些问题,可以站在一个全面的角度去考虑,不容易局限于某个IT组件。不过一个人很难在多个知识域都能研究的十分深入,因此很难做到深入。限制了维护人员专业方面的深入。
如果按照技术平台划分,在某个技术平台上可以做到专业,技术能力和深度都有保障。但是比较难对整个系统的整体有一个全面的理解,遇到比较深的问题,无法及时理解整个系统的全栈结构,无法解决一些综合性的问题。
为了解决这个问题,一些企业采用了一线管系统,二线管专业技术平台的切分方法,将纵横管理划分在两条线上。也有些企业在划分专业线的基础上,设置了系统经理的角色,系统经理必须对整个系统有全面的了解。
Q5. 有没有适合DBA的学习型组织的优秀实践?
DBA所需要的技能和知识涵盖面十分广。个人学习比较枯燥,学习起来也比较慢。因此群体学习是一种十分好的学习方法。
比如我们要学习某本书,这本书有20章,400多页,一个人看这本书大概需要一个多月时间。而群体学习,10个人参加学习,每个人分配2章,看完后给大家讲,和大家讨论,那么可能半个月就能完成学习了。而且这种学习方法,学习的效果也远远好于自己一个人闷头看书。
可能很多DBA喜欢参加各种沙龙活动,普通的沙龙活动貌似大家都听的挺好,也有不少收获,但是由于沙龙这种活动主要是听别人讲,自己的思考比较少,所以每次从沙龙活动中虽然也能有收获,但是往往学到的东西是无根的,很容易再次丢失。在沙龙中如果能增加互动,增加实际操作,对抗演练等活动,可能会事半功倍。
对学习型组织来说,大家一起做些有价值得事情是大家都追求的,其他的可以大家一起做的事情也很多,比如一起写个小工具、一起翻译一本技术书籍、一起写一套培训课件等,都是十分有趣和有价值的。