草庐IT

传统数据库运维人员如何应对开源和分布式转型?

twt社区 2023-03-28 原文

​一、概述

在现今云计算、大数据等新型技术推动下,业界主流的应用架构,正由松耦合、集中式的 SOA 架构向解耦合、分布式的微服务架构发展,运维人员的工作方式也正在由烟囱式运维、人工运维向自动化、流程化、平台化、智能化运维转变。在“去 IOE ”、“自主可控”的技术和政策双重背景下,传统金融行业的业务系统所采用的数据库,正在从老牌厂商的 DB2 、 Oracle 等逐渐过渡至开源数据库或国产新兴的分布式数据库。技术路线的变化同时也带来了工作方式的转变,传统数据库运维人员在这一轮发展浪潮中会遇到哪些挑战,以及应该如何应对这些挑战,这些问题成为各位管理员们首先要思考的问题。笔者结合自身工作经历整理了点滴感悟与各位分享。

二、新形势下的挑战

1.运维成本大幅提升

传统数据库运维人员面对的数据库往往是各自独立的。业务系统仍然是纵向隔离的状态,在烟囱式系统架构中,每个业务系统都有自己独立的数据库,我们在管理这些数据库的过程中,往往需要串行化操作。然而,我们的数据库运维团队规模还比较小,却已经承担了几百套数据库的运维,随着业务系统数量越来越多、数据规模越来越大、交易复杂度不断提升,如果仍按照传统的数据库单点运维方式,势必导致运维时间成本和人力成本大幅攀升。

2.缺乏统一的“运维大脑”

作为一家传统金融行业,业务系统都有各自独立的数据库,每个数据库会被分派给指定的数据库管理员运维,这就导致每个人之间存在信息壁垒,无法对全部数据库的运行状况形成全局视图,缺乏统一的“运维大脑”,无法进行统一的数据库分析和辅助决策,出现问题时往往各自为政,大家各自查看自己负责的那些数据库,然后靠现场沟通互通有无,运维时效性难以保障。

3.运维手段亟需丰富

在目前的烟囱式运维时代,我们数据库管理员有时间、有精力直接敲命令进行运维,例如安装、巡检、备份、升级、调参等基本工作,此时是“纯人工时代”;随着数据库数量的增加,再通过手工敲命令方式逐一操作各个数据库已经不再现实,因此,我们开始写脚本,放到服务器上自动执行,由操作系统完成脚本执行,管理员只需读取针对各个数据库的脚本执行结果即可,此时是“脚本时代”;然而,数据库数量日益增长,即使逐一读取脚本执行结果也要消耗相当大的精力,此时管理员们开始借助 ansible 这类自动化运维工具批量管理数据库,只需读取一次批量执行结果即可,此时是“初级自动化运维时代”。然而,即使到了“初级自动化运维时代”,信息的终点还是“人”,需要由我们管理员做最终判断,当出现问题时登陆数据库读取各项指标进行人工分析,在当今这个分布式技术蓬勃发展、数据海量井喷的时代里,只靠我们这些“人”来判断处理如此之多的信息流,已经出现力不从心的情况。这种形势下,必须引入其他运维手段,帮助把我们管理员从繁琐高压的工作环境中解放出来。

4.缺乏新技术运维经验

在“去 IOE ”、“自主可控”的技术和政策双重背景下,传统金融行业的业务系统所采用的数据库,正在从老牌厂商的 DB2 、 Oracle 等逐渐过渡至开源数据库或国产新兴的分布式数据库,我们也在进行分布式数据库的转型探索。然而,并非所有数据库管理员都具备新数据库技术理论和操作能力,有的管理员已经成为传统数据库领域的专家,可能已经运维了十年甚至二十年之久。面对新型数据库技术,传统技术经验并不能完全适用,甚至可能是颠覆性的。

三、运维人员如何应对新挑战

1.制定规范和标准,降低运维风险

作为传统金融机构,我们有一套完整的运维规章制度,如运维操作流程、应急处置规范和预案、完善的变更与回退流程等等,保障各项运维工作有条不紊开展,而这些规章制度的有效执行往往需要依靠各岗位的细化落实,数据库运维岗位也不例外。数据库运维团队正在按照这些规范指引,结合岗位各方面的具体工作,制定出属于数据库管理的规范和标准。例如把升级、上线、备份、迁数等工作整理成标准模板文档,形成运维资产随时调用;或更进一步地,把数据建模和数据库设计、容量规划、 SQL 开发、高可用架构设计等工作整理成规范文档,面向所有数据库开发人员提供咨询指导。通过标准、规范化的管理,使得数据库运维工作有据可依、遇事不慌,从而降低运维风险。

