终极版 DevOps 工具介绍:介绍&计划篇

一、介绍

随着开发过程的“左移”,DevOps 正在成为众多软件产品或服务的关键部分。因此,为了满足我们的工作需求,DevOps 工具的数量增长也就不足为奇了。

然而,如此多的 DevOps 工具又让人无从下手。为了帮助大家选择正确的工具,未来我们将陆续介绍一系列的顶级工具及其优缺点。这些工具按照工作周期的五个阶段进行划分:计划、开发、测试、发布和操作。每篇文章我们会重点介绍其中一个阶段中的工具,总共有六篇文章。



DevOps 生态系统信息图

那么,每个阶段是指什么呢?

计划

计划是初始阶段,它涵盖了项目管理的第一步。项目和产品创意以小组、单独或在白板上进行展示和分析。开发人员、团队和组织决定他们想要什么以及他们想要的方式,并将任务分配给开发人员、QA 工程师、产品经理等。这个阶段需要对问题和解决方案进行大量分析、团队成员之间的协作以及能够捕获并跟踪所有计划中的内容。

开发

开发是将计划中的想法执行到代码中的阶段。这些想法以产品的形式出现。此阶段需要软件配置管理、存储库管理和构建工具以及自动化持续集成 (CI) 工具,以便将此阶段与以下阶段结合起来。

测试

测试是检查产品和服务并确保它们在不同条件下(有时甚至是极端条件)实时工作的关键部分。这个阶段需要许多不同类型的测试,主要是功能测试、性能或负载测试以及服务虚拟化测试。测试与第三方服务的兼容性和集成也很重要。测试数据需要在丰富的报告中进行管理和分析,以便根据测试结果改进产品。

发布

曾经是一个独树一帜的阶段,让开发人员彻夜难眠,现在发布阶段变得敏捷并与持续交付流程集成。发布阶段发生在基础设施和公司的所有层。它包括部署工具、容器和发布工具,以及用于可扩展性的配置管理和云基础。发布阶段将我们从代码带到工作产品。

操作

我们现在有了一个可以工作的产品,但我们如何才能最大限度地发挥我们计划、开发、测试和发布的功能呢?这就是这个阶段的目的。实施最佳用户体验是其中的重要组成部分,监控基础设施、APM 和聚合器,并分析商业智能 (BI)。这个阶段确保我们的用户充分利用产品,并且可以无错误地使用它。

显然,这个工作周期不是单向的。我们可能会使用某个阶段的工具,进入下一个阶段,返回一个阶段,向前跳两个阶段,等等。从本质上讲,这一切都归结为一个反馈循环。你计划和发展。测试失败,所以你再次开发。测试通过,你发布它,然后你通过谷歌分析或 A/B 测试等测量工具获得有关客户满意度的信息。然后,你重新讨论相同的功能以从产品中获得更好的满意度,再次开发它等等。

二、在计划阶段使用的主要工具

2.1 作业跟踪和管理:JIRA、Confluence 和 CA Agile Central

JIRA是一种跟踪工具,提供看板式、Scrum 或完全定制的板,显示每个任务的进度、任务分配者及其开发。通过使用JIRA 板,经理和团队成员可以反映不同任务的状态,识别工作瓶颈,并从整体上监控开发进度。JIRA 也有助于错误管理。

Confluence可以补充 JIRA,以优化分配管理和分析。

另一个推荐的工具是CA Agile Central,它提供了功能跟踪和团队管理能力,以及看板、Scrum 或自定义仪表板之间的选择。

  • 优点: 所有工具都易于使用,并使团队能够保持同步。
  • 缺点:对于小型团队来说,免费的开源工具就足够了。



2.2 团队之间的聊天和即时沟通:Slack

Slack是一种团队交流工具,可让开发人员、产品经理和任何公司成员聊天和共享屏幕。该工具支持个人消息传递以及群聊、频道或流程。创建专门针对不同项目的小组使其成为在处理任务时需要即时通信的理想工具。

  • 优点: 该工具用户友好且视觉美观。

  • 缺点:群组消息有时难以追踪。



2.3 其他建议

除了上述工具之外,还有以下有用的工具:

  • MixpanelGoogle Analytics用于衡量移动和网络用户的参与度。这些工具可帮助你表征系统中的用户行为和用户流并对其进行分析。这有助于确定需要添加和/或修复哪些功能,以及如何添加和/或修复。它们也可用于 A/B 测试不同的功能。
  • Aha! 用于产品路线图规划。使用此工具,可以构建路线图、创建功能、分配任务、为任务评分和确定优先级。规划工作从这个工具开始,然后可以与 JIRA 集成(见上文)。

选择正确的工具对于确保开发的主要阶段(即规划)为流程的其余部分提供坚实的基础至关重要。

三、在开发阶段使用的顶级工具

3.1 版本控制系统管理:BitBucket 和 GitHub

版本控制系统允许你托管你的代码,与其他开发人员共享它,并在它们上进行协作。BitBucketGitHub是两个最流行的版本控制系统管理服务。两者都是在 2008 年推出的,而 Bitbucket 在 2010 年被 Atlassian 收购。

选择哪一个这取决于你的需求。主要区别在于 GitHub 是开源友好的,因为它为公共存储库提供了无限数量的协作者。但是,如果你需要私有存储库,BitBucket 最多可为五个合作者免费提供它们。GitHub 也只支持 Git 版本控制,而 BitBucket 支持 Git 和 Mercurial。然而,对于开发人员来说,Git 通常就足够了。



3.2 包管理:NPM

包管理使开发人员能够通过存储“包”的存储库重用和共享代码。包是组合在一起以提供服务或功能的文件或目录。我们推荐使用NPM,它是一个 Node.JS 包管理器。NPM 成立于 2014 年,是一款开源产品。

  • 优点:大多数包都在一个地方;便于使用。
  • 缺点: 要求所有包都在 NPM 网站上。

我们还建议使用更快的Yarn

3.3 持续集成:Jenkins

Jenkins是一个开源的持续集成工具,它使开发人员能够在每次提交新构建时自动化他们的测试。

  • 优点: 开源;易于上手;并行运行测试;与许多工具集成,包括 JMeter 和 Taurus。
  • 缺点: 简明死板的用户界面。



除了这些工具,我们还推荐使用webpack。Webpack 是一个构建工具,用于管理你的模块并决定如何在最终代码包中处理所有资产。

  • 优点:支持不同语法的模块,可以在客户端运行服务器模块;编译后压缩代码,节省资源。
  • 缺点:对用户不友好。

四、在测试阶段使用的顶级工具

4.1 负载测试:JMeter

JMeter是最流行的开源负载测试工具。JMeter 使用户能够创建一个测试场景,其中包含他们想要在其网站或应用程序上测试的操作和请求。然后,可以根据他们的业务需求使用加速时间和计时器等元素对其进行修改,为多个用户运行它,并检查结果。

  • 优点: 开源、易于使用、健壮、有一个充满活力和参与的支持和开发社区,有多个插件,并与 Jenkins 等持续集成工具集成。
  • 缺点: 需要下载,可扩展性有限,报告有限,创建测试场景可能很细致。



单击此处查看不同开源负载测试工具的比较。

4.2 负载测试:CA BlazeMeter

CA BlazeMeter 具有 JMeter 的所有功能,因为它是 JMeter 的增强和升级版本

  • 优点: 可扩展性(云中的 JMeter)、高级报告、协作选项以及多个插件和测试记录功能。
  • 缺点:不是开源的。

CA BlazeMeter 报告:



4.3 功能测试:Selenium

Selenium 是一种开源功能测试工具,可自动测试浏览器并启用 Web 应用程序的测试。

  • 优点: 开源,支持多种语言、操作系统和浏览器,记录脚本(通过 Selenium IDE),并与 JMeter 一起使用。
  • 缺点: 需要很高的专业知识才能使用,不支持基于 Windows 的应用程序,并且缺乏在线支持。



4.4 功能测试:Perfecto Mobile

Perfecto Mobile是一款用于移动应用程序的功能测试工具,可在真实设备上运行自动化应用程序测试。

  • 优点: 由于在真实设备上运行测试,优化和准确性很高。
  • 缺点:测试速度可能很慢。

4.5 服务虚拟化:CA

CA Service Virtualization 创建虚拟资产,使开发人员和团队能够在他们的系统上并行工作,而无需编写代码来复制基础架构或依赖项。

  • 优点:快速设置并与测试和持续集成工具集成。
  • 缺点:内部部署和重量级。

五、在发布阶段使用的主要工具

5.1 配置管理:Chef、Puppet 和 Ansible

配置管理通过跟踪和更新有关硬件和软件的信息,为应用程序及其依赖项奠定了基础。它还可以通过自动分发更改用于持续部署策略。

ChefPuppetAnsible是三个类似的工具,可帮助你通过 IT 自动化操作和部署基础架构来构建强大的自动化基础架构。

你应该选择哪一个?

  • 在 Chef 和 Puppet 中,语言/DSL 比 Ansible 的 YAML 文件更灵活。但是,很难管理多 DC 主机和复制。此外,这些系统需要管理另一个 PKI(公钥基础设施),这与使用现有基础设施的 Ansible 不同。这使得基础设施管理更加复杂。
  • Ansible 可以运行 ad-hoc 命令,它可以使用 YAML 文件进行简单的读写,它是无代理的,如果你对机器有 ssh 访问权限,PKI 就已经存在。但是,在 Ansible 中,YAML 文件非常严格,容易出现缩进错误。

一般来说,对于所有配置管理工具,每次更改都必须在服务器上动态运行,但它们可能会在运行时中断。运行时问题的解决方案是不可变的基础设施,因此请继续阅读下一节:容器。

5.2 容器运行时和编排器:Docker、rkt(Rocket)、Kubernetes 和 Nomad

容器是通过在隔离结构中交付更改来帮助保持发布组织的工具。曾经,发布需要在需要上传到服务器的单独文件中发送代码。今天,使用容器,开发人员可以准备一个包含所有需要的依赖项的容器镜像。容器映像分发给开发人员和 QA,他们不需要安装任何东西,但可以直接从开发笔记本电脑到生产环境使用它。

容器运行时是在单台机器上运行容器的工具。

Orchestrator 通过运行时在集群上运行容器。容器运行时和编排器可帮助你消除对单一用途机器(称为宠物)的需求。相反,一组机器被视为一台巨型机器,从而使用你机器的全部容量。你只需要知道运行你的应用程序需要多少计算/磁盘,框架将完成其余工作以分发你的应用程序并使其在集群中的某个位置可用。在任何情况下,你都需要为刚刚添加新机器的集群添加容量。

Dockerrkt都是容器的运行时工具。它们利用 CGroups 和命名空间等 Linux 内核特性来实现隔离、安全和资源管理(CPU、内存等)。此外,它们对于构建不可变的基础架构和将工件推送到中央存储库(注册表)都非常有用。使用它们,你只需构建一次,即可在任何地方运行。最后,它们允许将应用程序及其依赖项包装到同一个容器中,使用该组织用于将依赖项 (ops) 与应用程序 (dev) 分开的配置管理方案。这确保了代码的可伸缩性,因为图像是不可变的并且以相同的方式运行,无论是一个容器还是 200 个容器。

你应该选择哪一个?

  • Docker 和 Rocket 具有非常相似的特性,尽管 Docker 更为主流并且拥有庞大的支持开源社区。
  • Rocket 推动容器标准化,而 Docker 在尝试构建自己的平台时不断破坏 API 与每个版本的兼容性。

Kubernetes是迄今为止最大的分布式计算框架,即orchestrator。它编排容器并帮助跨机器和主机互连容器。它包括秘密、配置管理、部署和服务发现。

