跳到主要内容

第 2 章 DevOps 与 SRE 简介

前DevOps时代的特征

软件开发的前DevOps时代与我们今天看到的截然不同。那是一个孤立的团队,僵化的方法和大量的手工工作的时代,这通常导致软件交付缓慢且不可靠。

以下是DevOps前时代的一些关键特征:

  • 瀑布模型
    占主导地位的方法论是 瀑布模型,一种线性方法,在进入下一个阶段之前必须完成每个阶段。这使得适应变化和快速响应新要求变得困难。
  • 孤立的团队
    开发人员,测试人员和运营团队独立工作,通常很少进行沟通或协作。这创造了一种 “把它扔在墙上” 的心态,每个团队都将问题归咎于对方。
  • 手动流程
    从测试到部署,大多数任务都是手动完成的。这既耗时又容易出错,导致延迟和不一致。
  • 有限的自动化
    几乎没有可用的工具来自动化重复性任务,因此很难扩展软件开发。
  • 缓慢且不可靠的交付
    发布很少,而且经常有问题,这给开发人员和用户带来了挫败感。

接下来,让我们看一下DevOps前时代面临的挑战的一些具体示例。

挑战: 示例1: 索尼PlayStation网络中断 (2011)

2011年4月,索尼PlayStation网络 (PSN) 经历了一次大规模停电 持续了23天,影响了10000万多个用户。这一事件被认为是DevOps前时代面临的挑战的经典例子,也是向现代开发实践过渡的组织的警示故事。

DevOps之前的挑战导致了PSN中断

  • 孤岛和沟通差距索尼的开发和运营团队在单独的筒仓中工作,沟通和协作有限。这导致对彼此的工作和挑战缺乏了解,使得在停电期间难以有效应对不断变化的局势。
  • 手动和慢速流程部署和基础架构更改是手动执行的,需要大量时间和精力。这种缓慢阻碍了索尼快速评估情况和实施必要修复的能力。
  • 有限的可扩展性和灵活性PSN的基础设施并非旨在应对攻击引起的激增需求,从而导致广泛的停机和服务中断。
  • 缺乏可见性和跟踪索尼缺乏有效的监控工具来及时识别和诊断故障源。这延迟了响应时间,并使确定攻击的全部范围变得困难。
  • 指责和指责的文化孤立的环境和缺乏沟通导致不同团队之间的指责和指责,阻碍了协作和解决问题的努力。

PSN中断的后果

  • 财务损失索尼估计,停电使公司损失了约1.7亿美元的收入损失和法律和解。
  • 声誉损害该事件严重损害了索尼的声誉,并侵蚀了用户对PSN平台的信任。
  • 客户沮丧数百万用户对索尼的长时间停机和缺乏信息感到沮丧。

从PSN中断中吸取的经验教训

以下是从PSN中断中学到的一些经验教训:

  • 打破孤岛并促进开发团队与运营团队之间的协作的重要性。
  • 需要自动部署和基础架构更改以实现更快的响应时间。
  • 构建可扩展且灵活的基础架构以应对意外需求激增的重要性。
  • 实施有效的监视工具以实时了解系统运行状况和性能的必要性。
  • 建立共同负责和协作的文化以防止未来发生事件的价值。

索尼PSN的中断清楚地提醒了DevOps前时代运营的挑战和后果。通过采用现代DevOps原则和实践,组织可以避免类似的陷阱,并确保其运营中更高的敏捷性,可靠性和安全性。

挑战:示例2: healthcare.gov网站的推出(2013年)

发射 美国卫生和公共服务部的healthcare.gov网站 2013年受到技术问题的困扰,给政府造成了重大的延误和尴尬。这部分是由于使用了过时的技术以及开发和运营团队之间缺乏协作。

DevOps之前的时代是软件开发面临重大挑战的时期。但是,这也为DevOps的出现奠定了基础,它彻底改变了软件的构建和交付方式。

DevOps的出现

强调开发和运营团队之间的协作和沟通,DevOps软件开发方法并不是一夜之间出现的。它的根源可以追溯到几个促成因素和关键转折点。

早期影响

  • 敏捷运动: 敏捷运动出现在20世纪90年代并正式成立的2001年,强调迭代开发和协作,为devops专注于更快的交付和团队集成铺平了道路。
  • 自动化: 在整个软件开发生命周期 (SDLC) 中,自动化工具的兴起简化了手动任务,使团队可以专注于更高级别的活动。
  • 云计算: 云平台的出现为开发和部署提供了可扩展和灵活的环境,进一步促进了协作和更快的交付。

