你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

基本 Web 应用程序

Azure 应用服务
Azure Key Vault
Azure Monitor
Azure SQL 数据库

此体系结构显示基本 Web 应用程序的最基本组件。 可以使用该体系结构生成 Web 应用程序,然后根据需要自定义该应用程序。

体系结构

Diagram showing the reference architecture for a basic web application in Azure.

下载此体系结构的 Visio 文件

组件

  • Azure 应用服务是用于创建和部署云应用程序的完全托管平台。 通过它可为 Web 应用定义一组计算资源,来运行、部署 Web 应用和配置部署槽位。
  • 借助部署槽位,可分阶段完成部署,然后将该部署交换为生产部署。 这样,便可以避免直接部署到生产环境。 如需特定建议,请参阅下面的发布工程和部署部分。
  • IP 地址:应用服务应用具有一个公共 IP 地址和域名。 域名是 azurewebsites.net 的子域,例如 contoso.azurewebsites.net
  • Azure DNS 是 DNS 域的托管服务,它使用 Microsoft Azure 基础结构提供名称解析。 通过在 Azure 中托管域,可以使用与其他 Azure 服务相同的凭据、API、工具和计费来管理 DNS 记录。 若要使用自定义域名(例如 contoso.com),请创建可将自定义域名映射到 IP 地址的 DNS 记录。 有关详细信息,请参阅在 Azure 应用服务中配置自定义域名
  • Azure SQL 数据库是云中的关系数据库即服务。 SQL 数据库与 Microsoft SQL Server 数据库引擎共享其代码库。 也可使用 Azure Database for MySQLAzure Database for PostgreSQL,具体取决于应用程序要求。 这些替代项是完全托管的数据库服务,基于开源 MySQL 服务器和 Postgres 数据库引擎。
  • Microsoft Entra ID 是一种基于云的标识和访问管理服务,可让员工访问为你的组织开发的云应用。
  • Azure Monitor 是一种解决方案,用于在环境中收集、分析和处理日志和指标。
  • Azure Key Vault 支持机密管理、密钥管理和证书管理。 它可存储应用程序机密,例如数据库连接字符串。

建议

你的要求可能与代码中描述和提供的体系结构不同。 该代码使用生产配置进行部署。 请按照建议自定义部署来满足你的需求。

应用服务计划

应用服务计划具有不同的定价层。 每个定价层支持多种实例大小,具体视核心数和内存而定。 可在部署后,在左侧导航中选择“纵向扩展(应用服务计划)”来更改定价层。 下面是一些应用服务建议:

  • 在“基本”、“标准”和“高级”定价层上运行生产工作负载。 在这三个层中,应用在专用虚拟机实例上运行,并分配了可横向扩展的资源。
  • 如果需要自动缩放和 TLS/SSL,请使用标准层和顶级层。
  • 创建其他应用服务计划来进行测试和开发。 使用免费层和共享层(预览版)进行测试和开发,提高成本效益。 但是,不要将免费层和共享层用于生产工作负载。 共享资源无法横向扩展。
  • 请务必删除未在使用的计划(例如测试部署)。 应用服务计划按秒收费。 即使应用已停止,应用服务计划中的实例也会产生费用。 有关应用服务计划和计费的详细信息,请参阅:

下面的 ARM 模板会部署到标准定价层。

SQL 数据库

  • 使用 Azure SQL 数据库减少管理开销。 Azure SQL 数据库会创建一个逻辑构造,作为数据库集合的中心管理点。 此逻辑构造可降低管理开销。 组里的每个数据库都部署有特定的服务层。 在每个组内,数据库不能共享资源。 服务器没有计算成本,但需要为每个数据库指定层。 因此,由于专用资源,性能可能会更好,但成本会更高。
  • 请执行容量规划,并选择符合要求的层和性能级别。 SQL 数据库支持“基本”、“标准”和“高级”服务层级,每个层中包含多个以数据库事务单位 (DTU) 计量的性能级别。

区域

  • 在同一区域中创建应用服务计划和 SQL 数据库,以尽量降低网络延迟。 一般情况下,应选择离用户最近的区域。
  • 资源组也有一个区域。 它指定了部署元数据的存储位置。 请将资源组及其资源放入同一个区域,以提高部署期间的可用性。
  • 请使用定价计算器估算成本。
  • 有关详细信息,请参阅 Microsoft Azure 架构良好的框架中的“成本”部分。

注意事项

这些注意事项实现了 Azure 架构良好的框架的支柱。 支柱是一组指导原则,可提高工作负载的质量。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架

性能效率

Azure 应用服务的主要优势是能够根据负载缩放应用程序。 下面是在计划缩放应用程序时需要考虑的一些注意事项。

缩放应用服务应用

