3年DBA之路

一、写在开头

    今年4月是我正式参与工作满三年的句号,我觉得有必要回顾一下过去三年DBA生涯的工作经历,帮助自己做好总结,并想清楚自己未来要走的路。同时也希望这些经历能帮到别人。

    毕业时候参加过数据开发、游戏研发以及DBA的实习,或许是因为我当时感觉DBA的职业特性跟我性格比较匹配的缘故吧,最终我选择了DBA作为我第一份正式职业。

    当时的我对DBA的了解十分有限,甚至此前都没有接触过DBA,对数据库的了解也仅限于使用。所以这3年我也是在工作中不断地摸索和学习,接下来是从我的视角来了解一下DBA。

 

二、工作内容

    以前我觉得我并不算是一个传统的DBA,因为工作头两年参与的大部分工作是做监控、自动化运维开发以及NoSQL(Redis、SSDB、MongoDB)的运维及业务支持,对关系型数据库更多是自动化运维开发支持。

    但是随着后来参与了一些业务优化、数据模型设计、备份恢复建设、机房迁移方案设计与实施、集群架构升级、高可用改造及跨机房容灾及改造等工作,让我对数据库、业务、架构的理解更深入,对DBA的工作内容及DBA对业务带来的影响有了更深刻的认识。

    根据我对DBA的了解,我把工作场景进行如下分类(各类工作也是互相关联的):

3年DBA之路_第1张图片

  • 日常运维类:权限管理、资源需求审核评估和交付、sql审核、ddl、dml操作、报警内容分析及修复等常规运维支持
  • 特殊运维需求:数据迁移、实例迁移、虚机迁移、机房迁移、版本升级、架构升级、数据库类型切换等等
  • 业务优化类:对存在性能、容量问题的业务进行业务优化,主要是表结构优化、sql优化、索引优化、Redis数据模型和操作模型优化等等
  • 业务模型设计类:针对某一系统、平台、业务进行数据库选项、架构选型、表结构设计、sql设计、索引设计、Redis数据模型和操作模型设计等等
  • 架构设计类:针对特殊业务场景或者当前无法支持的业务场景进行架构设计,持续建设高可用方案,提升服务可用性,持续建设,提高数据库支持能力
  • 运维开发类:针对运维操作进行自动化开发,减少人为操作数据库的时间和风险,涵盖监控、备份恢复、部署、数据迁移、架构变更、权限控制、ddl、dml操作、元信息建设等等

PS:这仅限于我当前的个人理解,后续可能会随着我的工作经验丰富,工作内容会有更多的扩展。此外,我也把工作中遇到的问题以及如何分析、定位和解决的过程沉淀下来,进行分享。

补充,根据这些工作,将DBA分为三类:

  • 运维管理方向

  • 架构设计、性能优化等需要经验积累的方向

  • 数据库开发方向(分为运维开发、业务开发支持、工具定制、组件研发、内核研发等等)

 

三、核心能力

    虽然不同数据库类型所涉及的技术不一样,但是根据上面分析的工作内容,我还是可以找出各个数据库的通用技能类。

    我把DBA的核心能力划分为(重要程度不分先后,相互之间也有一些关联):

3年DBA之路_第2张图片

  • 备份恢复:DBA必备技能,不同数据库的备份恢复机制不同,但是业务对于数据的可恢复能力是刚需,而一个好的备份恢复方案能大幅度提升数据恢复的能力,所以在备份恢复方向上必须做到很高的水平
  • 高可用架构:DBA必备技能,相对重要的业务场景当然不希望你的数据库一旦出现故障就使得业务瘫痪,所以数据库的高可用在维持业务运行上是非常重要的。
  • 分布式架构:在支持一些存储需求高、并发高的业务,分布式架构的能力能让你面对这些需求得心应手。
  • 读写分离、异地多活等特殊场景架构:在一些特殊场景下,需要我们灵活运用数据库的机制进行架构设计,以较小的代价承接特殊业务场景。
  • 性能优化和存储优化:DBA必备技能,利用我们对数据库机制、参数的理解,针对业务特性进行相关调整,让提升性能和存储空间利用率。
  • 数据同步、迁移:应对一些运维场景或业务变更,需要利用数据同步和迁移的能力去解决问题。
  • 数据库选型与业务建模:DBA必备技能,利用我们对数据库特性和运行机制的了解,结合业务进行设计,让业务在性能、存储、扩展性、稳定性等方面都有不错的表现。
  • 开发规范、运维规范:需要我们对数据库有一定的理解和经验的累计,才能制定出优秀的开发规范和运维规范,这也是能让我们更好地展开工作的能力。
  • 自动化运维的设计与开发:解放我们日常运维工作的特效药。
  • 监控及监控分析:需要我们对关键指标有足够的理解,才能从监控数据中发现异常,并快速分析定位。
  • 数据库运行机制及重要参数的理解:是以上多个能力的基础。

