你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
管理云规模分析
现在,DevOps 通过帮助个人和组织开发和维护可持续的工作实践,改变了人们的思考和工作方式文化,加速企业实现价值。 DevOps 结合了开发和运营,并且通常与支持持续集成 (CI) 和持续交付 (CD) 实践的软件工程工具相关联。 这些工具和实践包括源代码管理器(例如 Git、Apache Subversion 或 Team Foundation 版本控制)和自动生成和交付管理器(例如 Azure Pipelines 或 GitHub Actions)。
DevOps 与可观测性的组合为何是提供敏捷和可缩放平台的关键。 DevOps 使团队能够实施源代码控制、CI/CD 管道、基础设施即代码、工作流和自动化。 可观察性使企业所有者、DevOps 工程师、数据架构师、数据工程师和站点可靠性工程师能够以自动化方式检测、预测、预防和解决问题,并避免消除可能会破坏生产分析和 AI 的停机时间。
源代码管理
源代码管理可确保代码和配置持续存在,并确保对更改进行跟踪和版本控制。 大多数源代码管理系统还具有内置进程,用于在代码存储库的不同分支中评审和工作。 目前,最常用的源代码管理类型为 Git,它是一种分布式版本控制系统,允许个人脱机工作并同步到中央存储库。 Git 供应商通常还使用分支,并遵循拉取请求指南来支持更改和评审流程。
分支可隔离更改或功能开发,而不会影响同时发生的其他工作。 应提倡使用分支以开发功能、修复 bug 和安全地尝试新想法。 拉取请求将从一个分支进行的更改合并到默认分支中,并且它们支持受控的评审过程。 出于安全考虑,主分支应使用拉取请求来确保代码评审。
重要
遵循云规模分析存储库的以下准则:
- 通过强制实施分支和拉取请求来保护存储库的主分支,以确保评审过程受控。
- 应将 Azure DevOps 或 GitHub 存储库用于源代码管理,以跟踪对源代码的更改,并允许多个团队成员同时开发代码。
- 应将应用程序代码和基础结构配置签入存储库。
CI/CD 管道
CI 允许团队自动测试和生成源代码,并支持快速迭代和反馈循环,以确保 CD 中的高代码质量。 管道是配置更改(软件代码或基础结构代码)的 CI 和已打包/已编译更改的 CD 的方法。 这也称为“生成和发布”。 CD 说明将应用程序自动部署到一个或多个环境。 CD 通常发生在 CI 过程之后,并使用集成测试来验证整个应用程序。
管道可以包含具有各种任务的多个阶段,并且可以具有简单到复杂的审批流程,以确保合规性和验证。 根据偏好,还可以为管道配置各种自动触发器。 对于企业级和 AI 部署,生产步骤应始终包含人工预批准,这内置于操作模型中。 CI/CD 管道应使用 GitHub Actions 或 Azure Pipelines 生成,并且应是自动触发器。
基础结构即代码
IaC 中的术语“代码”通常会引起没有开发人员背景的 IT 人员的关注,但 IaC 并不是指以典型软件开发人员编写代码的方式编写代码。 不过,它采用了软件开发过程中的许多相同工具和原则,以可预测的格式交付基础结构。
IaC 可帮助通过完整的变更控制、审核历史记录、测试、验证和审批流程在 DevOps 管道中预配、配置和管理基础结构,确保可以将任务委派给项目的适当角色,而不会影响安全性和合规性。
IaC 的两种方法是声明性方法和命令性方法:
声明性是指指定基础结构的所需状态,并让业务流程引擎执行必要的操作以达到所需状态。 在 Azure 中,这通过 Azure 资源管理器模板来完成。 此方法还可使用 Terraform 等第三方抽象层。
命令性方法是指按照定义的顺序执行特定命令。 对于 Azure,这可通过命令行界面或 PowerShell 来实现,但如果需要集成解决方案,也可以使用本机编程语言软件开发人员工具包,例如 .NET、Python 和 Java。
在 Azure 资源管理器模板中,核心预配位于“资源”部分,单个资源的配置在“属性”部分中定义。 对于 Azure Data Lake Storage Gen2,配置类似于如下:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.MachineLearningServices/workspaces/datastores",
"name": "[concat(parameters('workspaceName'), '/', parameters('datastoreName'))]",
"apiVersion": "2020-05-01-preview",
"location": "[parameters('location')]",
"properties": {
"DataStoreType": "adls-gen2",
"SkipValidation": "[parameters('skipValidation')]",
"ClientId": "[parameters('clientId')]",
"ClientSecret": "[parameters('clientSecret')]",
"FileSystem": "[parameters('fileSystem')]",
"AccountName": "[parameters('accountName')]",
"TenantId": "[parameters('tenantId')]",
"ResourceUrl": "[parameters('resourceUrl')]",
"AuthorityUrl": "[parameters('authorityUrl')]"
}
}
]
}
重要
云规模分析的每一层(例如数据管理登陆区域、数据登陆区域或数据应用程序(可创建数据产品))都应使用声明性语言(如 Azure 资源管理器或 Terraform)进行定义,并应签入存储库并通过 CI/CD 管道进行部署。 这使团队能够对 Azure 范围的基础结构和配置的更改进行跟踪和版本控制,同时支持以灵活的方式自动执行不同的体系结构级别。 本指南将指导团队使用 Git 存储库,以便始终能够查看特定 Azure 范围的状态。
工作流和自动化
团队应在多个阶段使用 CI/CD 管道,以确保开发的代码没有错误且准备好随时用于生产。 一些最佳做法包括具备开发环境、测试环境和生产环境。 还应通过为每个环境使用单独的服务在 Azure 中反映这些阶段。
平台团队负责提供和维护部署模板,以便在组织内快速缩放,并简化不熟悉 IaC 的团队的部署。 这些模板将作为方案中新项目的基线,并且需要随时间进行维护,以代表公司内的最佳做法和通用标准。
测试和生产部署只能通过 CI/CD 管道和具有提升权限的服务连接进行管理,以强制实施常见的最佳做法(例如,Azure 资源管理器模板)。
注意
数据应用程序团队应仅具有对测试和生产环境的读取访问权限,并且对这些环境的部署只能通过 CI/CD 管道和具有提升权限的服务连接来执行。 为了加快生产路径,数据应用程序团队应该对开发环境具有写入权限。