运维前线:一线运维专家的运维方法、技巧与实践1.4 运维自动化的多维解读

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

1.4 运维自动化的多维解读


1.4.1 基于应用变更场景的维度划分

我们曾经探讨过,所有运维的价值导向最终都是面向业务、面向用户,所以自然而然就需要从业务的维度进行划分。而运维是有很多种场景的,但从业务的角度来说,核心的业务场景一般就包括如下5种:业务上线、业务下线、业务扩容、业务缩容和应用升级。下面将以其中一种场景为例,将整个流程穿起来看看,以此识别流程的节点到底对接了哪些系统?针对其他的业务场景,我们也可以用同类的方法进行分析。首先预设业务的架构如图1-2所示。

 

图1-2 业务架构示例图

(1)业务上线。表示上线一个完整的应用。从无到有部署整个业务上线,具体的流程如图1-3所示。

仔细看图1-3中所示的流程,我们会发现该流程涉及多个系统,每个系统所完成的职能又都有不同,这里只是大概地描述了一下。但一旦将这个流程清晰地梳理出来,我们就能知道真正地将一个应用全部上线到底有多复杂了。但看完图1-3又会觉得其实比较简单了,因为从业务上线的流程来看,我们只需要一个上层的流程调度引擎再加上对应的执行器,执行

 

图1-3 业务上线流程

器通过API和底层的各个系统对接即可。这也是为什么之前在框架图(图1-2)中,要求各个专业系统一定要向上提供API,并且要求这个API的风格必须是一致的。

最复杂的业务上线流程梳理完成之后,业务下线其实很简单,它是上线过程的逆过程,上线负责装,下线负责拆。

业务上线之后,随着用户活跃度的上升,业务的容量逐渐会出现不足的情况,此时就需要进行业务扩容。业务扩容其实很简单,当某类节点出现不足的时候,就对它进行扩容。业务扩容所要做的变更,其实都是业务上线的子流程。比如说如果Web层容量不够,那就申请机器,安装组件、下发应用包,进行自动化测试。这个时候需要注意的是:在业务上线的过程中,我们把很多的配置信息都下放到CMDB中了,因此我们在选择扩容的时候,就要从CMDB中把信息读取出来,以指导变更。

应用升级,目前持续集成所讲的自动化都集中在这块。简单来讲,就是升级程序包、升级配置、执行额外的指令等,一般来说逃脱不了这几种模式。读者可能会问,如果正如你所说的这么简单,那么是不是将SSH封装成一个UI就可以了。当然不是,这个时候还需要你以对运维的理解,在底层进行一些标准化的工作,否则你提供的就只是一个工具,而完全没有运维的思路,比如说程序运行属主、运行路径、监控的策略等。另外建设应用发布平台的目的就是要让测试和生产环境的运维变得更可控。

以上几个运维场景的自动化是否要一次性全部做完呢?当然不是,它们也是有先后和主次之分的。对于以上的运维场景,我在当前所负责的游戏运维中做过统计,数据如图1-4所示。

 

图1-4 持续部署的数量

(2)持续部署的数量,一个月2000次左右。

(3)其他场景的分布情况。一个月上线一次、下线两次、扩容一次左右。

有了这个数据,我们在建设一个自动化系统的时候,就能意识到应该先做什么后做什么。当然,不同的企业有不同的实际情况,还是应该找到核心痛点,而不是一上来就建设完整的业务变更系统,那样不仅见效不快,且容易让项目收益不大,从而遇到很大的阻力。

1.4.2 基于系统层次的维度划分

首先来看下系统层次的维度划分,如图1-5所示。

 

图1-5 基于系统层次的维度划分

给出如图1-5所示的分层体系图,其实就是为了让大家更好地识别系统的职责和范围,下层干上层的活,或者上层干下层的活都是越界,越界将带来耦合的问题。举个例子,系统服务层由Puppet(或者Chef)配置管理,但网上的很多资料都说Puppet可以用来做发布,也就是说可以做应用服务层的事情。后来我看过几家用Puppet来做应用服务层发布的公司,最后都走不下去,因为应用包的需求变化太大,只靠Puppet编写factor的模式来适应所有的场景,基本上是不可能的,所以说Puppet适合的是系统服务层配置管理。以上所举的例子就是一种越界!

1.4.3 基于与业务程序耦合紧密程度的维度划分

