category
此体系结构显示了基本web应用程序的基本组件。您可以使用该体系结构来构建web应用程序,然后根据需要自定义应用程序。
架构
显示Azure中基本web应用程序的参考体系结构的图。
下载此体系结构的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 MySQL或Azure Database for PostgreSQL。这些替代方案是基于开源MySQL Server和Postgres数据库引擎的完全管理的数据库服务。
- Microsoft Entra ID是一种基于云的身份和访问管理服务,允许员工访问为您的组织开发的云应用程序。
- Azure Monitor是一个用于在您的环境中收集、分析日志和度量并对其采取行动的解决方案。
Azure密钥库支持机密管理、密钥管理和证书管理。它可以存储应用程序机密,如数据库连接字符串。
建议
您的需求可能与代码中描述和给出的体系结构不同。代码与生产配置一起部署。使用建议自定义您的部署以满足您的需求。
应用服务计划
应用程序服务计划有不同的定价层。每个定价层都支持多个实例大小,这些大小因内核和内存的数量而异。您可以在部署后通过选择左侧导航中的“扩展(应用程序服务计划)”来更改定价级别。以下是应用程序服务的一些建议:
- 在基本、标准和特优定价层上运行您的生产工作负载。在这三层中,应用程序在专用的虚拟机实例上运行,并分配了可以扩展的资源。
- 如果需要自动缩放和TLS/SSL,请使用标准层和高级层。
- 为测试和开发创建不同的应用程序服务计划。使用免费和共享(预览)层进行测试和开发,以提高成本效益。但不要将“免费”和“共享”层用于生产工作负载。共享资源无法扩展。
- 请确保删除未使用的计划,例如测试部署。应用程序服务计划按每秒计费。即使应用程序已停止,您也要为应用程序服务计划中的实例收费。有关应用程序服务计划和计费的更多信息,请参阅:
- 应用程序服务定价。
- 我的应用服务计划要花多少钱?
下面的ARM模板部署到标准定价层。
SQL数据库
- 使用Azure SQL数据库来减少管理开销。Azure SQL数据库创建一个逻辑结构,作为数据库集合的中心管理点。这种逻辑结构减少了管理开销。组中的每个数据库都部署了一个特定的服务层。在每个组中,数据库不能共享资源。服务器没有计算成本,但需要为每个数据库指定层。因此,由于有专用资源,性能可能会更好,但成本可能会更高。
- 执行容量规划并选择符合您要求的层和性能级别。SQL数据库支持“基本”、“标准”和“特优”服务层,每层中都有多个以数据库事务单元(DTU)为单位的性能级别。
区域
- 在同一区域中创建应用程序服务计划和SQL数据库,以最大限度地减少网络延迟。通常,请选择离用户最近的地区。
- 资源组还有一个区域。它指定部署元数据的存储位置。将资源组及其资源放在同一区域,以提高部署期间的可用性。
- 使用定价计算器来估计成本。
- 有关更多信息,请参阅Microsoft Azure架构良好的框架中的成本部分。
注意事项
这些注意事项实现了Azure架构良好的框架的支柱。这些支柱是一组提高工作负载质量的指导原则。有关详细信息,请参阅Microsoft Azure架构良好的框架。
性能效率
Azure应用程序服务的一个主要好处是能够根据负载扩展应用程序。在计划扩展应用程序时,需要注意以下几点。
扩展应用程序服务应用程序
有两种方法可以扩展应用程序服务应用程序:
- 放大意味着更改实例大小。实例大小决定了每个VM实例上的内存、内核数量和存储空间。您可以通过更改实例大小或平面层来手动放大。
- 横向扩展意味着添加实例以处理增加的负载。每个定价层都有最大数量的实例。您可以通过手动更改实例计数或配置自动缩放以使Azure根据计划和/或性能指标自动添加或删除实例来进行扩展。每次缩放操作发生得很快,通常在几秒钟内。
要启用自动缩放,请创建一个自动缩放配置文件,定义实例的最小和最大数量。您可以设置基于时间表的配置文件来触发缩放事件。例如,可以为工作日和周末创建单独的配置文件。配置文件可以包含何时添加或删除实例的规则。例如,如果CPU使用率在5分钟内超过70%,则添加两个实例。
扩展web应用程序的建议:
- 尽可能限制放大和缩小。它可以触发应用程序重新启动。相反,扩大规模。选择一个在典型负载下满足性能要求的层和大小,然后扩展实例以处理流量的变化。
- 启用自动缩放。如果您的应用程序具有可预测的常规工作负载,请创建配置文件以提前安排实例计数。如果工作负载不可预测,请使用基于规则的自动缩放来对发生的负载变化做出反应。您可以将这两种方法结合起来。
- 将CPU使用率用于自动缩放规则。CPU使用率通常是自动缩放规则的一个很好的度量标准。但是,您应该对应用程序进行负载测试,确定潜在的瓶颈,并将自动缩放规则建立在这些数据的基础上。
- 为添加实例设置较短的冷却期,为删除实例设置较长的冷却期。自动缩放规则包括一个冷却期。冷却期是在完成缩放操作后,在开始新的缩放操作之前等待的时间间隔。冷却期使系统在再次缩放之前稳定下来。例如,设置5分钟添加实例,但设置60分钟删除实例。最好在高负载下快速添加新实例,以处理额外的流量,然后逐渐缩减。
扩展SQL数据库
如果您需要更高的SQL数据库服务层或性能级别,请在没有应用程序停机的情况下扩展单个数据库。
有关详细信息,请参阅在Azure SQL数据库中扩展单个数据库资源。
可靠性
在撰写本文时,应用程序服务的服务级别协议(SLA)为99.95%。应用程序服务SLA适用于单个和多个实例。对于基本层、标准层和高级层,SQL数据库的SLA为99.99%。
备份
SQL数据库提供时间点恢复和地理恢复,以恢复丢失的数据。这些功能在所有层中都可用,并且会自动启用。您不需要计划或管理备份。
- 使用时间点恢复。您可以通过将数据库返回到较早的时间点来从人为错误中恢复。
- 使用地理还原。您可以通过从地理冗余备份中恢复数据库来从服务中断中恢复。
- 请考虑使用应用程序服务备份和还原。备份和恢复是应用程序文件的功能。但是,备份的文件包括纯文本的应用程序设置,例如连接字符串。
- 避免使用应用程序服务备份功能来备份SQL数据库。它将数据库导出到SQL BACPAC文件,使用DTU。相反,请使用上面描述的SQL数据库时间点恢复。有关更多信息,请参阅使用SQL数据库进行云业务连续性和数据库灾难恢复。
卓越运营
为生产、开发和测试环境创建单独的资源组。分离环境使管理部署、删除测试部署和分配访问权限变得更加容易。
将资源分配给资源组时,请考虑以下功能:
- 生命周期。通常,将具有相同生命周期的资源放入同一资源组中。
- 通道:您可以使用Azure基于角色的访问控制(RBAC)将访问策略应用于组中的资源。
- 账务:您可以查看资源组的汇总成本。
有关更多信息,请参阅Azure资源管理器概述。
应用程序配置
- 将配置设置存储为应用程序设置。在资源管理器模板中或使用PowerShell定义应用程序设置。在运行时,应用程序设置可作为环境变量提供给应用程序。
- 永远不要在源代码管理中检查密码、访问密钥或连接字符串。相反,将机密作为参数传递给部署脚本,该脚本将这些值存储为应用程序设置。
- 交换部署插槽时,默认情况下会交换应用程序设置。如果你需要不同的生产和暂存设置,你可以创建应用程序设置,这些设置可以固定在一个插槽中,不会被交换。
诊断和监测
启用诊断日志记录,包括应用程序日志记录和web服务器日志记录。配置日志记录以使用Azure日志分析。有关日志记录的更多详细指南,请参阅监控和诊断指南。
使用诸如New Relic或Application Insights之类的服务来监视负载下的应用程序性能和行为。请注意Application Insights的数据速率限制。
使用Azure DevOps或Azure DevOpsServer等工具执行负载测试。有关云应用程序中性能分析的一般概述,请参阅性能分析入门。
DevOps
使用ARM模板部署Azure资源及其依赖项。随附的ARM模板部署单个web应用程序。所有资源都被隔离在同一个基本工作负载中。这种隔离使工作负载的特定资源更容易与团队关联。然后,团队可以独立管理这些资源的各个方面。这种隔离使DevOps团队能够执行持续集成和持续交付(CI/CD)。- 使用不同的ARM模板并将它们与Azure DevOps服务集成。通过此设置,您可以在几分钟内创建不同的环境。例如,您可以仅在需要时复制类似生产的场景或负载测试环境,并节省成本。
- 提供web应用程序的多个实例。你不希望你的网络应用程序依赖于一个实例,并可能导致单点故障。多个实例提高了恢复能力和可扩展性。
有关更多信息,请参阅Azure架构良好的框架中的DevOps部分。
发布工程和部署
- 使用Azure资源管理器模板来调配Azure资源。模板使通过PowerShell或Azure CLI实现部署自动化变得更加容易。
- 部署应用程序(代码、二进制文件和内容文件)。您有几个选项,包括使用Visual Studio从本地Git存储库进行部署,或从基于云的源代码管理进行连续部署。请参阅将您的应用程序部署到Azure应用程序服务。
应用程序服务应用程序总是有一个名为production的部署槽。生产时段代表现场生产站点。我们建议创建一个临时插槽来部署更新。使用暂存槽的好处包括:
- 您可以在将部署交换到生产环境之前验证部署是否成功。
- 部署到临时插槽可确保所有实例在交换到生产环境之前都已预热。许多应用程序具有显著的预热和冷启动时间。
创建第三个插槽以容纳最后一个已知的良好部署。在交换了暂存和生产之后,将上一个生产部署(现在处于暂存状态)移动到最 - 一个已知的良好插槽中。这样,如果您稍后发现问题,您可以快速恢复到上一个已知的好版本。
为生产和临时部署交换插槽
- 如果恢复到以前的版本,请确保所有数据库架构更改都向后兼容。
- 不要使用生产部署上的插槽进行测试,因为同一应用程序服务计划中的所有应用程序共享相同的VM实例。例如,负载测试可能会降低现场生产站点的性能。相反,为生产和测试创建单独的应用程序服务计划。通过将测试部署放在一个单独的计划中,可以将它们与生产版本隔离开来。
安全
本节列出了本文中描述的Azure服务所特有的安全注意事项。这并不是一个完整的安全最佳实践列表。有关其他一些安全注意事项,请参阅在Azure应用程序服务中保护应用程序。
SQL数据库审核
审计可以帮助您保持法规遵从性,并深入了解可能表明业务问题或疑似安全违规的差异和违规行为。请参阅SQL数据库审核入门。
部署插槽
每个部署槽都有一个公共IP地址。使用Microsoft Entra登录保护非生产插槽,以便只有您的开发和DevOps团队的成员才能到达这些端点。
Logging
日志永远不应该记录用户的密码或其他可能被用来进行身份欺诈的信息。在存储数据之前,先从数据中清除这些详细信息。
SSL
应用程序服务应用程序在azurewebsites.net的子域上包含SSL端点,无需额外付费。SSL端点包括*.azurewebsites.net域的通配符证书。如果使用自定义域名,则必须提供与自定义域匹配的证书。最简单的方法是直接通过Azure门户购买证书。您还可以从其他证书颁发机构导入证书。有关更多信息,请参阅为Azure应用程序服务购买和配置SSL证书。
默认情况下,在ARM模板部署中未启用HTTPS。作为一种安全性最佳实践,您的应用程序应该通过重定向HTTP请求来强制执行HTTPS。您可以在应用程序内部实现HTTPS,也可以使用URL重写规则,如Azure应用程序服务中为应用程序启用HTTPS中所述。
身份验证
我们建议通过身份提供商(IDP)进行身份验证,如Microsoft Entra ID、Facebook、Google或Twitter。使用OAuth 2或OpenID Connect(OIDC)进行身份验证流。Microsoft Entra ID提供了管理用户和组、创建应用程序角色、集成本地身份以及使用后端服务(如Microsoft 365和Skype for Business)的功能。
避免让应用程序直接管理用户登录和凭据。它创造了一个潜在的攻击面。至少,您需要进行电子邮件确认、密码恢复和多因素身份验证,验证密码强度,并安全地存储密码哈希。大型身份服务提供商为您处理所有这些事情,并不断监控和改进其安全实践。
考虑使用应用程序服务身份验证来实现OAuth或OIDC身份验证流。应用程序服务身份验证的好处包括:
- 易于配置。
- 对于简单的身份验证场景,不需要任何代码。
- 支持使用OAuth访问令牌代表用户使用资源的委托授权。
- 提供内置的令牌缓存。
应用程序服务身份验证的一些限制:
- 有限的自定义选项。
- 委派授权仅限于每个登录会话一个后端资源。
- 如果您使用多个IDP,则没有用于家庭领域发现的内置机制。
- 对于多租户场景,应用程序必须实现验证令牌颁发者的逻辑。
部署此场景
此体系结构包括一个Azure应用程序服务计划和一个空应用程序。它使用Azure SQL数据库、用于存储数据库连接字符串的Azure密钥库,以及用于日志记录、监视和警报的Azure监视器。
Azure CLI
使用以下命令为部署创建资源组。选择“尝试”按钮以使用嵌入式shell。
Azure CLI
az group create --name basic-web-app --location eastus
运行以下命令以部署web应用程序和支持基础结构。出现提示时,输入用户名和密码。这些值用于访问Azure SQL数据库实例。
Azure CLI
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模板。
接下来的步骤
Tips for troubleshooting your application:
- Use the troubleshoot blade in the Azure portal to find solutions to common problems.
- Enable log streaming to see logging information in near-real-time.
- The Kudu dashboard has several tools for monitoring and debugging your application. For more information, see Azure Websites online tools you should know about (blog post). You can reach the Kudu dashboard from the Azure portal. Open the blade for your app and select Tools, then select Kudu.
- If you use Visual Studio, see the article Troubleshoot a web app in Azure App Service using Visual Studio for debugging and troubleshooting tips.
Product documentation:
- About Azure Key Vault
- App Service overview
- Azure Monitor overview
- Azure App Service plan overview
- Overview of Log Analytics in Azure Monitor
- What is Microsoft Entra ID?
- What is Azure DNS?
- What is Azure SQL Database?
Microsoft Learn modules:
- Configure and manage Azure Monitor
- Configure Microsoft Entra ID
- Configure Azure Monitor
- Deploy and configure servers, instances, and databases for Azure SQL
- Explore Azure App Service
- Host a web application with Azure App Service
- Host your domain on Azure DNS
- Implement Azure Key Vault
- Manage users and groups in Microsoft Entra ID
Related resources
- 登录 发表评论
- 9 次浏览
最新内容
- 2 days ago
- 2 days ago
- 2 days ago
- 2 days ago
- 3 days 1 hour ago
- 3 days 1 hour ago
- 3 days 1 hour ago
- 3 days 1 hour ago
- 3 days 1 hour ago
- 3 days 1 hour ago