特别说明

本文是已读书籍的学习笔记和内容摘要,原文内容有少部分改动,并添加一些相关信息,但总体不影响原文表达。

《DevOps入门与实践》 :本书结合实例详细介绍了在开发现场引入DevOps的具体流程。

个人简评

适合已有实践经验的实施人员,对已有知识和技能做结构性梳理。

适合对DevOps欠缺了解的人员,能够建立起基本的概念。

但由于外文书籍翻译引入与中文出版存在时间差,导致书中涉及的一些工具和方法,落后于当前主流应用场景。


如何以DevOps为中心对架构进行变革,成功实施DevOps?

DevOps核心要素

  • 土壤---》组织---》人员的构建与培养
  • 思想---》文化---》意识的形成
  • 方法---》流程---》规则的建立
  • 工具---》操作与配置---》自动化、智能化的演进

1 - 应用程序

1.1 借鉴已有的实践模式

在DevOps土壤上,将当前业务与DevOps思想、方法和工具结合时,最好参照已有的最佳实践模式来指导实践活动。

这将会实现规避掉一部分可能的问题,主要的时间和精力不应该花费在一个又一个问题上。

The Twelve-Factor App

  • https://12factor.net/zh_cn/
  • 软件通常会作为一种服务来交付,12-Factor 为构建如下的 SaaS 应用提供了方法论,适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。
    - 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。
- 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。
- 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。
- 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。
- 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。

1.2 微服务

微服务架构是一种将单个应用作为一套小型服务来开发的方法。

微服务的9个特征:

- 服务组件化
- 以业务功能为中心组织团队
- 做产品的态度
- 服务端点
- 分布式治理
- 分布式数据管理
- 基础设施自动化
- 容错和演进式设计

每个小服务都以业务功能为单位来构建,采用自动化部署机制进行独立部署,并以独立的进程运行,不同进程之间使用轻量HTTP资源API等方式进行通信。

各个进程相互独立,因此在保持最低限度的集中式管理前提下,每个服务都可以采取不同的编程语言和存储来实现。

简而言之,微服务架构以业务功能为单位把一个大的服务拆分为多个小的进程,由这些小进程的集合构成一个完整的服务,可以轻松地对各个小进程进行功能的添加、修改和重复使用等操作。

对应的在组织架构上,每个单独的进程是由包含不同技能人员的一个团队来实现。

2 - 基础设施架构

2.1 不可变基础设施(immutable infrastructure)

顾名思义,其主要含义就是在基础设施构建完成后就不再进行任何变更。

如果想对环境进行操作时,需要先销毁现有的基础设施,然后再创建新的基础设施。

也就是说,能够舍弃原有的基础设施并可以从零开始重新构建出和原来一样的基础设施。

其主要优点

  • 防止意外发生:保持干净状态的环境,从根源上避免错误的配置和操作
  • 便于管理:不需要对已运行环境的配置和状态进行管理
  • 强制实现基础设施即代码:代码的最新状态实时反馈到基础设施上
  • 统一故障处理和配置变更的工作步骤:都归结为自动化的“重新构建”

需要特别关注的地方

  • 一般情况下,不可变基础设施只适用于无状态服务器(不包含不断变化的数据或配置) ,不适用于类似DB这种有状态服务器。
  • 特殊需求下需要保留基础设施,例如进行分析调查故障原因等
  • 重新构建基础设施时,与服务器相关的监控等配置也需要进行对应的操作
  • 选择工具和制定解决方案依据具体的实际的应用场景

2.2 蓝绿部署(Blue-Green Deployment)

蓝绿部署是为了解决传统发布方式的问题而出现的。

  • 发布时需要暂停服务,影响可用性
  • 发布失败后需要花费很长时间来修复

原理上,蓝绿部署是通过冗余来解决问题。

  • 生产环境由蓝色环境和绿色环境组成,同一时间只能使用一个
  • 在没有使用的环境中实施发布操作和业务测试,测试通过后通过DNS、负载均衡器、反向代理、路由等方式快速完成环境切换。
  • 如果发生故障,也可以通过负载均衡器、反向代理、路由等方式快速回退到先前版本

