
编者按:本文源自阿里云云效团队出品的《阿里巴巴DevOps实践指南》,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电子书,了解阿里十年DevOps实践经验。
阿里巴巴的运维体系经历了脚本时代、工具时代和 DevOps 时代,目前正在实现自动化运维并探索智能化运维阶段。在 2008-2009 年,阿里巴巴的运维还处于脚本时代,大量的运维工作需要通过脚本来实现。随着业务规模扩大和复杂度的提高,脚本的方式越来越难以维护,因此阿里巴巴开始引入运维工具。在运维工具时代,阿里巴巴的运维体系经历了:从工具团队和运维团队并行的阶段,到为了更好地保障工具质量统一的工具团队阶段,再到逐渐有 DevOps 思想和职能的偏软件的工具团队阶段。最后,阿里巴巴应用运维团队迎来了一场大变革,以前的应用运维团队全被打散,合并到各业务的软件开发团队中去,全面践行 DevOps 思想。

进入 DevOps 阶段后,成熟的流程化运维工具虽然提升了一部分运维效率,但是各个工具之间实际是独立割裂的,例如监控工具和运维工具是割裂的,巡检工具和快恢工具也是割裂的,这导致日常应用持续运维过程中,从监控发现、定位并快速恢复问题的链路很长而且低效。对运维开发来说,期望的状态是业务应用上线后可以“No Ops”,监控及运维系统能自行发现异常并自动解决,把应用及业务带回正常状态,处理结束后,发一个消息通知下即可。 朝着“No Ops”方向努力,阿里巴巴应用运维开始了“监管控一体化”的体系建设。
随着阿里巴巴业务的持续发展及技术架构地不断演进,新的场景和问题不断出现,这些都给以应用为中心的监控运维带来了新的挑战。
阿里巴巴不但拥有众多形态各异的业务,而且体量大,特别是每年天猫双 11 大促,需要超大规模的 IAAS 资源支撑。2015 年之前,阿里巴巴每年都要花费巨额费用来购买服务器,建设一代又一代的 IDC 数据中心;2015 年至 2019 年,阿里巴巴走向全面云化的过程。在这个时期,阿里巴巴的基础设施一部分在云下数据中心,另一部分在阿里云上的数据中心,还需要支持同城多活到异地多活,所以必须要有强大的云上云下一体化超大规模资源管理的能力;2019 年阿里巴巴实现全面云化之后,又开始面对一个新的超大规模资源管理场景:混合云。
业务发展瞬息万变,特别是公司的重要业务,迭代变更的速度非常快。在超大规模集群管理的前提下,为了保障业务的连续性和快速迭代,我们需要有能力持续高效地对应用进行发布、部署、变配等运维变更。这也就是 DevOps 的持续运维领域要去解决的问题。
安全性是任何行业的基础,在 IT 运维领域更是如此。系统宕机、数据异常、数据丢失、删库跑路等运维故障和事件层出不穷,这可能给企业带来致命的打击,甚至关乎业务的生死存亡。因此,防范和杜绝高危运维故障是 DevOps 一直不懈追求的目标。在当代众多业务形态和云技术架构下,如何保障企业 IT 运维的安全运行至关重要。
在阿里巴巴传统的监控和运维模式下,应用的运维开发需要在监控系统上配置一些监控项和预警规则。当监控项触发预警规则时,运维开发会收到预警通知。紧接着运维开发需要打开电脑,在运维工具平台上创建相应的处理工单。当运维系统工单执行完成后,运维开发要持续观察监控项是否回归正常。若遇到节假日或休假期间接到预警通知,不能及时上线查看情况时还需要联系团队其他同学上线处理;若在半夜睡梦中接到预警通知,需要立马清醒下自己的大脑,打开电脑上线处理。整个预警异常处理过程持续时间较长,并且需要人为参与的工作很多,人力成本大,这使得运维开发的工作幸福感很低。
另一方面,随着业务地不断发展,系统也在不断增加,监控项和预警也急速增多,慢慢地运维开发就会对预警信息变得麻木或轻视,容易错失一些重要的报警信息,进而导致线上业务故障。近年来,淘宝直播、盒马线下门店、饿了么外卖、钉钉在线教育等新业务形态蓬勃发展,这些业务基本上对生产故障都是零容忍,原来系统最佳的 99.99%可用性已经不能满足新业务的要求,而传统的监控、运维各自为战、单打独斗的模式更无法满足新业务 100%业务连续性的要求。
为了保证生产业务的连续运行,提高业务系统从异常预警到异常恢复的整体效率,解放人力成本的同时又能确保安全,我们考虑将监控预警和运维执行联动起来,视为一体,从而实现异常自动发现、自动快速定位以及自动快速恢复的目的,达到一种“No Ops”状态的应用运维。
在应用监管控一体化建设之前,传统的监控和运维是分开的状态,运维开发想要在应用迭代变更期间关注系统运行态势,需要事前在监控平台上定义和配置好这些应用所要关注的各项指标。在应用变更期间需要不断主动查看应用监控指标的变化,或者为每个指标设置预警规则,通过订阅接收配置好的监控报警来及时获取应用的运行异常。当应用变更出现异常报警后,运维开发需要看监控、应用日志、应用调用链路等信息分析异常原因,决策需要到运维平台上执行什么任务才能恢复,最后验证任务执行结果是否符合预期。因此,明确需求->配置监控指标和报警->分析异常原因->决策处理方式->执行任务->验证执行结果,整个过程都需要运维开发的介入。


以保障业务持续性为源动力,在逐步推进监管控一体化建设过程中,阿里巴巴从实战经验沉淀出一套业务系统安全工程标准,实现了业务异常故障提前发现、自动定位、快速恢复地自动联动,在监控、运维、安全防护领域探索出了多样化的解决方案。
在推进 DevOps 的过程中,我们要求的底线是不能对既有的现状带来更多不可控的因素,特别是高危场景的防护,不能因为运维工作移交到运维开发人员而造成全局系统性风险,因此安全防护方案孕育而生。
监控是运维的基础,传统的资源监控或者应用监控模式已经不能满足运维开发快速发现生产故障的需求。基于阿里的大规模实践,我们发展出了以应用为中心,从上层业务到 PaaS 直至底层资源的全链路监控解决方案,为业务异常发现和定位提供了强有力的支撑。
为了实现监管控一体化,促进业务异常能快速自动恢复,应用运维从原来的单事件执行模式,探索出以应用为中心的可编排运维、智能化运维、ChatOps 等运维模式,打开运维领域新视角。
阿里巴巴应用运维监管控一体化的建设随着业务形态和技术架构还在不断地探索和发展,本文主要介绍了应用运维监管控一体化建设的背景和思路。我们以应用为中心,从应用监控管角度出发,通过全视角监控实时掌握应用的运行状态,通过高效发布部署和灵活的运维编排对应用进行安全变更,通过智能化运维和安全防护实现应用的高级防护,我们将在下面的章节为你详细展开。
【关于云效】
云效,云原生时代一站式BizDevOps平台,支持公共云、专有云和混合云多种部署形态,通过云原生新技术和研发新模式,助力创新创业和数字化转型企业快速实现研发敏捷和组织敏捷,打造“双敏”组织,实现 10 倍效能提升。

很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin
我安装了ruby、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom
如果我构建了一个应用程序来访问来自Gmail、Twitter和Facebook的一些数据,并且我希望用户只需输入一次他们的身份验证信息,并且在几天或几周后重置,那会怎样是在Ruby中动态执行此操作的最佳方法吗?我看到很多人只是拥有他们客户/用户凭证的配置文件,如下所示:gmail_account:username:myClientpassword:myClientsPassword这看起来a)非常不安全,b)如果我想为成千上万的用户存储此类信息,它就无法工作。推荐的方法是什么?我希望能够在这些服务之上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。