1. 学习一门编程语言

选择哪种语言并不重要,但至少学习一门编程语言是至关重要的。你可以使用该语言编写自动化脚本。

该指南推荐 Python 或 Go 作为编程语言,Bash 或 PowerShell Core 作为 DevOps 中的 Shell 脚本语言。Python 功能多样,广泛用于自动化和工具开发,而 Go 对于 Kubernetes 和 Docker 等容器技术至关重要。Bash 是 Linux 环境的理想选择,而 PowerShell Core 是跨平台的,适用于 Windows 和 Linux。更多详细信息,请查看完整指南 这里

◇Python

Python 是一种高级解释型编程语言,以其简洁性、可读性和多功能性而闻名。它支持多种编程范式,包括过程式、面向对象和函数式编程。Python 拥有广泛的标准库和丰富的第三方包生态系统,适用于从 Web 开发、数据分析到人工智能和科学计算的多种应用场景。其简洁的语法和动态类型使得快速开发和原型设计成为可能。Python 的“内置电池”哲学提供了丰富的内置功能,而其跨平台兼容性确保了代码的可移植性。凭借强大的社区支持和持续发展,Python 已成为最受欢迎的编程语言之一,广泛应用于学术界、工业界和开源项目中,从简单的脚本编写到复杂的软件开发。

◇Go

Go,也称为 Golang,是由 Google 开发的一种静态类型、编译型编程语言。它强调简洁性、效率和内置的并发支持。Go 具有快速编译、垃圾回收和强大的标准库。其语法简洁明了,易于阅读和维护。Go 的 goroutine 和 channel 为并发编程提供了强大的工具。该语言特别适合系统编程、网络服务和云原生应用。Go 的高效内存使用和快速执行使其在构建可扩展的服务器端应用和微服务方面广受欢迎。凭借其简洁性和性能,Go 在 DevOps 工具、容器技术和云基础设施项目中得到了广泛采用。

2. 操作系统

操作系统(OS)是管理计算机硬件和软件资源的基础软件,为计算机程序提供通用服务。它们充当应用程序和硬件之间的中介,处理诸如内存管理、进程调度、文件系统管理和设备控制等任务。常见的桌面操作系统包括Microsoft Windows、macOS和各种Linux发行版。移动设备通常运行iOS或Android。服务器环境通常使用Linux发行版,如Ubuntu Server、Red Hat Enterprise Linux或Windows Server。每种操作系统类型都提供不同的功能、用户界面以及与不同软件和硬件的兼容性。操作系统在系统安全、性能优化以及在不同计算设备和环境中提供一致的用户体验方面发挥着至关重要的作用。

◇Ubuntu/Debian(Linux)

Ubuntu 和 Debian 都是流行的 Linux 发行版,其中 Debian 是 Ubuntu 的上游基础。Debian 以其稳定性、广泛的软件包库和严格的测试流程而闻名,是服务器和需要长期支持的系统的首选。Ubuntu 源自 Debian,旨在提供更友好的用户体验,具有定期发布、易用性和商业支持选项。它具有更简化的安装过程、广泛的文档和活跃的社区。两个发行版都使用 Debian 的包管理系统(APT),并共享许多底层技术,但 Ubuntu 强调更精致的桌面体验和快速的发布周期。

◇RHEL/衍生版(Linux)

Red Hat Enterprise Linux (RHEL) 是一种流行的 Linux 操作系统发行版,专为企业级使用设计。它由 Red Hat, Inc. 开发和维护,采用基于订阅的模式提供。有几个基于 RHEL 或从 RHEL 衍生的 Linux 发行版,这些发行版被称为 RHEL 衍生版。一些 RHEL 衍生版的例子包括:AlmaLinux、CentOS、CloudLinux、Oracle Linux 和 Scientific Linux。RHEL 衍生版通常在企业环境中使用,因为它们提供了 RHEL 的稳定性和可靠性,同时具有免费或低成本的额外优势。

◇FreeBSD(Unix)

FreeBSD 是一种免费、开源的类 Unix 操作系统,源自 Berkeley 软件发行版 (BSD)。FreeBSD 以其稳定性、性能和先进的网络功能而闻名,广泛用于服务器环境、嵌入式系统以及作为网络设备的基础。它具有单体内核、全面的用户态工具集和用于轻松安装软件的 ports 集合。FreeBSD 支持多种架构,并包含高级功能,如 ZFS 文件系统、用于容器化的 jail 和 pf 包过滤器。虽然 FreeBSD 在桌面环境中不太常见,但它广泛应用于互联网基础设施、存储系统以及需要强大、可定制操作系统和宽松许可证的公司中。

3. 终端知识

终端(terminal)是一种基于文本的计算机界面,它通过CLI(命令行界面)与您的计算机系统进行交互。

脚本编写: Bash

Bash(Bourne Again Shell)是一种强大的 Unix shell 和命令语言解释器,是大多数 Linux 发行版和 macOS 的默认 shell。它提供了与操作系统交互的命令行界面,执行命令并通过 shell 脚本自动化任务。Bash 支持变量、控制结构、函数和命令替换,使其在系统管理、DevOps 任务和通用脚本编写中非常灵活。它能够管道命令、重定向输入/输出,并利用大量内置命令和实用程序,使其成为开发人员和系统管理员在 Unix 类环境中管理和自动化工作流程的必备工具。

编辑器: Vim, Nano, Emacs

文本编辑器是用于创建、编辑和管理文本文件的软件工具。它们从具有基本功能的简单编辑器到复杂的集成开发环境(IDE)不等。流行的文本编辑器包括:

  • Notepad:Windows 的基本编辑器,适用于简单的文本文件。

  • Vim:一种高度可配置且功能强大的编辑器,以其效率和模态界面而闻名。

  • Emacs:一种多功能编辑器,具有广泛的定制选项和丰富的插件。

  • Sublime Text:一种功能丰富的编辑器,注重速度和用户友好的界面。

  • Visual Studio Code:一种现代的开源编辑器,内置调试支持、扩展和与各种开发工具的集成。

  • 官方 Vim

  • 官方 GNU Nano

  • 官方 GNU Emacs

  • 文章 Vim 冒险

  • 视频 Vim 初学者教程

  • 视频 Linux 速成课程 - nano

  • 视频 Emacs 绝对初学者指南