蓝绿部署的切换速度快,即使发生故障,也能容易回退版本,几乎不影响用户的使用。

但也有一些限制,就是需要保持双重的基础设施,而且不适用于有状态服务器。

2.3 本地部署和云

DevOps的实现并不要求特定类型的环境,而是建议根据具体条件因地制宜。

本地部署

  • 购入或租赁硬件资源,放置在数据中心,并自行负责维护,几乎所有的工作都在公司内部完成
  • 自主性强,对设备和业务有完全的把控
  • 需要投入足够的人力、物力、财力来构建和维护

公有云

  • 由云服务提供商管理的云计算IaaS(Infrastructure as a Service,基础设施即服务)
  • 可以快速获取资源、应对高负载
  • 方便管理,当前主流平台都提供了API 、命令行工具、管理控制台等工具
  • 必须按照提供商的规定和计划来构建和使用服务
  • 故障处理只限于公有云平台的虚拟机层面

私有云

  • 在本地部署环境中使用OpenStack等云计算平台实现不可变基础设施,
  • 前提需要现在本地部署环境中构建一个IaaS的基础设施,实现有难度、也要花费时间和成本

2.4 软件即服务(Software as a Service,SaaS)

对于和服务不直接相关的非核心功能,可以选择基于互联网服务来实现,彻底削减非核心部分的成本。

例如,在持续集成范围,就有CircleCI和Travis CI等。

如果SaaS服务提供的功能越重要,就越需要在使用之前进行严密的验证并制定相应的应急计划(灾害、故障的应对计划)

SaaS的好处

  • 服务器的运维基本由服务商负责
  • 操作和配置直观简单
  • 及时提供中间件等相关的支持

SaaS的缺点

  • 无法对出现故障的SaaS服务进行控制
  • 很难提供个性化定制
  • 价格和服务由服务商设定

2.5 日志收集

在DevOps中,日志除了被收集和存储,还应该积极地用于分析。

在使用不可变基础设施的情况下,最为理想的方式是实时进行日志收集、处理和输出展现。

使用ELK技术栈(Elasticsearch、Logstash和Kibana)、可以快速完成日志的传输、分析和可视化(信息的数值化和图形化),有助于进行客观的判断。

通过持续地日志分析和可视化,认真地对现状加以思考和反省,通过迭代式的改进最终达到长期的目标。

  • Elasticsearch:具有良好实时性和可扩展性的基于 JSON 的分布式搜索和分析引擎,作为 ELK 的核心,集中存储数据
  • Logstash:动态数据收集管道,以多种方式收集和处理数据并以多种形式输出和传输,可以将数据导入到可视化工具中
  • Kibana:ELK 的用户界面,汇总、分析和搜索 Logstash 和 ElasticSearch 提供的数据并将其可视化,并提供配置和管理 ELK 的界面

3 - 团队

3.1 敏捷开发(agile development)与DevOps

敏捷开发是一种通过改善开发方法和团队结构,持续对最终成果进行改善的方法。

开发成功与否并不在于是否按计划准时发布了服务,而在于服务的的开发是否能应对变化,是否产生了商业价值。

在以迅速应对变化为目标的敏捷开发中,计划、设计、开发、测试以及发布等相关工作均由一个小型团队完成。

通过在短期内不断重复这一系列的工作,接受外界对服务和产品的反馈,从而持续进行改善。

所有成员都要对服务和产品负责,需要理解彼此的业务,自然而然地就形成了DevOps所需要的模式。

3.2 Ticket驱动

在软件开发过程中使用JIRA、Redmine和Trac等缺陷跟踪系统或问题跟踪系统,以ticket为单位对问题、缺陷以及敏捷开发中的用户故事等进行管理的方法。

作为DevOps实践的一个良好补充,解决了文档式管理的信息分散问题,可以支持从瀑布开发到Scrum开发。