形成年 (2007-2009)

  • Patrick Debois: 2007年,对开发和运营之间的传统孤岛感到沮丧,比利时顾问和项目经理Patrick Debois开始倡导更紧密的合作。他2009年创造了 “DevOps” 一词,这与人们对软件开发更集成的方法的日益增长的愿望产生了共鸣。要了解更多,您可以阅读 “DevOps的起源: 名字是什么?” 文章,作者: 史蒂夫·梅扎克或手表 “DevOps的 (简短) 历史” 视频。
  • 敏捷基础架构: 大约在同一时间,出现了 “敏捷基础架构” 运动,重点是将敏捷原则应用于基础架构管理,使其与开发实践保持一致。

获得动力 (21世纪10年代)

  • 持续集成和持续交付 (CI/CD): 采用CI/CD实践在加速软件交付和改善开发与运营之间的反馈循环方面起到了重要作用。
  • DevOps工具和平台: 出现了大量专门的DevOps工具和平台,使任务自动化并在整个SDLC中提供共享的可见性。
  • 提高认识和采用: DevOps成为会议和出版物中的热门话题,从而提高了各个行业的认识和采用。

持续进化 (今天)

  • DevOps不断发展: 随着技术和业务需求的变化,新的DevOps实践和工具出现,重点关注云环境中的安全性、合规性和自动化等领域。
  • 向DevOps文化的转变: 重点超出了工具和流程,以创建一种协作文化,从而促进沟通,共同承担责任和持续改进。

导致DevOps出现的关键因素

以下是导致DevOps出现的一些关键因素:

  • 需要更快的软件交付
    竞争的加剧和不断变化的客户期望推动了对更快,更频繁的软件发布的需求。
  • 孤立团队的低效率
    开发与运营之间的传统分离导致沟通差距,延迟和指责。
  • 自动化工具的兴起
    自动化使团队能够专注于更高级别的活动,并消除人工工作,从而提高效率和准确性。
  • 云计算
    云平台提供了可扩展性、灵活性和对共享资源的访问,从而促进了协作和更快的部署。

DevOps的主要原则

遵守DevOps的关键原则将确保更成功地开发,交付和实施应用程序和服务:

  • 协作
    DevOps强调打破开发和运营团队之间的孤岛,鼓励分担责任并改善沟通。
  • 自动化
    自动化是DevOps的核心宗旨,涉及使用工具来自动化软件开发和交付管道中的手动和重复任务。
  • 持续集成 (CI)
    开发人员每天多次将其代码集成到共享存储库中,并通过自动构建和测试来在开发过程的早期检测和解决问题。
  • 连续部署 (CD)
    连续部署涉及在通过自动化测试后自动将代码更改部署到生产环境。这确保了快速可靠的发布。
  • 基础设施作为代码 (IaC)
    IaC涉及通过代码管理和配置基础架构,从而实现一致且可重复的基础架构部署。
  • 监控和反馈
    DevOps强调对应用程序和基础架构的持续监控,提供实时反馈以及时识别和解决问题。

DevOps的好处

DevOps为组织提供了一些好处,包括:

  • 速度
    DevOps通过自动化流程并消除开发团队和运营团队之间的手动切换来实现更快的软件交付。通过打破团队之间的孤岛,DevOps促进了一种更加敏捷和高效的软件开发方法。
  • 快速交货
    DevOps允许组织快速可靠地发布新功能和更新。持续的集成,交付和部署可确保软件始终处于可部署状态并准备发布。
  • 可靠性
    DevOps专注于测试和质量保证,以确保交付高质量和可靠性的软件。自动化测试和质量检查有助于及早识别和解决问题,从而降低生产中出现缺陷和停机的风险。
  • 可伸缩性
    DevOps使组织能够扩展其软件开发和部署过程。组织可以通过自动化流程和使用容器化平台,快速轻松地启动新环境并根据需要扩展其应用程序。
  • 改进协作
    DevOps在开发和运营团队之间提供了增强的协作和沟通。
  • 安全
    DevOps通过将安全测试和合规性检查纳入开发和部署过程来强调安全性和合规性。这有助于组织在开发周期的早期识别和解决安全漏洞,降低安全事件和漏洞的风险。
  • 提高客户满意度
    DevOps使组织能够快速有效地响应客户需求,交付满足或超过客户期望的软件。这提高了客户满意度和忠诚度,推动了收入增长和盈利能力。
  • 节约成本
    DevOps实践可以通过优化组织的资源和减少浪费来帮助组织降低软件开发和部署成本。

DevOps中的工具

有许多可用于满足软件开发生命周期不同阶段的DevOps工具。让我们看一下各个类别的一些流行工具。