◇进程监控

进程监控是对 IT 系统或组织内进程的持续观察和分析,以确保最佳性能、效率和合规性。它涉及跟踪关键指标、资源利用率和系统上运行的各个进程或应用程序的行为。这种做法有助于在问题影响整体系统性能或用户体验之前识别异常、瓶颈或潜在问题。进程监控工具通常提供有关 CPU 使用率、内存消耗、I/O 操作和线程活动的实时数据。它们通常包括警报、日志记录和进程数据可视化功能。在现代 IT 环境中,进程监控对于维护系统稳定性、优化资源分配、排查性能问题以及支持复杂分布式系统中的容量规划至关重要。

Lsof 在其标准输出中列出有关进程打开的文件信息。

◇性能监控

性能监控是对 IT 系统运行效率和有效性的系统观察和测量。它涉及收集、分析和报告各种组件(包括应用程序、网络、服务器和数据库)的关键性能指标(KPI)。此过程使用专门的工具来跟踪响应时间、吞吐量、资源利用率和错误率等指标。性能监控有助于识别瓶颈、预测潜在问题并优化系统资源。它对于维护服务级别协议(SLA)、确保用户满意度和支持容量规划至关重要。在现代 IT 环境中,性能监控通常结合实时分析、AI 驱动的洞察和自动警报系统,从而实现对复杂分布式系统的主动管理,并支持 IT 运营和服务交付的持续改进。

◇网络工具

网络工具是用于监控、分析、故障排除和管理计算机网络的重要软件实用程序。它们包括广泛的应用程序,如用于深度数据包分析的 Wireshark、用于网络扫描和安全审计的 Nmap、用于测试基本连接性的 Ping、用于可视化网络路径的 Traceroute、用于显示网络连接的 Netstat、用于命令行数据包捕获的 Tcpdump、用于性能测试的 Iperf、用于各种网络操作的 Netcat、用于 DNS 查询的 Nslookup/Dig 以及用于通过 SSH 或 telnet 进行远程访问的 PuTTY。这些工具共同使网络管理员和安全专业人员能够诊断问题、优化性能、进行安全评估并维护从小型本地网络到大型企业环境的网络基础设施的整体健康和效率。

◇文本处理

文本处理工具是使用户能够高效修改、处理和转换文本数据的实用程序或软件。这些工具通常用于脚本编写、数据清理和自动化任务。常见的文本处理工具包括用于搜索和替换的 sed(流编辑器)、用于模式扫描和数据提取的 awk 以及用于使用正则表达式搜索文本的 grep。其他流行的工具包括用于各种文本处理功能的 cutsorttruniq。这些命令行工具通常用于 UNIX/Linux 环境中,以处理大型文本文件、自动化工作流程并执行复杂的文本转换。

4. 版本控制系统

版本控制系统(VCS)是跟踪代码和文件随时间变化的工具,使多个用户能够协作项目、维护历史记录并管理代码库的不同版本。它们有助于跟踪修改、合并更改和解决冲突。VCS 有两种主要类型:集中式和分布式。集中式系统(如 Subversion 和 CVS)依赖于单一的中央仓库,而分布式系统(如 Git 和 Mercurial)允许每个用户拥有仓库的完整副本,包括其历史记录。分布式 VCS(如 Git)因其灵活性、分支能力和对协作工作流的强大支持而特别受欢迎。

◇Git

Git 是一种分布式版本控制系统,旨在跟踪软件开发过程中源代码的变化。它允许多个开发人员同时在同一项目上工作,维护修改的完整历史记录。Git 在每个开发人员的机器上都有本地仓库,支持离线工作和快速操作。它通过分支和合并支持非线性开发,促进并行工作流。Git 的分布式特性增强了协作、备份和实验。关键概念包括提交、分支、合并和远程仓库。凭借其速度、灵活性和强大的分支与合并能力,Git 已成为现代软件开发中版本控制的标准,支持 GitHub 和 GitLab 等平台。

5. VCS 托管

在团队中工作时,通常需要一个远程位置来存放代码,以便其他人可以访问它、创建自己的分支以及创建或审查拉取请求。这些服务通常包括问题跟踪、代码审查和持续集成功能。一些流行的选择包括 GitHub、GitLab、BitBucket 和 AWS CodeCommit。

◇GitHub

GitHub 是一个基于 Web 的版本控制和协作平台,使用 Git。它提供基于云的 Git 仓库托管,提供错误跟踪、任务管理和项目 wiki 等功能。GitHub 通过拉取请求促进代码审查,支持问题跟踪,并通过分叉和星标仓库等功能实现社交编码。它提供公共和私有仓库,使其在开源项目和私有开发中广受欢迎。GitHub 的生态系统包括与各种开发工具和 CI/CD 平台的集成。凭借 GitHub Actions 自动化、GitHub Packages 包管理和 GitHub Pages 网页托管等功能,它成为了一个全面的软件开发工作流平台,促进了全球开发人员之间的协作。

◇GitLab

GitLab 是一个基于 Web 的 DevOps 生命周期工具,提供带有 Wiki、问题跟踪和 CI/CD 管道功能的 Git 仓库管理器。它提供了一个完整的 DevOps 平台,以单一应用程序的形式交付,涵盖了从规划到监控的整个软件开发生命周期。GitLab 支持云托管和自托管两种选项,满足各种组织的需求。其主要功能包括集成的 CI/CD、容器注册表、包注册表和安全扫描工具。它强调内部开源方法,使团队能够在组织内更有效地协作。GitLab 内置的 DevOps 功能,加上其对单一集成平台的关注,使其在寻求简化开发流程并高效实施 DevOps 实践的组织中广受欢迎。

6. 容器

容器是轻量级、可移植且隔离的环境,用于打包应用程序及其依赖项,从而在不同的计算环境中实现一致的部署。它们封装了软件代码、运行时、系统工具、库和设置,确保应用程序无论部署在哪里都能以相同的方式运行。容器共享主机操作系统的内核,使其比传统的虚拟机更高效。像 Docker 这样的流行容器化平台提供了创建、分发和运行容器的工具。该技术支持微服务架构,简化了应用程序部署,提高了可扩展性,并通过简化从开发到生产的流程和实现更高效的资源利用来增强 DevOps 实践。

◇Docker

Docker 是一个开源平台,使用容器化技术自动化应用程序的部署、扩展和管理。它使开发人员能够将应用程序及其所有依赖项打包到称为容器的标准化单元中,确保在不同环境中的一致行为。Docker 提供了全机器虚拟化的轻量级替代方案,使用操作系统级虚拟化在单个主机上运行多个隔离系统。其生态系统包括用于构建、共享和运行容器的工具,如 Docker Engine、Docker Hub 和 Docker Compose。Docker 已成为现代 DevOps 实践的重要组成部分,促进了微服务架构、持续集成/部署管道以及开发和生产环境中的高效资源利用。

7. Web 服务与代理配置

学习如何设置:

  • 正向代理
  • 反向代理
  • 负载均衡器
  • 防火墙
  • 缓存服务器
  • Web 服务器

◇正向代理

正向代理,通常简称为代理,是位于客户端设备和互联网之间的服务器,负责将客户端的请求转发到 Web 服务器。它代表客户端行事,可能提供匿名性、安全性和访问控制等好处。正向代理可以缓存频繁请求的内容,过滤网络流量,绕过地理限制,并记录用户活动。它们通常在企业网络中使用,以强制执行互联网使用策略,通过隐藏内部网络细节来增强安全性,并通过缓存提高性能。与反向代理不同,反向代理代表服务器提供资源,而正向代理主要服务于客户端需求,作为客户端与更广泛的互联网之间的中介。

◇反向代理

反向代理是位于客户端设备和后端服务器之间的服务器,拦截来自客户端的请求并将其转发到适当的后端服务器。它代表服务器行事,提供负载均衡、缓存、SSL 终止和安全性等好处。反向代理可以将传入的流量分配到多个服务器以提高性能和可靠性,缓存频繁请求的内容以减少服务器负载,处理 SSL 加密和解密以减轻后端服务器的负担,并通过隐藏服务器细节提供额外的安全层。常见的用途包括提高 Web 应用程序性能、启用微服务架构以及增强 Web 托管环境的安全性。流行的反向代理软件包括 NGINX、HAProxy 和 Apache 的 mod_proxy。

◇缓存服务器

缓存服务器,也称为代理服务器或缓存服务器,是一种专用的网络服务器,用于本地保存网页和其他互联网内容,以减少带宽使用、服务器负载和感知延迟。它通过拦截客户端的请求,保存来自 Web 服务器的响应,并为后续相同信息的请求提供缓存内容。缓存服务器可以显著提高响应时间并减少网络流量,特别是对于频繁访问的内容。它们通常用于内容分发网络(CDN)、企业网络和互联网服务提供商,以优化性能、降低成本并通过从更接近最终用户的位置提供内容来增强用户体验。

◇防火墙

防火墙是一种网络安全设备,它根据组织先前建立的安全策略监控和过滤传入和传出的网络流量。它是位于私有内部网络和公共互联网之间的屏障。防火墙的主要目的是允许无害的流量进入并阻止危险的流量。

◇负载均衡器

负载均衡器充当交通警察,位于服务器前面,将客户端请求路由到能够满足这些请求的所有服务器,以最大化速度和容量利用率,并确保没有一台服务器过载。如果其中一台服务器宕机,负载均衡器会将流量重定向到剩余的在线服务器。

◇Nginx(Web 服务器

NGINX 是一个高性能、开源的 Web 服务器、反向代理和负载均衡器。NGINX 以其处理并发连接的效率而闻名,它使用事件驱动、异步的架构,消耗最少的资源。它擅长提供静态内容、将请求代理到应用服务器以及在多个后端之间进行负载均衡。NGINX 因其提高网站性能、可扩展性和安全性的能力而被广泛使用。它支持各种协议,包括 HTTP、HTTPS、SMTP 和 WebSocket,并提供 SSL/TLS 终止、缓存和内容压缩等功能。NGINX 在小型和大型企业环境中都很受欢迎,是许多现代 Web 架构中的关键组件,特别是在微服务和容器化部署中。

8. 网络与协议

网络协议是标准化的规则和程序,用于管理数据在计算机网络中的传输、接收和解释。它们定义了数据通信中的格式、时序、序列和错误控制。关键协议包括:

◇FTP/SFTP(文件传输

FTP(文件传输协议)是一种标准的网络协议,用于在计算机网络中的客户端和服务器之间传输文件。它采用客户端-服务器模型,通常在客户端和服务器之间使用单独的控制和数据连接。FTP 允许用户上传、下载和管理远程系统上的文件,支持认证和匿名访问。尽管 FTP 因其简单性和兼容性而被广泛使用,但由于它以明文传输数据和凭证,存在安全限制。因此,更安全的替代方案如 SFTP(SSH 文件传输协议)和 FTPS(FTP 安全)在敏感数据传输中越来越受欢迎。尽管 FTP 已经存在多年,它仍然在各种文件传输需求中使用,特别是在遗留系统和安全性要求较低的环境中。

SFTP(SSH 文件传输协议)是一种安全的文件传输协议,通过安全外壳(SSH)数据流提供文件访问、传输和管理功能。它被设计为 SSH 的扩展,以提供安全的文件传输能力。SFTP 在传输过程中加密命令和数据,防止窃听和中间人攻击。与传统的 FTP 不同,SFTP 使用单一连接,不分离控制通道和数据通道。它支持恢复中断的传输、目录列表和远程文件删除等功能。SFTP 在企业环境中广泛用于安全文件传输、自动化脚本以及作为 FTP 的更安全替代方案。它与 SSH 的集成使其成为系统管理员和开发人员在安全远程系统操作中的首选。

◇DNS(域名服务

DNS(域名系统)是一种分层的、分散的命名系统,用于连接到互联网或私有网络的计算机、服务或其他资源。它将人类可读的域名(如 www.example.com)转换为计算机用于在网络上相互识别的 IP 地址(如 192.0.2.1)。DNS 充当互联网的电话簿,使用户能够使用易于记忆的名称访问网站,而不是使用数字 IP 地址。该系统由 DNS 服务器、解析器和记录(如 A、CNAME、MX)组成,共同工作以高效地路由互联网流量。DNS 对互联网功能至关重要,影响从网页浏览和电子邮件到现代云架构中的负载均衡和服务发现的一切。

◇HTTP(Web 通信

HTTP(超文本传输协议)是万维网上数据通信的基础。它是一种应用层协议,支持客户端(通常是 Web 浏览器)和服务器之间传输各种类型的数据,主要是网页及其组件。HTTP 采用请求-响应模型,客户端发送资源请求,服务器响应请求的数据或错误消息。它是无状态的,意味着每个请求都独立于之前的请求。HTTP 支持各种方法(GET、POST、PUT、DELETE 等)以执行不同类型的操作。虽然最初设计为纯文本传输,但现在广泛采用其安全版本 HTTPS,使用加密来保护传输中的数据。

◇HTTPS(Web 通信

HTTPS(超文本传输协议安全)是 HTTP 的安全版本,加密客户端和服务器之间交换的数据。它使用 SSL/TLS 协议提供身份验证、数据完整性和保密性。HTTPS 通过加密所有通信来防止窃听、篡改和中间人攻击。它使用数字证书来验证网站的身份,增强信任和安全性。HTTPS 对于保护登录凭证和财务数据等敏感信息至关重要。它已成为安全 Web 通信的标准,主要浏览器将非 HTTPS 网站标记为“不安全”。HTTPS 还提供 SEO 优势,并且是许多现代 Web 功能和渐进式 Web 应用程序的必备条件。

◇SSL/TLS(Web 通信

安全套接字层(SSL)和传输层安全(TLS)是用于提供互联网通信安全性的加密协议。这些协议加密通过 Web 传输的数据,因此任何试图拦截数据包的人都无法解释数据。一个重要区别是,由于安全漏洞,SSL 现在已被弃用,大多数现代 Web 浏览器不再支持它。但 TLS 仍然是安全的并得到广泛支持,因此最好使用 TLS。

◇SSH(Web 通信

SSH(安全外壳)是一种加密网络协议,用于在不安全的网络上安全地访问和管理远程机器。它提供加密通信,确保机密性和完整性,并允许安全文件传输、命令执行和隧道。SSH 广泛用于服务器、云基础设施和网络设备的远程管理,通常采用基于密钥的认证或密码。像 OpenSSH 这样的工具通常用于建立 SSH 连接,提供比 Telnet 等较旧、较不安全的协议更安全的替代方案。

◇OSI 模型

OSI(开放系统互连)模型是一个概念框架,将电信或计算系统的功能标准化为七个抽象层。这些层从下到上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层在数据通信过程中都有特定的用途,下层处理更多与硬件相关的任务,而上层处理软件和用户界面方面的问题。该模型有助于理解数据如何在网络中移动、排查网络问题以及设计网络协议和硬件。虽然在现实世界的实现中并不严格遵循 OSI 模型,但它仍然是网络工程师和开发人员的宝贵教育工具和参考点,为讨论网络操作和架构提供了通用语言。

◇白名单/灰名单(电子邮件协议

白名单涉及创建受信任实体(如 IP 地址、电子邮件地址或应用程序)的列表,这些实体被明确允许访问系统或发送消息。默认情况下,任何不在白名单上的内容都会被拒绝。白名单通过限制访问仅限已知和批准的实体来提供高级别的安全性,但它可能不够灵活,并且需要频繁更新以适应合法的更改。灰名单是一种更灵活的方法,主要用于电子邮件过滤。当从未知发件人收到电子邮件时,服务器会暂时拒绝它,并返回“稍后再试”的响应。合法的邮件服务器会在短暂的延迟后重新发送电子邮件,而垃圾邮件发送者通常不会重试,因此被阻止。这种方法通过利用垃圾邮件发送者通常不遵循重试机制的事实来减少垃圾邮件。灰名单可能比白名单更少侵入性,但它可能会对首次发件人造成轻微的电子邮件传递延迟。

◇SMTP(电子邮件协议

电子邮件正在成为当今互联网上最有价值的服务之一。大多数互联网系统使用 SMTP 作为将邮件从一个用户传输到另一个用户的方法。SMTP 是一种推送协议,用于发送邮件,而 POP(邮局协议)或 IMAP(互联网消息访问协议)用于在接收方检索这些电子邮件。SMTP 是一种应用层协议。想要发送邮件的客户端打开与 SMTP 服务器的 TCP 连接,然后通过连接发送邮件。SMTP 服务器始终处于监听模式。一旦它侦听到来自任何客户端的 TCP 连接,SMTP 进程就会通过端口 25 启动连接。成功建立 TCP 连接后,客户端进程会立即发送邮件。

◇DMARC(电子邮件协议

DMARC(基于域的消息认证、报告和一致性)是一种电子邮件认证协议,建立在 SPF 和 DKIM 之上,以防范电子邮件欺骗和钓鱼攻击。它允许域名所有者指定电子邮件接收者应如何处理未通过认证检查的消息。DMARC 为域名所有者提供了一种反馈机制,以接收电子邮件认证结果的报告,帮助他们监控和改进电子邮件安全性。通过实施 DMARC 策略,组织可以提高其电子邮件的可交付性,保护其品牌声誉,并减少其域名被用于欺诈性电子邮件活动的可能性。DMARC 被主要电子邮件提供商广泛采用,并被认为是现代电子邮件安全策略的关键组成部分。

◇IMAP(电子邮件协议

IMAP(互联网消息访问协议)是一种标准的电子邮件协议,允许电子邮件客户端访问存储在邮件服务器上的消息。与 POP3 不同,IMAP 将电子邮件保留在服务器上,从而可以从多个设备访问并保持同步。它支持文件夹结构、消息标记和部分消息检索,使其在管理大量电子邮件时非常高效。IMAP 允许用户在服务器端进行搜索,减少带宽使用。它设计用于在服务器上长期存储邮件,非常适合需要从各种设备或位置访问电子邮件的用户。IMAP 的同步能力和服务器端管理功能使其成为大多数现代电子邮件系统的首选协议,特别是在移动和多设备环境中。

◇SPF(电子邮件协议

发件人策略框架(SPF)用于验证电子邮件的发件人。通过设置 SPF 记录,互联网服务提供商可以验证邮件服务器是否有权为特定域名发送电子邮件。SPF 记录是 DNS TXT 记录,包含允许代表您的域名发送电子邮件的 IP 地址列表。

◇POP3S(电子邮件协议

POP3(端口 110)或 POP3s(端口 995)代表邮局协议。它是一种互联网标准协议,本地电子邮件软件客户端使用它通过 TCP/IP 连接从远程邮件服务器检索电子邮件。互联网服务提供商托管的电子邮件服务器也使用 POP3 来接收和保存其订阅者的电子邮件。这些订阅者会定期使用电子邮件客户端软件检查远程服务器上的邮箱,并下载发送给他们的电子邮件。一旦电子邮件客户端下载了电子邮件,它们通常会被从服务器上删除,尽管一些电子邮件客户端允许用户指定邮件在服务器上保留一段时间。

◇域名密钥(电子邮件协议

域名密钥是一种电子邮件认证方法,旨在验证电子邮件发件人的域名并确保消息的完整性。由雅虎开发,它是 DKIM(域名密钥识别邮件)的前身。域名密钥使用公钥加密,允许电子邮件系统验证消息是由授权发件人发送的,并且在传输过程中未被篡改。发送服务器使用私钥对发出的电子邮件进行签名,接收服务器可以使用发件人 DNS 记录中发布的公钥验证签名。虽然域名密钥在很大程度上已被 DKIM 取代,但它在旨在打击电子邮件欺骗和钓鱼攻击的电子邮件认证技术的发展中发挥了关键作用。

9. 云服务提供商

云服务提供商提供了一层API来抽象基础设施,并根据安全和计费边界进行资源调配。云运行在数据中心的服务器上,但这些抽象巧妙地给人一种与单一“平台”或大型应用程序交互的错觉。通过云服务提供商快速调配、配置和保护资源的能力,是现代DevOps巨大成功和复杂性的关键。

◇AWS

自2011年以来,亚马逊网络服务(AWS)一直是市场领先的云计算平台,领先于Azure和Google Cloud。AWS提供超过200种服务,数据中心遍布全球。AWS服务是一个在线平台,提供可扩展且经济高效的云计算解决方案。它是一个广泛采用的云平台,提供多种按需操作,如计算能力、数据库存储、内容交付等。

◇Azure

微软Azure是一个全面的云计算平台,提供广泛的服务,用于通过微软管理的数据中心构建、部署和管理应用程序。它提供基础设施即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)解决方案,支持各种编程语言、工具和框架,包括微软特定和第三方系统。Azure的服务涵盖计算、分析、存储、网络等,使企业能够扩展和转型其业务,利用人工智能和机器学习,并实施强大的安全措施,同时通过其按需付费的定价模式可能降低IT成本。

◇Google Cloud

Google Cloud是谷歌的云计算服务产品,提供超过150种产品/服务供选择。它由一组物理资产(如计算机和硬盘驱动器)和虚拟资源(如虚拟机)组成,这些资源位于谷歌的数据中心内。它运行在谷歌内部用于其终端用户产品(如搜索、Gmail、Google Drive和YouTube)的相同基础设施上。

10. 无服务器计算

无服务器计算是一种云计算执行模型,云提供商动态管理基础设施,使开发人员能够专注于编写代码。在此模型中,资源根据需求自动分配和扩展,计费基于实际使用情况而非预购容量。无服务器架构通常用于事件驱动的工作负载和微服务,提高开发效率并减少运营开销。流行的无服务器计算平台包括 AWS Lambda、Azure Functions 和 Google Cloud Functions。

◇AWS Lambda

AWS Lambda 是一种无服务器计算服务,允许您运行代码而无需预置或管理服务器。它会自动扩展,响应触发器执行代码,并且仅按消耗的计算时间计费。Lambda 支持多种编程语言,并与其他 AWS 服务无缝集成,使其成为构建微服务、自动化任务和处理数据流的理想选择,同时最大限度地减少运营开销。

◇Cloudflare

Cloudflare 是一家互联网公司,提供一系列服务来帮助保护和加速网站和应用程序。其核心是内容分发网络(CDN)和反向代理云提供商。这意味着它充当网站源服务器与其访问者之间的中介,缓存内容并过滤恶意流量。Cloudflare 由 Matthew Prince、Lee Holloway 和 Michelle Zatlyn 于 2009 年 7 月创立。该公司获得风险投资,并于 2019 年 8 月向纽约证券交易所提交了 S-1 文件进行 IPO。它于 2019 年 9 月 13 日以每股 15 美元的价格公开交易。

11. 资源预配

资源预配是指设置和配置必要的 IT 基础设施以支持应用程序或服务的过程。这包括分配和准备资源,如服务器、存储、网络和软件环境。预配可以手动完成,但在现代 DevOps 实践中,通常使用 Terraform、Pulumi 或 CloudFormation 等工具进行自动化。这些工具允许基础设施即代码(IaC),其中整个预配过程在版本控制的脚本或模板中定义。这种方法实现了跨环境的一致、可重复部署,减少了人为错误,并促进了快速扩展和灾难恢复。

◇Terraform

Terraform 是 HashiCorp 开发的开源基础设施即代码(IaC)工具,用于使用声明性配置文件定义、预配和管理云和本地基础设施。它支持 AWS、Azure 和 Google Cloud 等多个云提供商,以及各种服务和平台,实现了跨多样化环境的基础设施自动化。Terraform 的状态管理和模块化结构允许高效扩展、重用和版本控制基础设施。它广泛用于自动化基础设施预配,减少手动错误,并提高基础设施的一致性和可重复性。

12. 配置管理

配置管理是一种系统工程过程,用于在产品生命周期内建立产品属性的一致性。在技术领域,配置管理是一种 IT 管理过程,用于跟踪 IT 系统的各个配置项。IT 系统由粒度不同的 IT 资产组成。IT 资产可以代表一个软件、一台服务器或一组服务器。以下重点介绍配置管理在 IT 软件资产和软件资产 CI/CD 中的直接应用。软件配置管理是一种系统工程过程,用于跟踪和监控软件系统配置元数据的更改。在软件开发中,配置管理通常与版本控制和 CI/CD 基础设施一起使用。本文重点介绍其在敏捷 CI/CD 软件环境中的现代应用和使用。

◇Ansible

Ansible 是一种开源的自动化工具,用于配置管理、应用程序部署和任务自动化。它通过使用声明性语言定义所需状态和配置,简化了管理和编排基础设施的过程。Ansible 使用 YAML 文件(称为 playbooks)来描述要在远程系统上执行的任务。它采用无代理架构,这意味着它使用 SSH 或其他远程协议在目标机器上执行任务,而无需安装额外的软件。Ansible 广泛用于自动化重复任务、确保一致性以及管理跨各种环境的大规模部署。

13. CI/CD 工具

CI/CD 是一种通过在应用程序开发的各个阶段引入自动化来频繁向客户交付应用程序的方法。CI/CD 的主要概念包括持续集成、持续交付和持续部署。CI/CD 解决了新代码集成可能对开发和运维团队造成的问题。具体来说,CI/CD 在应用程序的整个生命周期中引入了持续的自动化和监控,从集成和测试阶段到交付和部署。这些相互关联的实践通常被称为“CI/CD 管道”,并由开发和运维团队以敏捷的方式共同支持,采用 DevOps 或站点可靠性工程(SRE)方法。

◇CircleCI

CircleCI 是一个流行的持续集成和持续交付(CI/CD)平台,它自动化了软件项目的构建、测试和部署过程。它支持多种编程语言,并与各种版本控制系统集成,主要是 GitHub 和 Bitbucket。CircleCI 使用 YAML 配置文件来定义管道,允许开发人员指定复杂的工作流、并行作业执行和自定义环境。它提供了缓存、工件存储和 Docker 层缓存等功能,以加快构建速度。通过其基于云和自托管的选项,CircleCI 为各种规模的项目提供了可扩展的解决方案,帮助团队提高代码质量、加速发布周期并简化开发工作流。

◇GitLab CI

GitLab CI 是 GitLab 生态系统中的一个集成持续集成和交付平台。它通过 YAML 文件中定义的管道自动化构建、测试和部署代码更改的过程。GitLab CI 提供了并行执行、容器注册表集成和自动 DevOps 等功能,使团队能够直接从其 GitLab 仓库中实施强大的 CI/CD 工作流,而无需额外的工具或基础设施。

◇GitHub Actions

GitHub Actions 是一个直接集成到 GitHub 仓库中的持续集成和持续交付(CI/CD)平台。它允许开发人员自动化软件工作流,包括构建、测试和部署应用程序。Actions 在 YAML 文件中定义,并由各种 GitHub 事件触发,如推送、拉取请求或计划任务。该平台提供了一个预构建 Actions 的市场,并支持自定义 Actions。GitHub Actions 提供了矩阵构建、并行作业执行,并支持多种操作系统和语言。它与 GitHub 的生态系统无缝集成,促进了自动化代码审查、问题跟踪和项目管理。该工具使开发人员能够在 GitHub 工作流中高效地实施 DevOps 实践,从而提高生产力和代码质量。

14. 密钥管理

密钥管理是指在组织的IT基础设施中安全地处理、存储和分发敏感信息,如密码、API密钥和证书。它涉及使用专门的工具和实践来保护密钥免受未经授权的访问,同时确保在需要时授权系统和用户可以访问这些密钥。密钥管理解决方案通常提供静态和传输中的加密、访问控制、审计、轮换策略以及与各种平台和服务的集成等功能。这些系统旨在集中存储密钥,降低暴露风险,自动化密钥生命周期管理,并提供与应用程序和DevOps工作流的无缝集成。在现代复杂的IT环境中,有效的密钥管理对于维护安全性、合规性和操作效率至关重要。

◇Vault

HashiCorp Vault 是一款专为安全管理密钥和保护敏感数据(如密码、API密钥和加密密钥)而设计的工具。它提供集中式密钥管理、访问控制和审计功能。Vault 支持多种身份验证方法和动态密钥,允许动态生成密钥并管理其生命周期。它还提供强大的加密功能,包括静态和传输中的数据加密。Vault 广泛应用于DevOps环境中,以确保敏感信息的安全和可扩展管理,并与各种基础设施和应用程序平台集成。

15. 基础设施监控

监控是指使基础设施的性能和状态可见的实践。本节包含用于监控的常见工具。这是一个供应商众多的领域——在研究特定产品或项目的材料时要谨慎,因为有许多相互矛盾的观点和策略在使用。对于最复杂的面向互联网的应用程序,没有单一的解决方案,因此了解这些工具的优缺点将有助于您规划如何为特定目标监控系统。

◇Prometheus

Prometheus 是一个开源的系统监控和警报工具包,专为可靠性和可扩展性而设计。它具有多维数据模型、灵活的查询语言(PromQL)和高效的时间序列数据库。Prometheus 以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并在观察到指定条件时触发警报。它采用拉取模型,从HTTP端点抓取指标,并支持动态环境的服务发现。Prometheus 特别适合监控微服务和容器化环境,与Kubernetes等系统无缝集成。其生态系统包括用于第三方系统的各种导出器和内置的警报管理器。Prometheus 在云原生架构中被广泛采用,是现代可观测性堆栈的核心组件,通常与Grafana等工具一起用于可视化。

◇Grafana

Grafana 是一个开源的分析和交互式可视化Web应用程序。它连接到各种数据源,包括时间序列数据库、关系数据库和云服务,以创建可定制的仪表板。Grafana 擅长可视化基础设施和应用程序分析的时间序列数据,支持多种图表类型和插件。它具有警报功能、用户身份验证和基于角色的访问控制。Grafana 通常用于监控系统指标、应用程序性能和业务分析。其灵活性和从多个数据源组合数据的能力使其在DevOps环境中广受欢迎,用于创建全面的监控解决方案。Grafana 的用户友好界面和广泛的定制选项使用户能够创建视觉上吸引人且信息丰富的仪表板,用于实时数据可视化和分析。

◇Datadog

Datadog 是一个用于大规模应用程序的监控和分析平台。它包括基础设施监控、应用程序性能监控、日志管理和用户体验监控。Datadog 通过400多个集成聚合整个堆栈的数据,用于故障排除、警报和图表绘制。

16. 日志管理

日志管理是处理由所有软件应用程序及其运行基础设施生成的日志事件的过程。它包括日志的收集、聚合、解析、存储、分析、搜索、归档和处置,最终目标是利用这些数据进行故障排除和获取业务洞察,同时确保应用程序和基础设施的合规性和安全性。

◇Loki

Loki是由Grafana Labs设计的一个水平可扩展、高可用、多租户的日志聚合系统。它的设计初衷是成本效益高且易于操作,特别适合存储和查询来自Kubernetes集群的日志。Loki索引的是日志的元数据而非全文,这使得它比传统的日志管理系统更节省资源。它使用与Prometheus相同的查询语言(LogQL),使得熟悉Prometheus的用户更容易上手。Loki与Grafana无缝集成以实现可视化,并经常与Prometheus和Grafana一起用于云原生可观测性堆栈中。其设计注重简洁性,使其成为在容器化环境中寻求高效日志管理的组织的一个有吸引力的选择。

◇Elastic Stack

Elastic Stack,前身为ELK Stack,是一组用于实时搜索、分析和可视化数据的开源工具。它由四个主要组件组成:Elasticsearch(一个分布式搜索和分析引擎)、Logstash(一个数据处理管道)、Kibana(一个数据可视化管理工具)和Beats(轻量级数据收集器)。这些工具共同使用户能够从各种来源收集数据,处理和丰富数据,将其存储在可搜索的格式中,并创建交互式可视化和仪表板。Elastic Stack广泛用于日志分析、应用程序性能监控、安全信息和事件管理(SIEM)以及商业智能应用,提供了处理大量多样化数据的可扩展性和灵活性。

17. 容器编排

容器编排是管理和自动化容器生命周期的过程,包括其部署、扩展和跨多个主机的网络连接。这是在生产环境中运行复杂容器化应用程序的关键技术。

通过利用Kubernetes、Docker Swarm和Apache Mesos等工具,组织可以确保其应用程序的高可用性、可扩展性和可靠性。容器编排通过自动化日常任务简化了操作,并为微服务、云原生开发和DevOps实践提供了坚实的基础。

◇Kubernetes

Kubernetes是一个开源的容器管理平台,也是该领域的主导产品。使用Kubernetes,团队可以在多个底层主机上部署镜像,并通过YAML定义其所需的可用性、部署逻辑和扩展逻辑。Kubernetes源自Google的内部平台Borg,该平台用于配置和分配计算资源(类似于Microsoft Azure的Autopilot和Aquaman系统)。Kubernetes的流行使其成为DevOps工程师越来越重要的技能,并引发了整个行业中平台团队的创建。这些平台工程团队通常存在的唯一目的是使其产品开发同事能够轻松使用Kubernetes。

18. 应用监控

应用监控涉及对软件应用程序的持续观察和分析,以确保其性能最佳、识别问题并提供对其操作的洞察。此过程包括跟踪响应时间、错误率、资源利用率(CPU、内存和磁盘)以及事务性能等指标。应用监控工具收集和分析数据以检测异常,提供潜在问题的警报,并提供应用程序行为和性能的详细洞察。通过监控应用程序,组织可以主动解决问题、优化性能并改善用户体验,最终确保其软件系统的可靠性和效率。

◇OpenTelemetry

OpenTelemetry 是一个用于云原生软件的开源可观测性框架,提供了一种标准化的方式来收集和导出遥测数据,如指标、日志和跟踪。它旨在通过提供供应商中立、统一的 API、库、代理和工具,使可观测性成为云原生应用程序的内置功能。OpenTelemetry 简化了跨不同语言和平台的可观测性实现,使开发人员能够一次性检测其代码并将数据发送到多个后端。它支持许多流行框架和库的自动检测,减少了向应用程序添加可观测性所需的工作量。通过提供一致的数据收集和导出方法,OpenTelemetry 促进了现代分布式软件环境中可观测性工具和平台之间更好的互操作性。

19. 制品管理

在软件开发中,制品是开发生命周期中产生的各种输出,包括源代码、二进制文件、文档、配置文件、构建输出和测试结果。这些制品对于管理、部署和维护应用程序至关重要,因为它们为开发、测试和生产环境提供了必要的资源和文档。它们有助于跟踪项目进度,确保一致性,并促进软件系统的高效交付和操作。

◇Artifactory

Artifactory 是一个通用的 DevOps 解决方案,用于托管、管理和分发二进制文件和制品。任何类型的二进制软件——如应用程序安装程序、容器镜像、库、配置文件等——都可以使用 Artifactory 进行管理、保护、存储和交付。名称“Artifactory”反映了它可以托管软件开发“工厂”中所需的任何类型的“制品”。在软件开发中,制品是在软件开发和交付过程中产生的任何对象。制品包括用于安装和运行应用程序的文件,以及配置或管理软件所需的任何补充信息。Artifactory 作为 DevOps 流程的中心枢纽。所有制品、依赖项、包等最终都会被放入并从 Artifactory 中提取。

20. GitOps

GitOps 是一种使用 Git 作为单一事实来源来管理基础设施和应用程序部署的范式。它通过使用 Git 仓库存储基础设施和应用程序的声明性描述来扩展 DevOps 实践。对期望状态的更改通过拉取请求进行,这些请求会触发自动化过程以使实际状态与期望状态保持一致。GitOps 依赖于持续部署工具,这些工具会自动将实时系统与 Git 中定义的期望状态进行协调。这种方法提供了基础设施的版本控制、改进的可审计性、更轻松的回滚和增强的协作等好处。GitOps 特别适合云原生应用程序和 Kubernetes 环境,提供了一种简化的方法来管理复杂的分布式系统。

◇ArgoCD

Argo CD 是一个基于 GitOps 方法的 Kubernetes 持续交付工具。它用于通过持续同步生产环境中的期望应用程序状态与实际应用程序状态来自动化云原生应用程序的部署和管理。在 Argo CD 工作流中,应用程序的更改通过提交代码或配置更改到 Git 仓库来进行。Argo CD 监控仓库并自动使用持续交付管道将更改部署到生产环境。该管道由 Git 仓库的更改触发,并负责构建、测试和将更改部署到生产环境。Argo CD 旨在成为一种简单高效的管理云原生应用程序的方式,因为它允许开发人员使用熟悉的工具和流程对系统进行更改,并提供系统所有更改的清晰和可审计的历史记录。它通常与 Helm 等工具结合使用,以自动化云原生应用程序的部署和管理。

21. 服务网格

服务网格是一个专门的基础设施层,用于管理分布式应用程序中微服务之间的通信。它提供了负载均衡、服务发现、加密、可观测性和流量管理等功能,使服务能够安全高效地进行通信。通过将网络相关的关注点从应用代码中抽象出来,服务网格增强了可靠性和安全性,同时简化了微服务交互的管理。流行的服务网格实现包括 Istio、Linkerd 和 Consul。

◇Istio

Istio 是一个开源的服务网格平台,提供了一种控制微服务之间如何共享数据的方式。它包括允许 Istio 集成到任何日志平台、遥测或策略系统中的 API。Istio 设计用于在各种环境中运行:本地、云托管、Kubernetes 容器中、虚拟机中运行的服务等。

◇Consul

Consul 是一个服务网格解决方案,提供了一个功能齐全的控制平面,具有服务发现、配置和分段功能。这些功能可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul 需要一个数据平面,并支持代理和原生集成模型。Consul 附带一个简单的内置代理,因此一切都可以开箱即用,但也支持第三方代理集成,如 Envoy。

22. 云设计模式

云设计模式是解决云计算架构中常见问题的可重用解决方案。这些模式解决了分布式系统中与可扩展性、可靠性、安全性和性能相关的挑战。它们提供了设计和实现云原生应用程序的最佳实践,涵盖了数据管理、消息传递、弹性和部署等方面。示例包括用于处理故障的断路器模式、用于分离读写操作的 CQRS 模式以及用于将应用程序组件部署到单独进程或容器中的边车模式。通过利用这些模式,开发人员可以创建更健壮、高效和可维护的云应用程序,从而更好地利用云平台的优势。

◇可用性

可用性是指系统正常运行并按预期工作的时间百分比,通常称为正常运行时间。可用性可能受到硬件或软件错误、基础设施问题、恶意攻击和系统负载的影响。许多云提供商通常为用户提供服务水平协议 (SLA),其中规定了承诺的正常运行时间/停机时间的确切百分比。可用性与可靠性相关。例如,一家公司可能承诺其服务的正常运行时间为 99.99%。

◇数据管理

数据管理是云应用程序的关键要素,影响大多数质量属性。数据通常托管在不同位置和跨多个服务器上,原因包括性能、可扩展性或可用性,这可能会带来一系列挑战。例如,必须保持数据一致性,并且通常需要在不同位置之间同步数据。此外,数据应在静止、传输和通过授权访问机制时受到保护,以维护机密性、完整性和可用性的安全保证。有关更多信息,请参阅 Azure 安全基准数据保护控制。

◇设计与实现

良好的设计包括组件设计和部署的一致性和连贯性、简化管理和开发的可维护性以及允许组件和子系统在其他应用程序和其他场景中使用的可重用性。在设计和实现阶段做出的决策对云托管应用程序和服务的质量和总拥有成本有巨大影响。

◇管理与监控

DevOps 管理和监控涉及监督从规划、开发、集成和测试、部署到操作的整个开发过程。它涉及生产环境中应用程序、服务和基础设施状态的完整实时视图。实时流、历史回放和可视化等功能是应用程序和服务监控的关键组件。