可通过两种方法缩放应用服务应用:

  • 纵向扩展是指更改实例大小。 实例大小决定了每个 VM 实例上的内存、核心数和存储。 可以通过更改实例大小或计划层进行手动纵向缩放。
  • 横向扩展是指添加实例来处理增大的负载。 每个定价层包含的实例数存在上限。 可通过两种方式来横向扩展:手动更改实例计数;或者配置自动缩放,让 Azure 根据计划和/或性能指标自动添加或移除实例。 每个缩放操作都很快发生,通常在几秒钟内。

若要启用自动缩放,请创建自动缩放配置文件,用于定义最小和最大实例数。 可设置基于计划的配置文件来触发缩放事件。 例如,可为工作日和周末单独创建配置文件。 配置文件可包含有关何时添加或移除实例的规则。 例如,如果 CPU 使用率高于 70% 达到 5 分钟,则添加两个实例。

有关缩放 Web 应用的建议:

  • 尽可能限制纵向扩展和缩减。 它可触发应用程序重启。 相反,请横向扩展。请选择满足典型负载下的性能要求的层级和大小,然后横向缩放实例来处理流量变化。
  • 启用自动缩放。 如果应用程序具有可预测的常规工作负荷,请提前创建配置文件来计划实例计数。 如果工作负载不可预测,请使用基于规则的自动缩放,对发生的负载变化做出反应。 可以组合这两种方法。
  • 对自动缩放规则使用 CPU 使用率。 CPU 使用率通常是自动缩放规则的适当指标。 但是,应该对应用程序进行负载测试,识别潜在瓶颈,并使自动缩放规则基于该数据。
  • 若要添加实例,请设置较短的冷却期;若要移除实例,请设置较长的冷却期。 自动缩放规则包括一个冷却期。 冷却期是指在完成缩放操作后开始新的缩放操作之前等待的时间间隔。 冷却期可让系统在再次缩放之前变稳定。 例如,设置 5 分钟来添加实例,但设置 60 分钟来删除实例。 在负载加重的情况下,最好是快速添加新实例来处理额外的流量,然后逐渐缩减。

缩放 SQL 数据库

如果需要为 SQL 数据库使用更高的服务层级或性能级别,请纵向扩展单个数据库,而无需关闭应用程序。

有关详细信息,请参阅在 Azure SQL 数据库中缩放单一数据库资源

可靠性

在撰写本文时,应用服务的服务级别协议 (SLA) 为 99.95%。 应用服务 SLA 适用于单个和多个实例。 对于基本层、标准层和高级层,SQL 数据库的 SLA 为 99.99%。

备份

SQL 数据库提供了时间点还原和异地还原来还原丢失的数据。 这些功能已在所有层中提供,并会自动启用。 不需要计划或管理备份。

卓越运营

为生产、开发和测试环境创建单独的资源组。 通过将环境分隔开,可轻松地管理部署、删除测试部署和分配访问权限。

将资源分配到资源组时,请注意以下功能:

  • 生命周期 一般情况下,应将具有相同生命周期的资源放入同一个资源组。
  • 访问。 可使用 Azure 基于角色的访问控制 (RBAC) 对组中的资源应用访问策略。
  • 计费。 可以查看资源组的累计成本。

有关详细信息,请参阅 Azure 资源管理器概述

应用配置

  • 将配置设置存储为应用设置。 在资源管理器模板中或使用 PowerShell 定义应用设置。 在运行时,应用程序可将应用设置用作环境变量。
  • 切勿将密码、访问密钥或连接字符串签入源代码管理。 相反,请将机密作为参数传递给部署脚本,该脚本将这些值作为应用设置进行存储。
  • 交换部署槽位时,默认会交换应用设置。 如果需要不同的生产和过渡设置,可以创建依附在某个槽位上的、不被交换的应用设置。

诊断和监控

DevOps

  • 使用 ARM 模板部署 Azure 资源及其依赖项。 随附的 ARM 模板部署单个 Web 应用程序。 所有资源都隔离在同一基本工作负载中。 通过这种隔离,可更轻松地将工作负载的特定资源与团队关联。 随后,该团队可独立管理这些资源的所有方面。 这种隔离可使 DevOps 团队执行持续集成和持续交付 (CI/CD)。
  • 使用不同的 ARM 模板并将其与 Azure DevOps 服务集成。 通过此设置,只需几分钟即可创建不同的环境。 例如,仅在需要时才能复制类似生产的方案或负载测试环境,从而节省成本。
  • 预配 Web 应用程序的多个实例。 你不希望 Web 应用依赖于单个实例,并可能创建单一故障点。 多个实例可提高复原能力和可伸缩性。

有关详细信息,请参阅 Azure 架构良好的框架中的“DevOps”部分。

发布工程和部署

  • 使用 Azure 资源管理器模板预配 Azure 资源。 使用模板可以通过 PowerShell 或 Azure CLI 更轻松地自动完成部署。
  • 部署应用程序(代码、二进制文件和内容文件)。 可以使用多个选项,包括从本地 Git 存储库部署、使用 Visual Studio,或者通过基于云的源代码管理进行持续部署。 请参阅将应用部署到 Azure 应用服务

