摘要:SRE的核心文化,依旧需要各界携手去探索和发扬。但就像运维所需的确定性那样,SRE探索对每家企业的未来价值来说,也是充满确定性的。
本文分享自华为云社区《云上的米开朗基罗:在不确定时代,寻找建筑般的确定性》,作者: SRE确定性运维。
文艺复兴三杰之一的米开朗基罗,被称为“天才建筑师”。其实他一生留下的建筑并不多,仅仅有美第奇礼拜堂、卡比多广场、圣彼得大教堂穹顶等寥寥几座。但米开朗基罗却凭借对建筑层次与结构的精妙把握,影响了此后数百年的建筑风格。很多人认为,米氏特别擅长在立体的空间与繁杂的结构中,寻求建筑的最大确定性。得益于此,像圣彼得大教堂穹顶这样原本被认为不可能的作品才最终问世——探寻确定性,也就此成为建筑设计师的目标之一。
在今天,数字化和云化正在容纳一切。每天,不计其数的硬件连接云端,软件完成云上开发、迭代。这让云端变成了一个空前复杂的赛博空间,同时也产生了海量的不确定性。但是,这种不确定性又是必须被治愈和解决的。根据GIV预测,至2025年,全球企业云技术使用率将达到100%。全面云化的不可逆趋势下,企业必须确保自身数字化、智能化过程中的安全、稳定与可靠。
(华为云贵安数据中心)
谁来再为全球企业寻得云时代的确定性呢?答案是运维团队。
过去,我们普遍认为运维应该是消防员,哪里着火扑灭哪里;但在云时代的浩瀚业务与海量数据面前,这种模式显然杯水车薪。于是,SRE应运而生,云服务商和企业用户开始追寻确定性的运维价值。运维人需要成为“云上的建筑师”,去设计可靠的建筑结构,去预知建筑可能面临的种种风险,去构建安全与稳定的结构闭环。
在这样的背景下,华为云SRE团队,是国内成长最快、发展最好的SRE团队之一。他们不仅肩负起了华为云业务体系的运维确定性,同时还为行业带来了充沛的溢出价值。
今天,我们走进华为云SRE,去了解一个运维人从消防员变成建筑师的故事,一个如何成为“云上的米开朗基罗”的故事。
SRE,即Site Reliability Engineering,站点可用性工程师。这个概念起源于2003年,主要针对传统IT运维中人工为主的操作模式,希望以整体设计、自动化工具取而代之。简单来说,SRE的核心就是用软件而非人工,来解决运维与安全问题。
当时代的钟摆悄悄回荡,SRE的价值愈发凸显了出来。因为在不经然中,我们已经来到了一个不确定性叠加的云纪元。
一个全云化的业务与服务系统,究竟会面临多少安全问题?可能谁也无法给出精准答案。网络异常、软件故障、流量洪峰、硬件老化、机房断电,都可能带来一次运维问题。甚至一次技术人员的岗位调换,都可能造成意想不到的考验。
而伴随着云原生的落地,云上承载的软件开发与业务上新更加频繁。增加新的业务模块,也将考验现网的稳定性与可靠性。随着云上软件开发与业务迭代成为常态,运维效率会成为考验运维团队与运维能力的最大难题。
另一个云时代的不确定性,来自云计算网络急速发展。随着现网规模的不断壮大,云服务体系连接的计算节点、用户节点都在不断增多,同时参加运维的人员规模也在不断增加。这种网络规模扩张,让运维不确定性呈现出几何级增长。传统意义上“头疼医头,脚疼医脚”的运维模式,将难以抵御网络规模的海量冲击。
这种情况下,就需要有一种工程性的方法,可以在承认这种不确定性的前提下,依旧能够保障云服务体系的稳定可靠。比如说,让运维能力参与到前端设计中来;强化运行中的动态风险治理;建设高可用,可用容纳故障与风险的业务架构——这些方法的统合,就是SRE。
或许可以这样理解,SRE就像是在充满不确定性的云时代,画上一张确定性的建筑图纸。它不是具体解决哪个运维安全问题,而是带来宏观的安全与可靠。
华为云SRE,就是看到了这种必然趋势,同时积极进行了尝试与探索。
未来,云计算将会像水、电一样触手可及,随取随得。这个结论可以推导出一个必然:云计算体系,必须像电网、水网一样安全可靠。如今,我们再也不会常备蜡烛,预防停电。这背后的努力,是电网进行了大量运维工作来保障高可用——云计算也将如此。
在华为云的眼中,这个结论清晰可见。于是华为云自成立的那一天起,就成立了SRE团队。SRE负责维护华为云的整体质量,看护整个云计算网络的安全与稳定运行。
(在新华社智库《中国云计算创新活力报告》中,华为云斩获安全可靠能力排名第一)
如今,华为云SRE这位建筑师,已经用双手画出了一张宏伟的“确定性”建筑图纸。在全球范围内,支撑着华为云在全球170多个国家和地区,超过240个云服务、370万开发者和海量企业业务,以及百万级别的节点实例。这样庞大的业务蓝图,都需要SRE团队统一参与开发与部署规范,确保上线运维安全。
在这个过程中,华为云SRE的“看家法宝”,就是构筑了华为云的高可用架构,让云服务在产品开发的前端就具备高可靠、高可用特性。整体而言,高可用结构在应对故障时可分为三个维度考量:首先是软件具有确定性的失效率,确保不会频繁发生故障,将软件问题控制在一定范围之内;其次是给出确定性的恢复时长,明确可以在怎样的时间之内进行业务恢复;接下来是构筑确定性的爆炸半径,确保单点的故障扩散范围有限,只影响到很小的范围,而不影响整体业务。
在这样的架构下,最终华为云SRE实现了将可靠性、可恢复性、影响范围控制的特性全面融入,真正面向万千企业提供安全、可靠、高质量的服务承诺。从实际结果来看,在近几年华为云业务高速发展的同时,其出现的故障概率与故障烈度显著低于全球主流云厂商。或许可以说,华为云SRE的运维能力做到了与公司业务规模一同成长,甚至先一步成长。
我们知道,数字化技术会在发展到一定程度时,出现明显的“溢出”效应。比如说数字化价值赋能,就从虚拟经济溢出到实体经济,带来了“数实融合”的发展契机。
对于华为云SRE“建筑师”们而言,其也在云上运维的探索上展现出了明显的“溢出”效应。
华为云SRE的基础价值,就是通过确保华为云服务与网络的稳定,带给客户更好、更优质的云体验,尤其是在Devops 的场景下,保障了华为云用户敏捷创新、快速迭代的开发模式。让用户不仅能够上云,还可以有质量地用云、有保障地用好云。
再向前走一步,华为云SRE通过服务客户与无数应用的经验总结,提出了“确定性运维”的发展方向与方法论,继而梳理出适用于云上业务的“确定性运维”能力体系和成熟度模型,供千行百业的企业进行参考。
这一业界独有“确定性运维”能力体系成熟度模型包含:第一级基本运维,即基础运维的能力构建,以此确保业务基本生存;第二级标准化运维,其能够将运维带到更加规律、规范的发展阶段,确保业务的稳定可靠;第三级SRE转型,意味着运维团队开始从“消防员”转型为“建筑师”,开始勾勒整体的确定性运维蓝图;在第四级,企业获得SRE带来的初步确定性,而到第五级企业将获得高度确定性。
在可见的未来,大部分企业都会上云,每一家企业都需要开发、运营软件的时代里,确定性运维可以说是一种刚性需求。即使每家企业的业务诉求与业务种类不同,但对稳定可靠的追求其实是高度统一的。
面向这一趋势,华为云SRE的一系列自我成长,都可以变成赋能万千企业的成熟价值。比如,通过智能运维工具提升组织的效率和可靠性;通过全质量管理的流程理念,形成组织人员管理的可控性;运维团队变成设计师,参与前端标准设计,构筑高可用架构。
这些由华为云SRE综合和探索出的技术与方法,或许是每一家企业的决策者、管理者,都应该看到的现实价值。
在全云化纪元,每家企业都需要运维能力的提升,那或许每家企业也都可以成为“云上的米开朗基罗”。SRE的核心文化,依旧需要各界携手去探索和发扬。但就像运维所需的确定性那样,SRE探索对每家企业的未来价值来说,也是充满确定性的。
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
例如,假设我有一个名为Products的模型,并且在ProductsController中,我有以下代码用于product_listView以显示已排序的产品。@products=Product.order(params[:order_by])让我们想象一下,在product_listView中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。我很难理解的是,每次用户选择新的order_by过滤器时,rails是否必须查询,或者rails是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时rails不会重新查询结果
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭7年前。Improvethisquestion我找到的大多数库/代码都是针对RoR而不是纯ruby。即使我在谷歌上搜索纯ruby图片上传,我也会得到PureRubyOnRails;)所以...我正在寻找一个gem/library/code来做一些简单的事情:检查它是否是一个有效的图像文件将图像调整为预定义的值将其保存为jpg(来自jpeg、jpg、png、gif、bmp)
你好,Stackoverflow的人们,我经营一个网站,为用户寻找最便宜的书籍购买地点。这对于单本书来说很容易,但对于多本书来说,有时在一家商店购买一本书而在另一家商店购买另一本书会更便宜。目前我找到了销售用户列表中所有书籍的最便宜的商店,但我想要一个更智能的系统。这里有更多信息:一本书的价格对于一家商店来说是不变的。运费可能会有所不同,具体取决于书籍的数量或书籍的总值(value)。每个商店对象都可以获取一组书籍并返回运费。通常,并非每家书店都出售每一本书。不确定在这里链接到我的站点是否很酷,但它列在我的用户配置文件中。我希望能够找到最便宜的商店和书籍组合。我担心这需要一种蛮力方法-
这个有效:f=File.new("myfile").readlinesf[0]#=>"line1"f[21]#=>"line22"但是如果我有一个非常大的文件,并且只需要读取几行怎么办?是否可以在不将文件加载到数组的情况下查找特定行并在Ruby中读取它们?我理解IO流,其中(就像在stdin的情况下)您不能随机搜索流。当然,必须有一种方法可以在不加载整个文件的情况下执行此操作。 最佳答案 不要忽略IO类。IO::foreach是返回枚举器的方法之一,可以延迟计算。IO#each_line也是将返回枚举器的另一个。在Ruby2.0中,
我尝试这样做。不幸的是,我在覆盖更新方面遇到了问题,我不知道如何正确地做到这一点。我在另一个地方这样做的方式是:ifparams[:user][:password].blank?params[:user].delete("password")params[:user].delete("password_confirmation")end#...user.save!所以我尝试重写updatedefupdateifparams[:user][:password].blank?params[:user].delete("password")params[:user].delete("pass
在C#中,您可以这样做:publicIEnumerableGetItems(){for(inti=0;i这将返回一个包含1000万个整数的可枚举序列,而无需在该长度的内存中分配一个集合。有没有一种方法可以在Ruby中做同样的事情?我要处理的具体示例是将矩形数组展平为要枚举的值序列。返回值不必是Array或Set,而是某种只能按顺序而不是索引迭代/枚举的序列。因此,整个序列不需要同时分配到内存中。在.NET中,这是IEnumerable和IEnumerable.对Ruby世界中此处使用的术语的任何澄清都会有所帮助,因为我更熟悉.NET术语。编辑也许我最初的问题还不够清楚——我认为yiel
我正在寻找FaradayMiddleware的示例,它可以处理请求中的http(状态代码)错误以及网络超时。在阅读了Faraday及其中间件的文档后,我了解到这是中间件的用例之一……我只是不知道实现应该是什么样子。谢谢 最佳答案 Faraday默认有一个错误处理中间件:faraday.useFaraday::Response::RaiseError例如:require'faraday'conn=Faraday.new('https://github.com/')do|c|c.useFaraday::Response::RaiseEr
我正在尝试构建自己的gem,但出现了该错误。我认为这是因为我更改了gemspec的文件名的原因。首先这是我的结构:myapp/my-app.gemspecdocumentation.docx//otherfiles然后我更改了名称并移动了如下文件:myapp/new-name.gemspecdoc/documentation.docx//otherfiles注意:我已经更改了所有代码,包括lib以适应新名称然后,当我运行gembuildnew-name.gemspec时,我得到了这个错误:ERROR:Whileexecutinggem...(Gem::InvalidSpecificat
如果您在以root身份登录时从命令行运行rubybundler,您会收到以下警告:Don'trunBundlerasroot.Bundlercanaskforsudoifitisneeded,andinstallingyourbundleasrootwillbreakthisapplicationforallnon-rootusersonthismachine.以root身份运行bundler对它安装的gem有什么确切的区别?是否与它为每个gem安装的实际文件的权限有关?Ruby会尝试以非root用户身份访问gem文件吗(如果是,Ruby会使用哪个用户/组,我将如何找到)?如果应用