在DevOps中,通过ticket为单位进行信息共享以及任务管理,将会使内外部之间的协调变得简单,信息也更易于集中管理。

在具体实现上,就是所有任务包括代码改动都以ticket方式进行管理,与具体事项和相关人员进行关联,同步更新状态。

ticket中可以包含各类日期、负责人、详细内容和讨论记录等信息。

提供仪表盘功能(Dashboard),可以从项目管理、工作量估算和进度管理等角度把握开发整体情况。

3.3 网站可靠性工程(Site Reliability Engineering,SRE)

基于Google长期的运维实践经验而提出,重点关注运维,可以说SRE是DevOps中运维的一个更加具体的描述。

虽然网站可靠性的下降并不会直接阻碍商业价值的实现,但受阻的风险概率大幅提高。

SRE团队要在资源有限的条件下保证SRE,技术难度很大,要求较高的改善技能。

提高SRE的主流方法与观点

  • 系统优化:可用性、延迟与性能
  • 监控:服务、容量
  • 质量内建:自动化、变更管理
  • 故障处理:恢复机制

3.4 ChatOps

针对各种任务,通过即时通讯工具来提高工作效率,确保团队成员都能够实时了解其他人的操作和系统当前的情况。

在发生故障时,报警信息会及时发送给团队全体人员,在业务推动时,及时准确告知进展信息,由此建立起团队全体人员都参与的信息共享机制。

通讯工具可以所有类型信息做集成,例如CI&CD工具、Web服务等。

Slack(聊天工具,可集成第三方工具)和Hubot(聊天机器人)是实现ChatOps的代表性组合。

  • 统一沟通方式,简化沟通渠道,降低编写和传递信息的难度
  • 操作智能快捷,例如,只需要在通讯工具中输入一条指令就完成指定的工作或者获得特定的信息
  • 过程和结果对所有人可见(实时可见、记录可见)
  • 利于通知、查看和回顾,例如,关键信息即时发送、统一的时间线上显示所有相关信息、沟通记录保存等

使用ChatOps实现自动化与效率化

  • 任务操作:应用程序构建与部署、测试、
  • 系统资源查看
  • 关键信息(重大变更、故障告警等)通知
  • 定时提醒或操作

ChatOps的构成

  • 用于沟通的聊天系统
  • 从聊天系统中读取信息并执行相应操作的机器人系统

ChatOps的阶段

  • 聊天工具接收通知,团队成员基于通知进行沟通(系统--》聊天工具--》人)
  • 通过聊天工具下达操作命令,实施具体操作(人--》聊天工具--》系统)