应用服务应用始终有一个名为 production 的部署槽位。 生产槽表示实时生产站点。 我们建议创建过渡槽位用于部署更新。 使用过渡槽位的好处包括:

  • 在将部署交换到生产环境之前,可以验证部署是否成功。
  • 部署到过渡槽位可确保所有实例在交换到生产环境之前已预热。 许多应用程序的预热和冷启动时间很长。
  • 创建第三个槽位来保存上次已知正常的部署。 交换过渡部署和生产部署之后,请将以前的生产部署(现在为过渡部署)移到上次已知正常的槽位中。 这样,如果以后发现问题,可以快速还原到上次已知正常的版本。

Swapping slots for production and staging deployments

  • 若要还原到以前的版本,请确保数据库架构发生的任何更改可向后兼容。
  • 不要使用生产部署中的槽位进行测试,因为同一应用服务计划中的所有应用共享相同的 VM 实例。 例如,负载测试可能使实时生产站点降级。 应该为生产和测试创建单独的应用服务计划。 如果将测试部署放入单独的计划,则可将其与生产版本相隔离。

安全性

本部分列出专门与本文中所述 Azure 服务相关的安全注意事项, 内容并非安全最佳做法的完整列表。 有关其他一些安全注意事项,请参阅保护 Azure 应用服务中的应用

SQL 数据库审核

借助审核可以保持合规,洞察可能表示需要企业引以关注的问题或疑似出现安全违规的偏差和异常。 请参阅 SQL 数据库审核入门

部署槽

每个部署槽位有一个公共 IP 地址。 使用 Microsoft Entra ID 登录保护非生产槽位,以便只有开发团队和 DevOps 团队的成员可以访问这些终结点。

日志记录

日志中永不可记录诸如用户密码或其他可用于实行身份诈骗的信息。 在存储这些数据之前,请清除其中的这些详细信息。

SSL

应用服务应用在子域 azurewebsites.net 中免费包含一个 SSL 终结点。 该 SSL 终结点包括 *.azurewebsites.net 域的通配符证书。 如果使用自定义域名,必须提供与该自定义域匹配的证书。 最简单的方法是直接通过 Azure 门户购买证书。 也可以从其他证书颁发机构导入证书。 有关详细信息,请参阅为 Azure 应用服务购买和配置 SSL 证书

默认情况下,ARM 模板部署中未启用 HTTPS。 作为一项安全最佳做法,应用应该通过重定向 HTTP 请求来强制实施 HTTPS。 可在应用程序内实施 HTTPS,或者根据为 Azure 应用服务中的应用启用 HTTPS 中所述使用 URL 重写规则。

身份验证

我们建议通过 Microsoft Entra ID、Facebook、Google 或 Twitter 等标识提供者 (IDP) 进行身份验证。 为身份验证流使用 OAuth 2 或 OpenID Connect (OIDC)。 Microsoft Entra ID 提供管理用户和组、创建应用程序角色、集成本地标识,以及使用 Microsoft 365 和 Skype for Business 等后端服务的功能。

请避免让应用程序直接管理用户登录名和凭据。 这会造成潜在的攻击面。 至少需要配置电子邮件确认、密码恢复和多重身份验证,验证密码强度并安全地存储密码哈希。 大型标识提供者可为你处理所有这些操作,并会持续监视和改进其安全做法。

请考虑使用应用服务身份验证来实施 OAuth 或 OIDC 身份验证流。 应用服务身份验证的好处包括:

  • 易于配置。
  • 对于简单的身份验证方案无需编写代码。
  • 支持使用 OAuth 访问令牌实现委托授权,以代表用户使用资源。
  • 提供内置的令牌缓存。

应用服务身份验证的一些限制:

  • 自定义选项有限。
  • 仅限针对每个登录会话的一个后端资源使用委托授权。
  • 如果使用了多个 IDP,没有内置的机制可用于执行主领域发现。
  • 对于多租户方案,应用程序必须实施验证令牌颁发者的逻辑。

部署此方案

此体系结构包括一个 Azure 应用服务计划和一个空应用程序。 它使用 Azure SQL 数据库、Azure Key Vault 和 Azure Monitor,其中 Key Vault 用于存储数据库连接字符串,Azure Monitor 用于日志记录、监视和警报。

使用以下命令为部署创建资源组。 要使用嵌入式 shell,请选择“试用”按钮。

az group create --name basic-web-app --location eastus

运行以下命令以部署 Web 应用程序和支持基础结构。 出现提示时,输入用户名和密码。 这些值用于访问 Azure SQL 数据库实例。

az deployment group create --resource-group basic-web-app  \
    --template-uri https://raw.githubusercontent.com/mspnp/samples/master/solutions/basic-web-app/azuredeploy.json

有关详细信息和更多部署选项,请参阅用于部署此解决方案的 ARM 模板。

后续步骤

有关排查应用程序问题的提示:

产品文档:

Microsoft Learn 模块: