设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 数据 手机 公司
当前位置: 首页 > 服务器 > 安全 > 正文

DevOps 能力模型、演进及案例剖析

发布时间:2021-01-06 18:24 所属栏目:53 来源:网络整理
导读:《DevOps 能力模型、演进及案例剖析》要点: 本文介绍了DevOps 能力模型、演进及案例剖析,希望对您有用。如果有疑问,可以联系我们。 作者介绍 王晓伟 2009年创办麦图科技,专注于电商行业的垂直搜索,受到多家天使、Pre-A投资机构的关注. 有10+年互联网、游

《DevOps 能力模型、演进及案例剖析》要点:
本文介绍了DevOps 能力模型、演进及案例剖析,希望对您有用。如果有疑问,可以联系我们。

作者介绍

王晓伟

2009年创办麦图科技,专注于电商行业的垂直搜索,受到多家天使、Pre-A投资机构的关注.
有10+年互联网、游戏、内核安全从业经验.历任软件工程师、高级软件工程师、技术经理和总监.
目前主要从事手机游戏发行平台的构建,推进公司DevOps的培养和运维自动化的实施.

主题简介

本次分享主要分为两部分:

  • 第一部分引入运维工程师的能力理论定义;
  • 第二部分介绍DevOps的能力模型,其中引用了第一部分的定义.

部分内容可能形而上学,所以带好枕头被褥,困了就眯一会儿,后面有点小精彩.

引言

运维工作是实践性的学科和工作,即便没有高深的理论也可以开展工作,继而从事这个工作的朋友不缺乏实际动手的能力.

但从事物的发展规律性和普遍性来看,从实践出发的Ops恰恰缺乏必要的理论指导和思想探究.

本文是我对运维工作的理论、思考和定义的总结,同时给出DevOps相关概念的定义,明确其工作范畴,能力要求,产出标准以及演进建议.一家之言尚未完善,抛砖引玉,欢迎讨论.

从一次面试开始

问题1

问:如何通过Python或者Shell给Nginx添加/删除一个虚拟站点?
答:通过Python或者Shell在nginx.conf里添加server区块,然后如何如何……

问题2

问:如何使用Python将文本日志结构化
答:通过python的os.system调用awk.(哭,韩国的整容术用到运维上了,给awk整成python……)

这是最近真实的面试案例.上述两个问题的回答,让我很不开心:

  • 问题1的回答,说明面试者不具备运维的工程能力,更不具备架构能力;
  • 问题2的回答,说明面试者不具备程序的架构能力,甚至对语言理解和标准库的学习都不到位.

从案例里我总结了两个核心的定义:工程能力和架构能力.下面先给出这两个定义.

工程能力当然是运维工!程!师所必需具备的.我对工程能力的定义是:

  1. 分解问题的能力;
  2. 定义执行序列的能力;
  3. 制定可重入操作行为的能力.

架构能力,本人解释为:

  • 懂“不该”懂的;
  • 想“不该”想的;
  • 做“不该”做的.

比如程序猿懂了业务,想了部署,做了高可用的规划应该算得上架构狮了.

1. 分解问题的能力

针对问题1的分解逻辑如下:

  1. nginx是如何管理虚拟站点的,是否具有模块化能力?
  2. 在具有模块能力的情况下,如何实现虚拟站点模块的添加?
  3. 如何定义规则来命名虚拟站点,以保证可重入,在规则不变的情况不会再重复添加(还要支持upstream等等)?
  4. python要实现什么样的功能,shell要完成什么样的工作?
  5. 添加完成后,如何验证其生效?
  6. 删除的行为是否要彻底删除配置文件,抑或者留一个副本?

2. 定义执行序列的能力

有些操作是高危操作或者是不可逆的,比如修改sudoers文件.在基于sudo管理的系统下,如果一旦sudoers被改坏是灾难性的.因此定义执行序列是:

  1. 在 Terminal下开一个窗口切换到root下;
  2. 在另外的窗口下进行对sudoers/sudoers.d的修改或者添加;
  3. 一旦试验过程中sudoers被改坏,可以用root账户直接改回来;
  4. 以上流程虽然简单,但是这跟飞机起飞前拔掉起落架的闩是一样致命的.

