DevOps基础

发布时间 2023-06-16 15:36:53作者: 成都青花瓷

实验介绍

DevOps,作为一个文化概念、实践和技术的组合体,可以帮助组织和企业快速生产应用程序和搭建服务框架。DevOps 模式可以使组织和企业更快地创新和增强产品。 这种速度使企业能够为其客户提供更好的服务,并在市场上更有效地竞争。

简单来说,在 DevOps 的框架下,开发团队和运营团队存在着有机的联系,彼此结合,有时候甚至会合并为一个团队来进行综合管理。与以往使用实践经验手动执行缓慢流程的方式不同,在 DevOps 的模式下,企业或者组织会采用一系列自动化工具提高团队的工作速度。

采用 DevOps 有以下好处:

  • 快速交付

    DevOps 特有的自动化部署能够帮助我们提高发布的频率和速度来更快的创新完善产品。这项特性能够帮助我们快速修复错误,响应客户需求。

  • 可靠性

    当我们选择采用 CI/CD 的方式来测试每次变更能否安全正确的运行的时候,监控和日志记录会远比人工检测有效的多。

  • 规模

    毫无疑问,无论是服务器还是运营人员,当规模大到一定程序的时候,使用人力会不可避免的出现人工错误,而使用自动化工具不仅可以快速部署,还可以提高设施及服务的一致性。

  • 安全性

    自动化工具允许我们采用多种 Access Control 的方式,例如 Role Based Access Control。这些访问策略可以使得我们在不牺牲安全性的情况下提高访问速度。

知识点

  • DevOps 的发展历程
  • 为什么要用 DevOps
  • DevOps 常用组件基础

DevOps 的发展历程

DevOps 是一个基于 Agile Method (敏捷开发) 的派生概念,但是和敏捷开发又在根本上有所区分。下面,我们将分阶段来讨论 DevOps 的不同时期。

第一阶段:Dev 2009 以前

互联网早期阶段,在这个阶段,大部分互联网公司尚未形成规模, 业务复杂度不高,访问量不大,Dev 被过分强调,而 Ops 则被忽略。但是随着网络的访问峰值逐渐升高,服务器承受的压力逐渐变大,传统的 LNMP 或者 LAMP 架构已经难以满足需要。

第二阶段:早期 Dev + Ops 2009-2014

一个业务发展良好甚至是高速发展的公司会很快摆脱第一阶段。伴随着企业蒸蒸日上,业务的复杂度也肉眼可见的提高。运营维护人员的工作量逐渐增加,不仅是管理维护设备,同时像 CDN,缓存,Web 服务器等内容也要有所了解。

第三阶段:中期 Dev + Ops 2014-2017

在这个阶段,除了头部玩家以外,其他互联网企业规模也逐渐变得庞大,DevOps 成为一个势在必行的企业网络架构搭建方法。和上一段阶段有所不同,上一阶段更倾向于把代码和逻辑都放到一个工程中,甚至最好能由几个小团队来做。

但是当企业规模再度提高以后,代码耦合严重带来的问题是致命的,牵一发而动全身,也就是我们经常说的祖传屎山不能动。在这个阶段,我们需要做的是代码架构拆分,一个团队专注做一件事情。随着大量更小的应用需求被拆分出来,我们对持续发布,持续集成的需求也随之而来。

第四阶段:后期 DevOps 2017 以后

在这个阶段,开发和运维虽然还是两个不同的部分,但是已经一体化协调联动了。开发的主要需求是持续集成,持续交付,而运维则是资源分配,缓存管理,数据库备份监控等管理需求。

随着产品的逐渐完善,Ops 的需求会逐渐被众多的运维工具所取代,运维人员依然重要,但是对于开发人员来说,可以自助依赖运维平台来实现大部分日常运维需求。

为什么要用 DevOps

那为什么我们要使用 DevOps 呢,首先,大型的互联网公司往往会招很多技术栈和运维。而我们知道,沟通往往是复杂的,人越多的团队,往往管理协调起来会越困难。使用 DevOps 的开发方法,能够减少人员的规模,精简团队。

其次,大型项目往往体量庞大,耦合严重,从开发交付经过层层审批到运维部署往往需要几天的时间,一个 Bug 有可能导致整个体系崩坏。使用 DevOps 能够提高项目稳定性,自动化部署。

DevOps 常用组件基础

DevOps 有很多可用的工具,我们几乎不可能在一篇文章中就说完所有可能用到的工具。在这篇文章中,我们将讨论几种比较流行的 DevOps 工具,这也是我们接下来即将学习到的工具。

  • Jenkins

    Jenkins 是一个采用 JAVA 编程语言构建的持续集成工具,能够自动化执行 Shell 或者 Windows 批处理命令,可以与 Ant 或者 Maven 结合使用。

  • GitLab

    相信作为程序员的你对 GitHub 一定不陌生,GitLab 则是一个利用 Ruby on Rails 开发的 Git 仓库框架。可以通过 Web 界面进行访问。此外,GitLab 还提供一些额外的功能例如浏览源代码,代码片段收集。

  • Nexus

    Nexus 则是 Maven 的 仓库管理器,利用这个工具,我们可以只在一个地方就控制访问和维护仓库中的所有构件。一些无法从外部仓库下载的构件也可以部署到我们的 Nexus 私服上。

  • Docker

    Docker 是一种特殊的容器技术,与虚拟机相似但又不完全相同,可以让我们在特殊环境中隔离运行应用程序。在 Docker 容器中,我们可以将运行环境,依赖等等都直接打包,对于集成化部署非常方便。

  • Sonar

    作为一个出色的开源代码质量管理平台,Sonar 可以通过插件的方式检查包括 C++,Java,PL/SQL,Python 在内的几十种编程语言书写的代码的漏洞以及提供相应的质量分析。

  • Prometheus

    Prometheus 是一个开源的系统监控和报警系统。通常情况下,我们会在 Kubernetes 集群环境中搭配 Prometheus 来实现更好的集群管理。除了基本的监控和报警功能,Prometheus 最值得称赞的是它足以支撑万台级别的集群的性能与稳定性

  • Grafana

    Grafana 是一个免费的开源指标分析和可视化平台,可以用于对来自各种来源的数据进行查询、分析、可视化和配置警报。同时,其功能强大支持多种数据源。

  • Skywalkin

    与 Grafana 相似, Skywalkin 则是另一款专为微服务、云原生和基于容器的架构而设计的应用程序性能监控系统。

实验总结

我们在这节课中介绍了 DevOps 的四个发展阶段,以及为什么要使用 DevOps,接着,简单论述了 DevOps 中常用的几种工具,例如 Nexus,Docker。