2.借助运维工具,发展自动化、平台化运维

大数据背景下运维工作已经不能单纯依靠人力来解决,而要借助工具、平台来完成。目前开源的和商用的运维工具和平台丰富多样,很多传统的手工运维工作都可以交给这些工具或者建设相应平台来做。常规序列化操作如安装、巡检、升级、备份等,我们已经开始借助自动化运维平台;以往通过手工更新的数据库配置信息表交给 ITSM 或 CMDB 来管理;数据库的监控告警可以利用近几年大热的 Prometheus+grafana 技术进行配置,或者引入商用产品建设数据库监控平台或数据库性能分析系统;等等。作为一名数据库管理员一定要经常思考哪些工作可以交给“机器”去做,学会借助运维工具和平台,辅助运维人员保障业务稳定性及连续性。

3.探索智能运维,建设决策中心

随着越来越多的运维工具投入使用,运维管理员似乎又“忙”了起来,因为需要在不同的工具和平台之间进行切换,并在大脑中将各种指标关联起来综合进行判断,以实现故障分析、关系维护等操作难题,这对于运维人员来说也形成了不小的压力。深入思考后发现,所有这些运维工具、平台、系统,归根结底,都在采集“数据”并向外输出“信息”。数据在当代已经成为企业生存的根本,如果能够整合这些“信息”并产生更大的“价值”,那么对于运维人员来说必然又多了一项利器。如何实现运维资产数据有效、精确、精细化管理,利用大数据技术形成决策中心,运维数据消费效率,成为目前不得不思考的问题,而数据中台、运维数据中台、智能运维平台等技术正是为了解决此类问题应运而生。数据库运维员作为智能运维的直接收益者,我们也正在朝这个方向探索。

4.主动拥抱新技术

自主搭建一套测试环境进行学习实践是转型的开端。如果已经有 DB2 或者 Oracle 的实践基础,可以通过对比的方式来进行新数据库技术的学习。 MySQL 是当今使用最广泛的开源数据库,搭建简单,网络上学习教程非常多,如果能够先把 MySQL原理理清楚,再去对比学习其他分布式数据库便会简单许多。目前市面上分布式数据库技术有两种实现方式,一类靠 MySQL+ 中间件实现,一类靠研发新型分布式数据库实现。 Mysql+ 中间件有开源版本,也有诸多数据库厂商基于中间件做了商业版的分布式增强,而数据库仍沿用开源 MySQL ;自研分布式数据库也有很多,比较知名的大厂商和中小公司推出了很多。如果企业已经有了向分布式数据库转型的思路,那么数据库运维人员不妨借此机会开始参与到项目前期调研中,一定会收获良多。

5.技术,也要懂业务和管理

大型金融机构内部的分工往往比较细,很多情况下技术人员、项目管理人员是不同的团队,然而对于个人发展来说,还是应该把重点从技术领域扩展到复合型领域。正如前文所说,如果企业已经有了向分布式数据库转型的思路,那么数据库运维人员一定要从项目前期调研就开始参与,因为项目前期所进行的调研、需求、 poc 测试是了解新技术的第一步,可以最快速地了解市场主流技术和应用现状。到了项目建设期,就更需要技术和管理的复合型人才了,数据库运维人员自身已经有了技术实力,更能方便地把业务需求与实践相结合,利于项目成功落地。项目建成后进行新技术推广时,技术人员的优势又能进一步凸显,因为无论是何种新技术的推广实施,一定要先制定完善的技术升级规范,提前做好测试,获取迁移改造量和改造难度,制定出切实可行的切换计划,在这一点上技术人员可谓具有得天独厚的优势。

6.引进新技术人才,注入新鲜血液

如果企业有人才招聘计划,不妨适当引入新型数据库的技术人才,一方面使得团队整体对外服务能力得到提升,另一方面也为团队引入了内部讲师有利于全体成员的进步。

7.开展厂商合作,引入专业技术支持

大型金融机构的技术团队规模可能比不上互联网技术公司,但更多时候金融机构以甲方的身份出现,有更多的机会与技术公司开展合作。数据库运维人员可以借助这些合作机会,向专业技术公司学习。

四、总结

以上是笔者结合自身工作经历整理的些许感悟。在传统数据库转型的过程中,运维人员一定要运用新时代运维理念及时调整自身发展方向,全面提升技术与管理技能,顺应新技术潮流,以精细化、自动化、智能化的管理思维勤加思考,在变革的浪潮中砥砺前行。

有关传统数据库运维人员如何应对开源和分布式转型?的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  8. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