基于与业务程序耦合紧密程度的维度划分,这点非常重要,这个划分其实是确定系统建设的Owner,从而避免让运维团队承担过多的系统建设职能,否则将会导致运维能力提升缓慢。那么应该如何判断与业务程序耦合的紧密程度呢?我的准则非常简单,线上程序直接调用的就是紧耦合,或者由研发主导的公共服务,类似于API/SDK类的后端服务,应该由测试来主导系统建设;有些服务与程序不是直接关联的,或者是由运维牵头建设的,则由运维来主导,例如LVS、DNS服务等。

有这样一种情况,在很多应用程序中,DNS和LVS服务也存在于程序调用链中,怎么办?在我的方案中,绝对不允许内部服务走DNS和LVS。我们都知道DNS和LVS的服务对于服务异常的处理(DNS无状态、LVS是七层能力弱),远远达不到线上服务的要求,所以要坚决拒绝。如果真的有人要使用DNS和LVS,那么第一告诉他们业务的风险;第二,发生故障的时候,需要让研发参与处理。另外这也是系统的边界没划分清楚的问题,是让运维组件去承担业务上应该具备的容灾容错功能,这会令后面的运维系统建设增加很多不必要的功能。

1.4.4 面向服务的自动化能力划分

运维最终是需要对外提供服务的,这些服务能力应该由很多底层的自动化平台来承载,个人对其能力划分如下,其实细分到每一层都将发现自动化无处不在,而服务化的能力其实是自动化平台的核心能力,能力划分具体如图1-6所示。

 

图1-6 自动化平台

1.?运营能力层

运营能力可体现IT运营价值,把IT的运营价值和业务场景紧密联系在一起,这些场景和之前所谈的运营价值体系(质量、成本、效率和安全)是一致的。在运维发展的不同阶段,IT系统的运营价值体现会有所不同,IT运营的核心方法是要有迭代式的思维。

对于很多企业来说,自动化提升效率是运维的第一个价值突破点;再往后,业务的高可用保证和成本控制,则是下一个价值方向;再之后,精细化运营的业务支撑则是更高的诉求,类似于质量要求(质量的概念非常宽泛)。越往后,越能凸显数据的价值,而非自动化工具的价值。因此我个人觉得在某一个阶段,自动化平台突破之后,主要的瓶颈将不是效率,而是数据化IT运营的能力。该能力在依赖平台的同时,更依赖于运维团队的业务理解能力和经验总结。数据化运营能力是精细化的运营能力,是面向产品的,从底层的基础设施质量、到应用的访问体验、再到产品发布后的用户满意度,等等。

这一层的能力表现为一个具体的产品形式+运营方法,从而可以确保能够很好地闭环起来。举个例子来说:基于资源容量管理的成本优化能力,首先需要一个贴合面向应用的容量分析模型,现实中一般是通过应用所消耗的资源(CPU、内存、I/O、网络等)进行分析运算;其次是需要通过IT运营分析产品来呈现应用的容量水平(当前、历史等);基于可视化的数据呈现,建立相应的容量管理机制。这里又分为如下三点:

(1)建立标准。低负载需要提升资源使用容量、高负载则需要扩容资源(降低资源使用容量)。

(2)明确责任人和职责。确定容量管理的负责人,可以按照应用的粒度进行划分,同时还要明确这部分的管理要求,对于大规模服务来说,可以借用考核的工具来进行驱动。

(3)结果驱动。通过定时的结果可视化来驱动容量管理的持续优化。

2.?平台能力层

一个完整的运维平台应具有以下特点:

其能力是集成的,而非离散的——平台需要提供很好的集成能力,让系统得到收敛,避免将系统分割成单个的执行单元,用户也会为此痛苦不堪。

其能力是场景化的,而非基于功能需求的——场景能够串联工具。

其能力是基于角色的,而非基于单一用户的——运维的角色能够清晰地定义场景需求,用户的需求往往是片面而不真实的需求。

其能力是基于事务的,而非基于职能的——事务能够跨越职能组,让运维组织的自动化和数据能力流动起来。

平台能力是指基于底层平台构建起来的具有的运维自动化/数据化(监控+分析)/安全的能力,这层能力实现了底层能力的组合与封装,屏蔽了底层各个专业子平台的实现细节,是面向业务运维场景的,比如说应用交付、资源交付、业务交付、持续反馈等。

3.?通用能力层

通用能力层是基于基础设施之上封装的公共服务能力,这层架构的能力可分成两个部分:一部分是面向业务技术架构的,另一部分是面向运维服务架构的。图1-6中所列的服务只是其中的一部分,这个也是我经常和交流者强调的能力建设的核心,不能把这个问题留给下面的资源能力层,也不能交给上层的平台能力层。

对于线上技术架构来说,通用能力层将会涉及名字服务、负载均衡服务、分布式缓存、消息队列、分布式关系存储等,运维需要对其技术实现的工作人员要求API直接调用的服务能力。

对于运维服务来说,通用能力层提供了资源服务、作业服务、部署服务、F5管理、GSLB等。这层的平台能力我一直将其理解成是PaaS平台的核心,有了它们其实就可以实现端到端的能力调度。

该层服务能力平台可以很好地对上层平台进行积木式的支撑,同时还可以对底层设施层能力做服务化能力交付,脱离了资源交付的范畴。

4.?基础设施层

基础设施层是资源交付层,对于一个运维系统来说,应该屏蔽底层基础设施的交付能力,无论是IaaS,还是物理层基础设施。尤其是对于一些IaaS云平台来说,更应该屏蔽IaaS底层实现的细节差异,通过API服务向上提供能力。国外早年就有了同类的产品,如RightScale,它很好地实现了多云管理的能力。

相关文章
|
3天前
|
运维 Kubernetes 网络协议
运维之道:从新手到专家的成长之路
【10月更文挑战第21天】 本文旨在探讨运维领域的成长路径,通过分享个人经历和行业见解,为读者提供一条从入门到精通的清晰路线图。我们将从基础技能的学习开始,逐步深入到高级技巧的应用,最终达到专业水平的提升。文章强调了持续学习和实践的重要性,并鼓励读者在面对挑战时保持积极态度,不断探索未知领域。
15 6
|
5天前
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
2天前
|
运维 Kubernetes 网络协议
运维之道:从新手到专家的成长路径
【10月更文挑战第22天】 本文将探讨运维领域内,个人如何从一名初学者成长为行业专家的过程。通过分析学习路线、必备技能、实践经验积累以及持续学习的重要性,旨在为那些渴望在IT运维领域取得成就的人提供指导和启发。
|
2天前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。
|
5天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
|
6天前
|
SQL Java 数据库
Spring Boot与Flyway:数据库版本控制的自动化实践
【10月更文挑战第19天】 在软件开发中,数据库的版本控制是一个至关重要的环节,它确保了数据库结构的一致性和项目的顺利迭代。Spring Boot结合Flyway提供了一种自动化的数据库版本控制解决方案,极大地简化了数据库迁移管理。本文将详细介绍如何使用Spring Boot和Flyway实现数据库版本的自动化控制。
9 2
|
23小时前
|
机器学习/深度学习 运维 Kubernetes
运维之道:从新手到专家的转变
【10月更文挑战第24天】 本文旨在探讨运维人员如何从初学者成长为领域专家,通过分析运维行业的现状、面临的挑战以及必备技能,提供一系列实用的建议和策略。文章强调了持续学习、实践经验积累和技术趋势把握的重要性,并结合具体案例,展示了运维专家的成长路径。
|
1天前
|
运维 Prometheus 监控
运维之道:从新手到专家的旅程
【10月更文挑战第24天】 在数字化时代,运维工作如同一座桥梁,连接着技术与业务,确保系统的稳定运行。本文将带你踏上一段从运维新手成长为专家的旅程,探索运维的核心价值、技能提升路径以及面对挑战时的应对策略。通过深入浅出的语言和生动的案例,让你领略运维世界的奥秘与魅力。
5 0
|
4天前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
6天前
|
运维 监控 网络协议
运维的艺术:从新手到专家的旅程
在数字化时代,运维(Operation)是确保技术系统稳定运行的关键角色。本文将探讨运维的核心职责、面临的挑战以及如何通过持续学习和实践成长为一名出色的运维专家。我们将深入了解自动化工具的应用、故障排查技巧和性能优化策略,这些都是运维人员必须掌握的技能。此外,文章还将讨论软技能的重要性,如沟通协调能力和团队合作精神,这些对于处理紧急情况和提升工作效率至关重要。最后,我们将分享一些实用的资源和建议,帮助读者在运维领域取得成功。