DevOps - DevOps精要 - 变革的更多相关文章

  1. DevOps - DevOps精要 - 落地

    1 - 关键问题 如何向不具备相关基础知识的人说明和解释DevOps? 如何在组织和团队中推广和实施DevOps? 2 - 在组织中实施DevOps 在全新的组织或服务开发中,没有既定规则和老旧的习惯 ...

  2. DevOps - DevOps精要 - 歧途

    前言 如果在实施DevOps的过程中,周围没有一个人支持你,也没有得到领导和团队成员的理解: 如果在采用DevOps的工具和方法之后,难以获得明显的效率提升,甚至得到了不少的消极反馈: 那就需要反省一 ...

  3. DevOps - DevOps精要 - 溯源

    1 - DevOps的含义 DevOps涉及领域广泛,其含义因人而异,在不同的理解和需求场景下,有着不同的实践形式. DevOps可以理解为是一个职位.一套工具集合.一组过程与方法.一种组织形式与文化 ...

  4. DevOps - DevOps工具链

    不要满足于使用世界上已存在的各种方法和技术,而应重点放在希望达到的效果上! 单单使用工具不难,困难的是在团队开发中熟练使用,并形成一套理想的工作流程,只有在团队中工具和思想才能发挥最大价值. 开源工具 ...

  5. 全球顶级专家为你解读:什么是真正的 DevOps?

    [编者按]本文是 Skytap 内容主编 Noel Wurst 对 DevOps Enterprise Summit (DOES)的不完全综述,内容包括了 Noel 和一些与会嘉宾的思考,旨在勾画 D ...

  6. [转载]你所不了解的DevOps

    DevOps开发运维训练营 一旦建立了创新的文化,即使那些并非科学家或者工程师的人——诗人.演员.记者——也能以团体的形式,接受科学文化的意义.他们信奉创新文化的概念.他们以促进这种文化的方式投票.他 ...

  7. DevOps - 参考信息

    DevOps DevOps(Development+Operations)强调共同对业务目标负责,以实现用户价值作为唯一的评判标准:保证产品功能及时实现.成功部署和稳定使用: 是一种重视软件开发人员( ...

  8. 企业建立成功 DevOps 模式所需应对的5个挑战

    [编者按]本文作者为 Kevin Goldberg,主要介绍要想成功部署 DevOps 模式,企业所需应对的5大挑战与问题.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 要给 DevOps ...

  9. 为什么和什么是 DevOps?

    原文地址 本文内容 为什么 DevOps 什么是 DevOps DevOps 所带来的好处 如何将 DevOps 落到实处? 关于 DevOps 的澄清 参考资料 编写软件之所以难,是因为没有哪两个软 ...

随机推荐

  1. C# 获取操作系统空闲时间

    获取系统鼠标和键盘没有任何操作的空闲时间 public class CheckComputerFreeState { /// <summary> /// 创建结构体用于返回捕获时间 /// ...

  2. 2019牛客暑期多校训练营(第三场)G: Removing Stones(启发式分治)

    题意:给定N,表示N堆石子,每堆石子数为a[],问多少个区间,可以满足“石子总和若为偶数,那么可以两两取来自不同堆的石子,直到取完: 如果为奇数,那么排除其中一个,然后可以两两取来自不同堆的石子,直到 ...

  3. numpy函数库中一些常用函数的记录

    ##numpy函数库中一些常用函数的记录 最近才开始接触Python,python中为我们提供了大量的库,不太熟悉,因此在<机器学习实战>的学习中,对遇到的一些函数的用法进行记录. (1) ...

  4. 猎豹全球智库执行院长:中国App出海的三大规律和最具代表的五大垂直品类

    https://36kr.com/p/5100078 中国出海还是处于一个黄金时代. “国内互联网公司的竞争越来越白热化,出海的时间点变得越来越紧迫,”在36氪日前举办的“WISEx新出海行业峰会”上 ...

  5. JavaScript Array 對象

    JavaScript array 對象 array對象,是用於在單個變量中存儲多個值的一種變量類型. 創建array對象的語法: new array(); new array(size); new a ...

  6. maven 使用dependencyManagement统一管理依赖版本

    今日思语:人生方方长长,努力把她磨成方圆,所以 加油咯~ 使用maven可以很方便的进行项目依赖的管理,即可以管理我们显示引入具体版本的依赖,也可以管理某些第三方引入的一些依赖的版本,从而能更好的实现 ...

  7. 树莓派linux shell

    ls命令用来显示目录下有哪些文件和文件夹 pi@raspberry ~ $ ls 蓝色表示文件夹 白色是文件 ls -R列出所有文件夹的内容(R表示递归) ls -l 查看详细信息 包括文件权限 最后 ...

  8. noip初赛试题

    链接: https://pan.baidu.com/s/1yoOMIUqMRBnBUPprC3o6HQ&shfl=shareset 提取码: m8ns 复制这段内容后打开百度网盘手机App,操 ...

  9. Direction of Arrival Based Spatial Covariance Model for Blind Sound Source Separation

    基于信号协方差模型DOA的盲声源分离[1]. 在此基础上,作者团队于2018年又发布了一篇文章,采用分级和时间差的空间协方差模型及非负矩阵分解的多通道盲声源分离[2]. 摘要 本文通过对短时傅立叶变换 ...

  10. LeetCode 446. Arithmetic Slices II - Subsequence

    原题链接在这里:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/ 题目: A sequence of numbers is ...