版本控制

  • Git广泛用于版本控制,并在开发过程中帮助跟踪源代码的变化。
  • Subversion (SVN) 是一个集中式版本控制系统。它允许用户跟踪对存储库中的文件和目录所做的所有更改。SVN以其简单性而闻名,通常用于首选集中式线性工作流的项目中。
  • Bitbucket是一个基于云的平台,提供基于Git的版本控制、代码审查和CI/CD工具。它提供了代码托管,问题跟踪和拉取请求等功能,使其在开源项目和协作中很受欢迎。
  • GitHub是一个流行的基于云的平台,用于版本控制、社交编码和项目管理。

持续集成/持续部署 (CI/CD)

  • Jenkins是一个开源的自动化服务器,便于构建、测试和部署代码更改。
  • Travis CI是一个CI/CD服务,与GitHub存储库集成,用于自动化测试和部署。
  • CircleCI是一个基于云的CI/CD平台,支持自动化和并行测试。

配置管理

  • Ansible是一个开源自动化工具,可简化配置管理,应用程序部署和任务自动化。
  • Chef使用称为 食谱
  • Puppet是一种配置管理工具,用于自动化基础架构的配置和管理。

容器化和编排

  • Docker是一个非常流行的平台,用于在容器中开发,运输和运行应用程序。
  • Podman是一个开源容器引擎,提供与Docker兼容的命令行界面和运行时。它具有映像创建,管理和部署功能,但缺少一些高级功能,例如内置编排。
  • LXC (Linux容器) 是内置在linux内核中的轻量级容器化技术,可提供有效的资源利用率和隔离。它因其简单性和可移植性而广受欢迎,但缺乏其他工具的一些高级功能。
  • Kubernetes是一个开源的容器编排平台,用于自动化容器化应用程序的部署,扩展和管理。由于其受欢迎程度,它被认为是容器的事实上的编排平台。
  • OpenShift是由Red Hat开发的容器平台。它扩展了Kubernetes,并为企业应用程序提供了其他功能,包括源到映像的构建和以开发人员为中心的工具。
  • Apache Mesos是一个开源的集群管理和编排平台,旨在简化数据中心或云环境中分布式应用程序和资源的管理。

基础设施作为代码 (IaC)

  • Terraform是一种用于高效,安全地构建,更改和版本控制基础架构的工具。
  • AWS CloudFormation是Amazon的IaC服务,用于使用模板配置和管理AWS资源。
  • OpenTofu是Terraform的一个分支,它是开源的,社区驱动的,由Linux基金会管理。

连续监控

  • Prometheus是为可靠性和可扩展性而设计的开源监视和警报工具包。
  • Zabbix是针对服务器、网络、应用程序和其他IT基础架构的全面监控解决方案。它提供监控功能、警报和报告功能。它支持各种监控协议,并提供广泛的定制选项。
  • Nagios是一个成熟且流行的开源监控工具,专注于服务器和网络监控。它提供了一个灵活的插件系统来扩展其监控功能,并具有强大的警报和通知选项。
  • OpenNMS是一个内置监控功能的开源网络管理系统。它提供全面的网络发现,映射和监视功能,并提供基于web的界面来管理和可视化网络性能。
  • Grafana是一个可视化平台,与包括Prometheus在内的各种数据源集成在一起,用于创建交互式和可共享的仪表板。

协作和沟通

  • Slack是用于交流和共享更新的团队协作工具。
  • Microsoft Teams是一个与其他Microsoft工具集成的通信和协作平台。
  • JIRA广泛用于错误跟踪,问题跟踪和项目管理,与代码开发环境无缝集成。
  • Trello是一个可视化的项目管理工具,它使用板、列表和卡片来组织任务并在项目上进行协作。
  • Atlassian Confluence是一个wiki平台,可用于创建和共享文档,知识库文章和其他内容。对于需要共享信息并在文档上进行协作的团队来说,这是一个不错的选择。
  • Discord通过文本通道和语音聊天提供快速便捷的实时通信。与Slack类似,Discord非常适合快速讨论、故障排除和团队合作。

日志记录

  • ELK Stack (Elasticsearch,Logstash,Kibana) 是一组用于日志管理的工具,可以对日志数据进行搜索,分析和可视化。
  • Fluentd是一个轻量级和高性能的日志收集器和转发器。它提供灵活的配置,并支持各种输入插件,用于从不同来源收集日志。它与其他日志工具和平台无缝集成。
  • Splunk是一个全面的日志记录平台,提供日志收集、索引、搜索、分析和可视化。它为故障排除和安全性提供了强大的实时分析和AI驱动的见解。
  • Datadog是一个全面的监控平台,提供日志管理,指标收集和应用程序性能监控功能。

源代码管理 (SCM)

  • Bitbucket是一个Git存储库管理解决方案,具有代码协作、持续交付等功能。
  • GitLab是一个基于web的Git存储库管理器,具有CI/CD、代码审查和协作功能。
  • GitHub是一个非常流行的基于web的平台,它允许开发人员存储,跟踪更改并在代码上进行协作。