Nomad是一个编排器,也是一个调度器。它可以调度和分发二进制文件、jar 和容器,以跨机器集群管理工作负载。Nomad 与 Kubernetes 调度程序(它是完整的 Kubernetes 框架的一部分)进行比较。所有 Hashicorp(Nomad 的创造者)工具都独立存在,但也可以捆绑在一起。使用 Nomad,你可以通过附加consul.io 集群来实现服务发现机制。对于秘密管理,你将需要Vault

  • 这两种工具都非常强大,没有明确的选择。
  • Kubernetes 得到了强大的开源社区的支持。然而,与 Nomad 或任何其他编排器不同,Kubernetes 通过其 CRI 接口支持仅限容器的基础架构,无论是 Docker、rkt(由 CoreOS 提供)还是 Hyper。这意味着每个进程都必须在容器中。

5.3 云基础设施:AWS、谷歌云和微软 Azure

云基础设施平台提供基础设施即服务。它们支持计算,即虚拟机和数据库服务,以及存储和可用性。通过他们的基础设施,开发人员和团队可以开发、提供服务以及管理和存储他们的代码、产品和应用程序。它们的主要优势之一是它们使公司能够租用过去必须购买的计算。这使公司能够根据自己的需求扩大或缩小规模,而无需内部 DevOps 工程师。

AWS(亚马逊网络服务)谷歌云微软 Azure是最大、最稳定的云基础设施平台。AWS 是发明市场并拥有最大市场份额的领先提供商,但在功能和能力方面,Google Cloud 和 Microsoft Azure 都在取得进展并平衡了竞争环境。

你应该选择哪一个?

  • AWS 拥有最多的功能。
  • 谷歌云正在迅速改进其功能数量,并拥有最友好的用户界面。
  • Microsoft Azure 正在改进其功能的数量以及可靠性和稳定性,它们的地理范围最广,并且拥有最特殊的认证。

六、在操作阶段使用的主要工具

6.1 应用程序监控 (APM):New Relic、CA APM、AppDynamics 和 DynaTrace

应用程序监控(APM) 监控应用程序的内部部分,包括语言的垃圾收集性能、堆栈跟踪以及查询数据库和其他微服务所花费的时间。这确保了平稳运行以及跟踪使用趋势和系统运行状况的能力。

尽管我们推荐了许多成功的 APM,包括AppDynamicsDynaTraceCA APM和 New Relic ,但我们将重点关注New Relic

New Relic 具有非常强大的用户界面和详细的报告,最重要的是,它使用起来非常舒适。New Relic 为任何语言和平台提供插件,从而自动抓取指标,而无需开发人员做任何事情。开发人员需要做的就是将 New Relic 代理添加到他们正在开发的应用程序中,New Relic 将自动提取特定于平台的指标,无论是 Java、Node、PHP 等。

例如,要在 NodeJS 应用程序上加载 New Relic 代理,你需要做的就是(在安装 New Relic 之后)添加以下代码:require('newrelic'); to 应用程序的引导程序,而相关的环境变量:NEWRELIC_APP_NAME, NEWRELIC_API_KEY

加载到该应用程序上。

New Relic 报告将自动创建并显示在 New Relic 网站上应用程序的 APM 页面上。

6.2 基础设施监控:Prometheus、Sensu、Zabbix 和 sysdig

基础架构监控提供对底层基础架构的洞察,并监控服务器负载、CPU、内存等。它还检查服务、数据库和外部系统之间的连接。如果你需要深入了解根本原因,你还可以使用聚合日志服务(例如 ELK/Splunk)来可视化事件。

市场上的顶级工具是 Prometheus、SensuZabbixsysdig。在这篇文章中,我们将重点介绍Prometheus

为什么?因为Prometheus是为容器移动而适配的,使用服务发现来发现新的应用,即用户不需要手动配置新的应用进行监控,并且支持基于池的模型。但最重要的是,它是一个开源工具,归云原生计算基金会所有,而不是大公司所有,使其成为用户的工具,为用户服务。

原文链接:dzone.com/articles/the-

发布于 2022-10-20 20:00