Azure 应用服务最佳实践

本文汇总了有关使用 Azure 应用服务的最佳实践。

并置

Azure 应用服务解决方案包括用于保存内容或数据的 Web 应用和数据库或存储帐户。 当这些资源位于不同的区域时,情况可能会产生以下影响:

  • 增大资源之间通信的延迟
  • Azure 定价页中列出了跨区域出站数据传输的收费

归置是最适合构成解决方案的 Azure 资源。 创建资源时,确保它们位于同一个 Azure 区域,除非有具体的业务或设计理由需要将它们放在不同的区域。 可使用高级应用服务计划应用中提供的应用服务克隆功能,将应用服务应用移至数据库所在的区域。

证书固定

证书固定是一种做法,即应用程序仅允许一个特定的列表,其中包含可接受的证书颁发机构 (CA)、公钥、指纹或证书层次结构的任何部分。

应用程序绝不应具有硬依赖项或固定到默认通配符 (*.chinacloudsites.cn) TLS 证书。 应用服务是一个平台即服务 (PaaS),因此可以随时轮换此证书。 如果服务轮换默认通配符 TLS 证书,则证书固定的应用程序会中断那些已硬编码到特定的一组证书属性的应用程序的连接。 轮换证书的周期性也得不到保证,因为轮换频率可能随时更改。

依赖于证书固定的应用程序也不应硬依赖于应用服务托管证书。 可能会随时轮换应用服务托管证书,导致依赖于稳定证书属性的应用程序的类似问题。 最佳做法是为依赖于证书固定的应用程序提供自定义 TLS 证书。

如果应用程序需要依赖证书固定行为,建议将自定义域添加到 Web 应用并为域提供自定义 TLS 证书。 然后,应用程序可以依赖自定义 TLS 证书进行证书固定。

CPU 资源

当监视或服务建议指示应用消耗的 CPU 数超过预期,或者遇到重复的 CPU 峰值时,请考虑纵向扩展或横向扩展应用服务计划。 如果应用程序是有状态的,则纵向扩展是唯一选项。 如果应用程序是无状态的,则横向扩展可提供更大的灵活性和更高的缩放潜力。

有关应用服务缩放和自动缩放选项的详细信息,请参阅在 Azure 应用服务中纵向扩展 Web 应用

套接字资源

耗尽出站 TCP 连接的常见原因是使用客户端库,这些库不会重复使用 TCP 连接,或者不使用更高级别的协议(如 HTTP 保持连接)。

查看应用服务计划引用的每个库的文档。 确保在代码中配置或访问库,以便高效重复使用出站连接。 此外,请遵循有关正确执行创建和发布或清理操作的库指导文档,以避免连接泄漏。 虽然对客户端库的此类调查正在进行中,但可以通过横向扩展到多个实例来缓解影响。

Node.js 和传出 HTTP 请求

处理 Node.js和许多传出 HTTP 请求时,处理 HTTP 保持活动非常重要。 可以使用 agentkeepalivenpm 包更容易地在代码中实现此功能。

始终处理 http 响应,即使在处理程序中不执行任何操作,也要如此。 如果未正确处理响应,应用程序最终会卡住,因为没有更多的套接字可用。

下面是处理 httphttps 包时处理响应的示例:

const request = https.request(options, function(response) {
    response.on('data', function() { /* do nothing */ });
});

如果要在具有多个核心的 Linux 计算机上运行应用服务应用,另一种最佳做法是使用 PM2 启动多个 Node.js 进程来运行应用程序。 可以通过指定容器的启动命令来执行此操作。

例如,使用此命令启动四个实例:

pm2 start /home/site/wwwroot/app.js --no-daemon -i 4

应用备份

备份通常按计划运行并且只需访问存储(以便输出备份后的文件)和数据库(以便复制和读取备份中要包含的内容)。 其中任一资源访问失败会导致持续备份失败。

应用备份失败的两个最常见原因为:存储设置无效和数据库配置无效。 这些失败通常发生在对存储或数据库资源的更改之后,或者在访问这些资源的凭据更改之后发生。 例如,可能会在备份设置中选择的数据库更新凭据。

出现备份失败时,请查看最新结果以了解所出现失败的类型。 如果存储访问失败,请查看并更新备份配置中的存储设置。 对于数据库访问失败,请查看并更新连接字符串作为应用设置的一部分。 然后继续更新备份配置,以正确包含所需的数据库。

有关应用备份的详细信息,请参阅在 Azure 应用服务中备份和还原应用

Node.js 应用

适用于 Node.js 应用的 Azure 应用服务默认配置旨在符合最常见应用的需求。 若要个性化 Node.js 应用的默认配置以提高性能或优化 CPU、内存或网络资源的资源使用情况,请参阅 Azure 应用服务上的 Node 应用程序的最佳做法和故障排除指南。 本文介绍可能需要为 Node.js 应用配置的 iisnode 设置。 它还介绍了如何解决应用的方案或问题。