PS:我希望后面能够针对这些能力如何提升,需要从哪些方面入手,做一个详细的学习攻略。

 

四、基础能力

    核心能力想要深入、牢固地掌握好,在一些基础能力上的储备是非常关键的,也是决定一个DBA上限的能力,我把这些能力分为:

3年DBA之路_第3张图片

  • 数据结构与算法:无论是Redis五大数据结构的底层实现还是MySQL的索引机制以及数据库的一些存储和执行机制,想要掌握好,就需要我们具备足够优秀的数据结构和算法功底,当然对于我们DBA来说,不需要利用算法和数据结构去开发,但是需要我们了解其时间、空间复杂度,以及各数据结构、算法的原理。
  • 计算机网络:计算机网络在计算机领域都是必备能力,对DBA尤其重要,尤其是在分析一些响应延迟等问题上以及架构设计方向上。
  • linux操作系统:数据库多数是运行在linux系统之上,甚至很多的数据库机制跟linux系统的底层关联较大,掌握linux操作系统能更好地帮助我们进行性能优化、问题分析和处理。
  • C语言:我为什么单独把C语言作为核心能力呢,因为C是相对来说比较底层的开发语言,掌握了C语言,其他语言能更快速地掌握,且目前大部分优秀的开源工具都是基于C语言开发的,掌握C语言更有助于我们去掌握开源工具,更快速地理解各工具的运行原理

PS:这些技能相对比较通用,我会把我的学习心得和总结也在博客中进行分享。

 

五、通用能力

    DBA想要在工作中更好地展开工作,有几个通用能力能帮助我们提高效率、提升工作质量,我把这些能力分为(可能有些能力会相互关联):

3年DBA之路_第4张图片

  • 时间管理:DBA的工作内容可以看出非常的多,会把我们的时间打得非常零碎,这就需要我们做好时间管理,提高时间利用率;
  • 会议管理:DBA的日常工作会涉及非常多的会议,做好会议管理,能帮助我们更好地获取会议重点信息,提高会议效率‘
  • 沟通与协作:DBA需要面对开发人员、业务人员、产品、系统运维、安全等各方人员,面对不同的人把相关事情讲清楚,并合作做好,也是DBA的强大内功之一
  • 复盘能力:复盘能更好地让我们积累经验,调整前进路线,更好、更快地达成目标。
  • 分享与展示:做方案分享、技术推广、方案落地等都需要我们具备较好的分享和展示能力。
  • 持续学习:数据库是一个技术革新非常快的一个行业,需要通过持续学习来获取更多更好的技术和方案。
  • 职业规划:有了好的职业规划才能有方向和有目的地展开工作,提升工作效率,快速提升自我。
  • 目标管理:好的目标管理能力,能让你日常工作有的放矢,目的性强,工作效率高,工作质量好。

PS:通用能力在很多课程、网站、分享中都能学习到,我这里就不过多展开了,如果发现有好的学习途径我会进行分享。

 

六、DBA对公司的影响和价值

    不了解DBA的人可能对DBA的影响力一无所知,可能有些人还认为DBA无非就是个管理数据库的,但是我希望通过下面的分析能改变你的看法。

    一个专业的DBA对公司的价值非常大,根据我的工作分析出有几个方面:

  • 成本:DBA能根据业务进行合理的选型和建模,使用最少的硬件成本支撑业务,极端情况甚至能减少90%以上的硬件成本。
  • 性能:DBA能根据业务特性进行操作模型设计、优化,极大程度低提升服务效能,提高用户体验。
  • 容错:DBA对故障做好了备案,一旦发生各种故障,都能够快速进行恢复,使故障对公司带来的影响降到最小。
  • 规范化:DBA能规范化公司的一些开发运、维行为。
  • 成长/可持续发展:DBA提供了健壮性的数据库方案,在公司快速发展的同时,也能同步进行扩展和支持。

    

七、给过去和未来

    过去三年,从小白到老鸟,努力没有白费,做出很多有价值的东西,积累了很多经验和技能,包括专业技能和通用能力,收获了同事的认可和信任。但是成长速度还是不够,学习不能够长久持续,一些基础能力掌握不够牢固,参与的一部分项目成果一般。不要否定自己,也不要太过焦躁,静下心来,走好每一步路。

    未来,需要继续巩固基础能力,加强核心能力,在纵向需要深挖底层原理机制,在横向也要扩展数据库技术,掌握更多的数据库类型,避免单一化,思考问题能更全面,在知识沉淀和建议积累上,要积累架构设计、架构优化能力,同时保持对行业前沿技术的了解,吸收身边优秀前辈的经验。要保持职业规划与工作规划相对一致,要保持个人目标与公司目标相对一致。持续学习,持续锻炼身体,持续分享。

    希望下一个三年通过努力能够成为超级高级的DBA。

 

你可能感兴趣的:(数据库)