草庐IT

我为什么要把退休前的这段时间都用在和运维知识自动化系统死磕上

白鳝 2023-03-28 原文
​我的团队做系统优化是从2003年开始的。应HP SERVICE的邀请,2003年我加入了他们的海尔系统优化组,负责Oracle数据库的优化工作。这是我第一次参加大型系统的优化工作,甚至那时候我还不知道一个大型售后服务系统的优化该从何处入手。我是带着李维斯的一本书出发去青岛参加这个优化项目的,通过这个项目,我对Oracle数据库的优化有了初步的认识。后来我又帮助HP完成了对华为SCM系统所采用的CAF平台的性能评估,并对决策者建议及时中止这个项目,避免更大的资金浪费,因为这个项目已经无法优化了。后来HP采纳了我的建议,关闭了基于CAF平台的项目,华为也重新选择了Oracle EBS作为SCM系统和ERP系统的基础。从那以后,我们的团队规模越来越大,做的优化项目也越来越多,也锻炼出了一批做系统优化的专家。

2011年,我们开始帮助国家电网做系统优化,刚开始的几个项目在专家的带队下,效果都特别好。客户希望我们扩大优化范围,制订了一个需要近百名DBA的大型优化项目。我们从很多合作伙伴处招募了数十名DBA共同参与这个项目,为了确保项目的质量,我们对整个团队进行了多次集中培训。不过最后这个项目做下来效果很不理想,最主要的原因就是DBA的能力参差不齐,大多数没有参加过大型优化项目。从那个项目开始,我也在思考传统的依靠人和专家的运维模式存在的问题,希望找到一条道路,能够让专家的经验发挥更大的作用。这是我开发D-SMART,一个运维知识自动化系统的初衷。要想构建一个知识自动化系统,必须提高运中的数字化程度。不过传统行业IT运维的数字化程度很低。其主要原因有几个方面。

资源有限:很多企业可能没有足够的资源去投入研发和实施智能化运维系统,或者可能认为将资源投入其他方面更有回报。

文化因素:一些企业可能更愿意依靠人工经验而不是自动化系统,可能是因为他们缺乏对自动化系统的信任,或者他们可能认为在紧急情况下专家的判断比机器更可靠。

技术限制:一些企业可能缺乏必要的技术基础设施来支持智能化运维系统,这可能需要较高的成本投入来升级设备和系统。

意识不足:一些企业可能没有意识到数字化运维的潜在优势,或者可能没有足够的知识和了解数字化运维的实施方法。

虽然传统行业在运维数字化上存在各种认知的不足,但随着技术的发展和数字化的日益重要,智能化运维将成为未来信息系统运维的一个趋势,也是一个必然的方向。

反思我们这些年做系统优化与运维的工作经历,经验不足的技术人员是导致优化工作效果不佳的重要因素。优化工作需要专业知识和技能,而不是仅仅依靠经验。可能需要更加系统化的培训来确保所有参与优化工作的人员具备必要的技能和知识。此外,优化工作的效果也受到多个因素的影响,如系统设计,数据质量和优化工作的过程等。

随着技术的不断发展,现在已经有许多智能化的算法与方法可供使用,可以大大提高运维效率和减少人为错误。通过运维知识自动化工具可以提供智能化分析和自动化操作,以帮助DBA更好地管理和优化系统。如果企业有足够的资源,可以考虑引入这些工具和系统来改善运维效率。“运维知识自动化系统”结合了大数据分析、人工智能等技术,以及专家经验和工作积累,构建了一个全面的运维知识体系,可以帮助提高运维工作的效率和质量。通过监控指标体系、健康模型、运维知识图谱、异常检测算法等技术,“运维知识自动化系统”可以自动化地分析和解决系统性能问题,同时还能提供智能化的优化建议和决策支持,为企业的运维工作提供了强有力的支持。

实际上D-SMART系统开发的最重要的目的是对我们这个团队这二十多年在IT运维与系统优化上的经验的总结,让团队中的专家把这些年积累的经验变成可自动化执行的数字化知识库。并通过不断的迭代知识库,让运维知识不断的能够在平台中沉淀与积累,从而不断提升自动化分析的能力。

这个系统的研发不仅仅依赖于研发团队,知识工具的研发完全由DBA完成,而没有借助于普通的运维人员。这是因为普通的研发人员并不了解IT运维,不了解数据库,不了解性能优化。只有做过运维工作的DBA才能够更加准确的把专家的思路变成自动化的工具。

D-SMART系统的起点是指标体系,我认为指标是专家经验的一部分,而且是十分重要的一部分,专家认知后的指标才是可以完全解读的指标。而目前很多数据库监控软件提供的很多指标,运维人员无法正确解读,哪怕这些指标出现了异常,可能也无法被发现,或者说发现了指标异常也无法感知到系统哪个地方出现了问题。而专家梳理出来的指标数据都是单一可被专家解读的,因此每个指标都会被专家进行标注,打上特定的标签。

D-SMART的第二步是完成指标的准确采集,准确的采集到每个指标的数据对于智能化运维系统来说十分关键。要确保每个数据都能够准确的反映出数据库的真实状态十分关键。很多数据被采集回来后,需要经过加工才能变成可被使用的指标,这些加工算法里也体现了专家的经验。通过这个步骤,D-SMART系统在不断的获取数据库运行状态的数字化模型。

第三步是对采集回来的指标、日志数据进行自动化的建模分析。我们通过健康模型判断数据库的运行状态是否正常,是否存在风险;通过性能模型了解数据库的总体性能状态;通过负载模型了解数据库当前的负载情况;通过故障模型发现数据库可能存在的隐患,并及时报警。

第四步是利用这些被采集回来的数据自动完成各种巡检工作。比如日检,每天半夜系统会自动对前一天采集的数据做分析,发现其中的风险与隐患,并生成日检报告。每个月或者每个星期,可以定制任务对最近采集的数据进行自动化分析,生成巡检报告。这种巡检能够分析全面的数据,比传统的靠人工采集数据,人工进行分析的方式拥有更为丰富的数据。通过自动化分析的算法也更加高效。

利用这些数据,还可以做很多有价值的分析工作,比如容量预测、性能优化、专项审计等。同时利用标准化的指标体系,我们还可以构建一线运维与二三线运维的数字化沟通,通过完善的指标集,可以尽可能全面的为三线运维提供数据库运行的全景视图,真正做到不用到现场,专家可以尽知天下事。

前阵子80多岁的母亲一定要给我过个生日,这些年在外面跑,已经有十多年没有过生日了。插蜡烛的时候才发现,过完生日已经54岁,离退休已经时日无多了。我想在现在还能做点事情的时候,尽可能的能够把这些年积累的经验都数字化了,能够留下来,这样也就没有遗憾了。

有关我为什么要把退休前的这段时间都用在和运维知识自动化系统死磕上的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. 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

  5. ruby - 为什么 4.1%2 使用 Ruby 返回 0.0999999999999996?但是 4.2%2==0.2 - 2

    为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返

  6. ruby - ruby 中的 TOPLEVEL_BINDING 是什么? - 2

    它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput

  7. ruby - Infinity 和 NaN 的类型是什么? - 2

    我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串

  8. ruby-on-rails - 如果 Object::try 被发送到一个 nil 对象,为什么它会起作用? - 2

    如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象

  9. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  10. ruby - 当使用::指定模块时,为什么 Ruby 不在更高范围内查找类? - 2

    我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or

随机推荐