Facebook的DevOps案例研究与相关工具

2022-03-23 10:52:00
前端先锋
转贴:
公众号
397
摘要:在本文中,让我们了解什么是 DevOps,以及为什么它是如此的重要!

了解什么是 DevOps 的关键在于搞清楚 DevOps 的意图,即创建高质量的软件,同时在团队之间进行更快速、更可靠的沟通和协作。至于团队,我们可以参考这两个:开发团队 IT运营团队

实际上并不是因为这两个团队的合作提供了更好的软件,而是由于“开发” 和 “运维” 团队之间的协作导致了软件的不断改进并以更快的速度进行交付。不要忘记 DevOps 工具在自动化方面所起的作用。他们在基础上支持整个 DevOps 的结构。

devops-quality

这种“一体”的感觉是由开发和运维工程师之间的技能组合、实践的桥接以及自动化(DevOps)工具的实现引起的。世界各地的先进的公司都采用了 DevOps 方法来彻底改进它们的性能、安全性和团队动态。

在本文中,让我们了解什么是 DevOps,以及为什么它是如此的重要!我们将会先回顾是什么导致了软件开发方法向 DevOps 演变的,然后探索什么是 DevOps 及其生命周期,并通过评估 Facebook 等顶级公司是怎样使用 DevOps 方法的。

软件开发的演变

为了响应业务需求,DevOps 从现有的软件开发策略和方法发展而来。让我们简要地看一下这些模型是如何演变的,以及它们最适合的场景有哪些。

devops-software development model life cycle

软件开发模型

缓慢而繁琐的瀑布模型演变成了敏捷开发,开发团队在短短的不到两周的时间内冲刺他们的工作。拥有如此短的发布周期将有助于开发团队及时处理客户的反馈,并将其在修复下一版本的错误时一并修改。虽然这种敏捷SCRUM方法为开发带来了灵活性,但在运营方面却失去了敏捷实践的速度。开发人员和运营工程师之间所缺乏的协作仍然会减缓开发过程和发布。 DevOps 的诞生源于对更的好协作和更快的交付的需求。 DevOps 可以实现持续软件交付,能够简单、更快速的解决问题。

什么是DevOps?

DevOps 是一种软件开发方法,涉及软件在整个开发生命周期中的持续开发、持续测试、持续集成、持续部署和持续监控。这些活动只能在 DevOps 中实现,而不是敏捷或瀑布方法,这就是为什么 Facebook 和其他顶级公司选择 DevOps 作为其业务目标的前进方向。 DevOps 是在较短的开发周期内开发高质量软件的首选方法,可以提高客户满意度。

如果不了解 DevOps 生命周期,那么你对 DevOps 的理解是不完整的。现在让我们看一下 DevOps 生命周期,并探讨它们如何与下图所示的软件开发阶段相关联。

devops lifecycle

Devops生命周期

持续发展:

这是 DevOps 生命周期中不断开发软件的阶段。与瀑布模型不同,软件可交付的成果被分解为多个短期开发周期的冲刺,在很短的时间内开发并交付。这个阶段涉及编码和构建,并使用 Git  SVN 等工具来维护代码的不同版本,以及 Ant、Maven、Gradle 等工具用于将代码构建或打包成可执行文件,然后就可以转发给 QA 进行测试了。

持续测试:

这是针对开发的软件不断测试 Bug 的阶段。对于连续测试,可以使用自动化测试工具,如 Selenium、TestNG、JUnit、ZTF 等。这些工具允许 QA 并行地对多个代码库进行彻底的测试,以确保功能中没有缺陷。在这个阶段,使用 Docker 容器来动态模拟“测试环境”也是首选。代码经过测试后,会不断与现有代码进行集成。

持续集成:

这是将支持新功能的代码与现有代码进行集成的阶段。由于软件的不断发展,更新的代码需要与系统一起连续集成,以便将变化反映给最终用户。更改后的代码还应确保在运行时环境中没有错误,允许我们对更改进行测试并检查它对其他更改的反应。

Jenkins是一种非常流行的工具,用于持续集成。使用 Jenkins 可以从 GIT 存储库中提取最新的代码修订版,并生成最终可以部署到测试或生产服务器的构建版本。它可以设置为在 GIT 存储库发生更改时自动触发新构建,也可以在单击按钮时手动触发。

持续部署:

它是将代码部署到生产环境的阶段。在这里,我们要确保在所有服务器上都能正确地部署代码。如果添加或引入了任何新功能,那么就应该准备好迎接更多的网站流量。因此 SysAdmin 还有责任对服务器进行扩展以便容纳更多的用户。

由于新代码是持续部署的,因此配置管理工具可以快速、频繁地执行任务。Puppet,Chef,SaltStackAnsible是在这个阶段使用的一些流行工具。

容器化工具在部署阶段也发挥着重要作用。DockerVagrant是非常流行的工具,有助于在开发、测试、生产和构建环境中实现一致性。除此之外,它们还有助于轻松扩展和缩小实例。

持续监控:

这是 DevOps 生命周期中非常关键的阶段,旨在通过对软件的性能进行监控来提高软件的质量。这种做法涉及运维团队的参与,他们会监视用户活动中出现的 bug 和系统的不正当行为。这也可以通过使用专用监控工具来实现,该工具将持续监控应用程序性能指出问题所在。

相关的流行工具有Splunk,ELK Stack,Nagios,NewRelicSensu。这些工具可帮你密切监视程序和服务器,以主动检查系统的运行状况。它们还可以提高生产率并提高系统的可靠性,从而降低 IT 支持成本。发现的任何重大问题都可以随时报告给开发团队,以便可以在持续开发阶段进行修复。

这些 DevOps 阶段连续循环进行,直到达到所需的产品质量。下面给出的图表展示了在 DevOps 生命周期的不同阶段使用的工具。

devops-tool2

DevOps工具

我们已经知道了 DevOps 的重要性,并了解了它生命周期的不同阶段以及所涉及到的 DevOps 工具,接下来让我们研究一下 Facebook 的案例,并了解他们为何从敏捷迁移到 DevOps 的原因。我们将研究 Facebook 曾经在 2011年推出的新功能的案例,这些功能导致了他们对产品交付过程的重新评估,并采用了 DevOps 方法。

2011年,Facebook 向遍布全球的 5 亿用户推出了一系列新功能 —— 时间线、自动推荐和音乐功能。在发布后产生的巨大流量导致了服务器的崩溃。推出的新功能获得了用户的热烈响应,这就导致了新功能的有效性产生了不可预知结果,他们没有相关的预案。

facebook-case-study

Facebook案例研究

这导致了 Facebook 对策略的评估和调整,从而推出了暗启动技术。基于 DevOps 原则,Facebook 为其新版本的发布创建了以下方法。

devops-facebook-dark-start-method

暗启动方法

Facebook 的暗启动技术

暗发布是在新功能完全发布之前先逐步推广到选定的一组用户的过程。这允许开发团队尽早获得用户反馈和测试错误,并且还可以测试基础架构性能。这种发布方法是持续交付的直接结果,有助于实现快速迭代的版本,以确保应用程序性能不会受到影响,并使用户可以很好地更新该版本。

在暗启动技术中,新功能通过专用的部署管道发布给小型用户群。在下面给出的 Facebook Dark Launch 图表中,你可以看到只打开了一个部署管道,将新功能部署到了一组选定用户。此时剩余的数百条管道全部关闭。持续监视已部署新功能的特定用户群以收集反馈并识别错误。这些错误和反馈将被纳入在同一用户群中的开发,测试和部署,直到功能变得稳定。一旦稳定之后,将会打开其他部署管道,把这些功能逐步的部署在其他用户群上。

devops-Facebook

Facebook基于DevOps的暗启动过程

Facebook 通过将代码包装在功能标记或功能切换中来实现此目的,该切换用于控制谁可以看到新功能以及何时能够查看。同时模拟向用户启动代码的全部效果,这可以提早暴露基础架构的痛点。在功能稳定之后,将会通过多个版本部署到其余用户。

这样,Facebook 就拥有了一个可控或稳定的机制,可以为其庞大的用户群开发新功能。相反,如果该功能没有得到很好的响应,他们可以选择回滚部署。这也有助于他们为部署准备服务器,因为他们可以预测网站上的用户活动,并且可以相应地对服务器进行扩展。上面给出的图表描述了如何在 Facebook 上进行黑暗发布。

Facebook、亚马逊、Netflix 和谷歌以及很多领先的科技巨头,在向所有人发布之前先用暗发布向一小部分用户发布和测试新功能。

DevOps 的目的是更快速、更可靠地创建质量更好的软件,同时开发和运维团队之间进行更多的沟通和协作。它也是一个自动化过程,允许进行快速、安全和高质量的软件开发和发布,同时保持所有利益相关者之间的循环。这就是为什么 DevOps 越来越受到青睐的原因。

DevOps文章
联系我们
联系人: 阿道
电话: 17762006160
地址: 青岛市黄岛区井冈山路157号中南金石国际广场A座3202室