这些工具与许多其他工具一起形成了一个生态系统,该生态系统支持DevOps的原理,从而在整个软件开发生命周期中促进协作,自动化和效率。根据您的特定需求、您使用的技术和团队的偏好选择工具是至关重要的。

DevOps的未来: 令人兴奋的趋势和预测

DevOps通过促进协作,自动化和快速反馈循环,彻底改变了软件开发。随着技术继续以前所未有的速度发展,很自然地想知道这一重要实践的未来会怎样。

以下是塑造DevOps未来的一些关键趋势和预测:

  • 人工智能自动化
    人工智能 (AI) 和机器学习 (ML) 有望对DevOps产生重大影响。AI驱动的工具将自动执行繁琐的任务,预测故障并优化软件交付流程,从而为更高层次的思维和战略决策腾出人力资源。
  • 安全第一的方法
    随着技术的进步和威胁变得越来越复杂,安全性将成为DevOps中更大的优先事项。从代码开发到部署和监视,安全性将需要无缝集成到整个SDLC中。
  • 转向自助服务平台
    团队将更多地依赖自助服务平台,使他们能够访问所需的工具和资源,而无需依赖中央IT团队。这将使开发人员和运营团队能够更加独立和自主地工作。
  • 低代码/无代码工具的兴起
    低代码/无代码工具将变得越来越流行,使非技术用户能够参与软件开发过程。这将进一步使软件开发民主化,并使更多的人可以使用它。
  • 关注可观察性和监测
    持续监控和可观察性对于确保复杂和动态云环境中应用程序的健康和性能至关重要。实时洞察将使团队能够快速识别和解决问题,并防止中断。
  • 跨整个价值链的协作
    DevOps将超越传统的开发和运营团队,包括从营销和销售到客户支持的整个价值链中的其他利益相关者。这将确保每个人都与业务目标保持一致,并能够共同为客户提供价值。
  • 拥抱 “一切都作为代码” (EaC) 方法
    EaC哲学将变得越来越普遍,其中基础架构,配置和技术堆栈的其他方面将作为代码进行管理。这将提供更大的一致性、灵活性和自动化。
  • 持续学习和提高技能
    随着新技术和最佳实践的出现,DevOps专业人员不断学习和提高自己的技能至关重要。这将确保它们在快速发展的环境中保持相关性和适应性。

挑战和机遇

尽管有令人兴奋的可能性,但DevOps的未来也带来了挑战。这些包括:

  • 管理新技术的复杂性
    集成AI、ML、云平台和其他先进技术可能会很复杂,并且需要大量的专业知识。
  • 在快速发展的环境中确保安全
    对自动化和自助服务平台的日益依赖提出了需要有效解决的安全问题。
  • 培养协作和分担责任的文化
    向DevOps文化转变需要对培训,沟通和变更管理计划进行持续的投资。

然而,这些挑战也为创新和增长带来了机遇。通过拥抱新技术,优先考虑安全性并培养协作文化,组织可以在不断变化的软件开发环境中取得成功。

总体而言,DevOps的未来是光明的。通过利用自动化、人工智能和其他新兴技术,DevOps团队将能够更快、更可靠地交付软件,并具有更高的安全性。这将导致创新的增加,客户体验的改善,以及在数字经济中的竞争优势。

第二章总结

本章介绍了云原生技术世界中的两个关键概念: DevOps和站点可靠性工程 (SRE)。DevOps是一个文化和专业运动,专注于软件开发人员和IT运营团队之间的协作,沟通和集成。它旨在缩短开发生命周期,确保以高质量的软件持续交付。另一方面,SRE采取了略有不同的方法。它将软件工程原理应用于基础架构和运营问题,旨在实现可扩展且高度可靠的软件系统。本章深入探讨了DevOps的基本原理和实践,如持续集成、持续交付、自动化和监控。

讨论了一系列对DevOps和SRE至关重要的工具。对于DevOps,突出显示了诸如Jenkins For automation,Docker for containerization和Kubernetes for orchestration之类的工具。在SRE领域,强调了诸如用于监视的Prometheus和用于基础结构的Terraform之类的工具作为代码。DevOps实践被证明有助于在云中开发和部署可扩展应用程序。同时,SRE原则可确保这些应用程序可靠,高效且得到最佳维护。

本章包括案例研究和实际示例,说明了DevOps和SRE原则在云本机设置中的应用。这些示例演示了如何将理论概念付诸实践,从而提供了实际的好处,例如提高了部署速度,增强了可靠性以及更好的系统可扩展性。

本章最后强调了DevOps和SRE在IT行业中的重大影响,尤其是在云计算领域。它认为理解和实施这些做法对组织至关重要。