今天下午在思考几个问题,工作的本质是什么?DBA的核心价值是什么?有哪些工作是DBA不可取代的?在整理的过程中,也有了一些心得体会。
首先DBA这个职位全称是Database Administrator,其实这里有一个问题,我们总说数据库管理,这里的管理可以manage,那么administion和manage的区别大吗,如果查看字典会发现administrator的含义其实相对来说范围更窄一些,有点偏行政人员,而manage的概念和范围要更宽泛一些,换言之,DBA带给我们的含义其实已经悄然发生了变化,在行业里第三个字母A有几种说法,一种是Architecture,即数据架构师,还有一种是Analysis,即数据统计/分析师。
对于DBA来说,如果要说核心价值,不妨换一个问题,即哪些工作是DBA专业的事情,从我的理解来说,有以下几件:
1)数据库技术选型
2)数据备份恢复
3)数据库架构设计
4)数据库高可用
5)数据库升级
6)数据迁移
7)SQL性能优化
其中除了第7件事情之外,前面的6件细细想来,业务方似乎都不会太关心这部分的内容,他们能够参与的角色部分是比较有限的,也就意味着这些技能虽然是专业的内容,但是专业到业务同学无法感知,会形成一种无为的错觉。
而且在云计算依然成熟的今天,带给数据库运维管理工作的变化也有着较大的冲击和挑战。
在这个部分,我已经把安装部署的工作完全舍弃掉了,因为这是再简单不过的事情,公有云对标的是一种资源服务,这个资源包括服务器资源,网络资源,数据库资源等,很多额外的成本也打包进去了,比如机架位成本,电费,网络带宽费用等等,是一个统一对外的价格包。
当然包括阿里云,腾讯云,AWS,现在的资源服务其实是最底层的基础服务,在数据库层的服务还包括:数据库选型,备份恢复和高可用。而回到刚刚的那本的DBA专业的工作内容,就会发现,除了架构设计和SQL优化,其实公有云服务已经能够基本覆盖业务需要的大部分范围了。
而反过来说,如果一个公司就几个数据库,使用了公有云服务,基本能够满足日常业务发展需求,那么DBA存在的意义就不是很大,而如果你有成百上千套环境,需要大量的维护管理工作,那么这些就需要专业的管理。可以举几个例子,比如权限管理,如果没有统一的规范规则,那么用户很可能是dev_user,那么成百上千套环境都是这种混乱模式,简直不可想象,如果业务同学拥有drop,truncate权限,可以任意变更和操作数据,那么数据安全就是一个很大隐患,对于业务侧数据管理缺少既定的机制和策略来保证,那么整个数据库管理就会是一锅粥。
就好比游乐场里面的海洋球,如果海洋球代表的是相应的数据,那么我们如何有效的管理这些海洋球就是一个类似的问题,如果从这些海洋球里面找到你需要的数据。
所以我们需要好好考虑下自己目前的状态,既然我们是数据库管理员,那么管理就是一个很重要的切入点。我的脑海里不由得闪现了一个名词:生命周期管理。从我目前的认知理解来看,我认为这个是DBA工作的核心价值。
这里的生命周期管理范围是比较大的,我可以把它分为实例生命周期,对象生命周期,数据声明周期和SQL生命周期四个维度。
其中实例生命周期正是目前的公有云服务成熟和优势所在,而相反是很多私有云或者公司自建的虚拟化服务不够成熟和健全的部分。
权限生命周期主要会关联数据安全和数据规范,其中数据安全就是因需所配,同时可以追溯变更历史,数据库规范则是做一些相关的命名规范等,总体来说,这是一套权限总线。
对象生命周期管理涉及的范围很容易理解:数据库对象,简单来说,是那些DDL操作,其中以Create操作的优先级最高,而且风险最低。而Alter操作的复杂度最高,风险较高,Drop操作的复杂度最低,风险最高,在这方面我们要提高Create的效率,这里就会关联SQL审核和SQL自动化上线。Alter操作的复杂度最高,则会关联数据备份恢复和数据变更的专业化处理,如online DDL,Drop操作的风险最高,则可以通过构建回收站来降低这类操作的风险。
数据生命周期管理是目前工作中大家最容易忽视,而且是最有价值的。在这方面操作的复杂度不高,但是可以这个层面影射出很多方面工作的必要性和价值。比如数据操作无非是一些增删改的操作,如果从数据的变更情况来说,我们完全可以做到数据冷热分离的处理,冷热分离带来的最大好处就是让我们可以集中精力去完成那些额待解决的事情,可以延伸出几个方面的关联。
冷热分离和高可用相关,比如一个业务有100张表,但是热表只有10章,那么我们考虑高可用方案的时候可以优先恢复那10张表的数据,就可以覆盖最多的业务范围,从而实现业务高可用。
冷热分离和备份恢复相关,我们可以针对业务特别来优化所谓的热表,在数据恢复时优先恢复哪些热数据,尽快恢复业务,可以把表根据数据变化情况进行细化,比如把流水型日志表改造为分布式或者无事务的处理方式。
冷热数据分离和优化相关,比如可以格外关注表的数据变更和写入效率,集中进行优化改进。
而SQL生命周期管理主要面向的是查询语句,可以根据业务特点把这些相关的表归类为几类:opr(运维管理),ref(数据字典),app(应用数据表),sec(安全权限相关表),同时引入SQL指纹和SQL生命周期管理,慢查询管理等。