3. 制定可重入操作的能力

系统的管理和系统的状态的获取是两个不同方向的工作:

管理是把指令传递给系统,修改系统的状态和信息;查看系统的状态是从系统获取信息.

这两个不同向的操作行为就导致了状态和信息同步的问题.解决这个问题的方法有很多,但是稳定可靠,兼容性好的方法不多,我的方法是保证操作的可重入性.

即在同等的条件下,对于系统发出的指令,执行n+1次(n>0)的效果是相同的.

这样,即便我可能知道系统状态和信息是不一致的,但是由于操作行为是可重入的,我可以最终把状态和信息一致化.

以上展开了工程能力的解释.

由于架构能力涉及面广,交叉学科众多,此处暂不作展开说明.

DevOps的能力模型

我们先介绍相关能力模型:操作系统能力模型和应用系统能力模型,然后再由此引出DevOps能力模型.

操作系统能力模型

除操作系统核心提供的基本功能外,还给我们提供了以下功能(以Linux为例):

  1. 访问控制,实现基于角色的最小粒度访问控制,此为系统管理的基础,能力模型的关键之一;
  2. 权利托管,基于角色和命令的可配置授权机制,提供了可控的,可定制的提权的方案;
  3. 导入式的可插拔配置能力(通过类include指令),比如 /etc/security/limits.d,/etc/sudoers.d,此为自动化重要设施;
  4. 包管理能力,包括二进制和源码包的依赖管理等;
  5. shell编程的支持.

应用系统能力模型

除操作系统能力模型提供的功能之外,还给我们提供了以下功能:

  1. 导入式配置能力,如nginx的 /etc/nginx/sites-available/;
  2. 系统状态侦测能力,如php-fpm的ping/pong;
  3. 热装载能力,例如很多服务的reload功能;
  4. 高可用性以及故障恢复能力,例如MySQL的高可用配置,以及其binlog的恢复能力;
    5,其他必要特性,视不同的业务系统而定.

DevOps能力模型

由此,我们给出DevOps能力模型的定义:

  1. 了解其所管理的操作系统的能力模型(Linux,Windows),掌握系统编程语言(Shell)并能利用其能力用于DevOps工作;
  2. 了解其管理的应用系统的能力模型(Mysql,Nginx等),掌握系统编程语言(Shell)并能利用其能力用于DevOps工作;
  3. 具备前文提到的工程能力,掌握系统编程语言(Shell)和通用语言(Python/Ruby等),并能利用其编程能力将工程能力提到三种能力程序化,并进一步实现自动化;
  4. 了解工作场景和业务场景,以及业务的关键指标,使DevOps工作有的放矢,贴近业务.

评估DevOps是否合格的标准:

  1. 具备DevOps能力模型提到的各项要求;
  2. 其产出的代码脚本能够适应普遍需求,并且该代码脚本符合前文的可重入要求,即执行n和n+1次的效果相同;
  3. 其产出的代码脚本能够供其他代码脚本使用,此条尤为重要.

DevOps的级别:

符合DevOps能力模型1:为初级DevOps,可以使用shell做DevOps的一般性系统级别的工作,在一些第三方工具(Ansible/Fabric)的帮助下管理大量服务器;

符合DevOps能力模型2:为中级DevOps,可以使用shell做DevOps的应用系统的部署和优化工作,并能通过其产出的脚本大批量管理应用系统

符合DevOps能力模型3:为高级DevOps,可以使用shell和通用语言进行广泛的DevOps的工作,可以完成完整的业务流程的定义和开发,能够熟练抽象并编写供其他DevOps使用的接口.

符合DevOps能力模型4:为架构师级别的DevOps,根据业务需求,规划系统部署架构;根据业务指标要求优化部署结构和性能,保证高可用等;定义脚本代码接口,制定开发规范和操作规范.

理论的东西说完了,下面是探讨下Dev和Ops的现状,Ops的演进,Dev的演进以及三项补充内容.

Dev和Ops的现状

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读