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

N 层体系结构样式

N 层体系结构将应用程序划分为 逻辑层物理层

显示 N 层体系结构样式的逻辑关系图。

分层分离责任并管理依赖关系。 每个层都有特定的责任。 较高层可以使用较低层中的服务,但较低层不能在较高层中使用服务。

层级在物理上分离,并在单独的计算机上运行。 根据合同,层级的通信模型可以是严格的,也可以是宽松的。 在严格的模型中,请求必须逐个浏览相邻层,并且不能跳过任何层。 例如,请求从 Web 应用程序防火墙(WAF)传送到 Web 层,然后到达中间层 1,并继续运行。 相反,宽松的方法允许请求在必要时跳过某些层。 严格的方法具有更高的延迟和开销。 宽松的方法具有更多的耦合度,这使得更改更加困难。 还可以在同一系统中组合这两种方法。

层可以直接调用另一层,或者通过消息队列使用 异步消息传送模式 。 可以在其自己的层级中托管每个层,但这不是必须的做法。 可以在同一层上托管多个层。 层的物理分离可提高可伸缩性和复原能力,但也增加了额外的网络通信的延迟。

传统的三层应用程序具有演示层、可选的中间层和数据库层。 更复杂的应用程序可以具有三个以上的层。 上图显示了一个应用程序,其中包含两个中间层,用于封装不同功能区域。

N 层应用程序可以具有 封闭层体系结构开放层体系结构

  • 在封闭层体系结构中,层只能立即调用下一层。
  • 在开放层体系结构中,层可以调用其下方的任何层。

封闭层体系结构限制层之间的依赖关系。 但是,如果一个层仅将请求传递到下一层,则此体系结构可能会创建不必要的网络流量。

何时使用此体系结构

对于以下方案,请考虑 N 层体系结构:

  • 支持仍在演变的体系结构要求。
  • 使用最少的更改将本地应用程序迁移到 Azure。
  • 开发跨本地和云环境的应用程序。

N 层体系结构在传统的本地系统中很常见,这使得它们自然适合将现有工作负荷转换为 Azure。

通过使用提供可伸缩性、可靠性和降低运营成本的托管服务,或选择虚拟机(VM),来有效地实现 N 层体系结构。 这些工作负载通常也受益于将托管解决方案用于关键组件,例如缓存、消息传送和数据存储。

优点

  • 便携性跨云平台、本地环境以及不同云平台之间。
  • 对于大多数开发人员来说,学习曲线更少
  • 通过不重新构造解决方案,成本相对较小
  • 从传统应用程序模型的自然发展演化而来
  • 支持包含 Windows 和 Linux 的混合环境

挑战

  • 中间层只能执行基本的创建、读取、更新、删除(CRUD)作,从而增加延迟和复杂性,而不会提供有意义的价值。
  • 整体设计可防止独立部署功能。
  • 大型系统可能会使网络安全难以管理。
  • 通过多层移动的用户请求和数据使得测试和监视变得更加困难。

最佳做法

  • 使用自动缩放来处理负载更改。 有关详细信息,请参阅 自动缩放最佳做法
  • 使用 异步消息传送 来分离层。
  • 缓存不经常更改的数据。 有关详细信息,请参阅 缓存最佳做法
  • 使用 SQL Server Always On 可用性组等解决方案配置数据库层以实现高可用性。
  • 在前端和 Internet 之间放置 WAF。
  • 将每个层放置在其自己的子网中,并使用子网作为安全边界。
  • 仅允许来自中间层的请求来限制对数据层的访问。

VM 上的 N 层体系结构

本部分介绍在 VM 上运行的 N 层体系结构。

注释

如果计划将现有应用程序迁移到 Azure 且重构最少,请使用 VM 托管 N 元体系结构。 否则,请考虑使用 托管服务来实现体系结构,例如 Azure 应用服务或 Azure 容器应用。

一个显示 N 层架构的示意图。

每个层由具有两个或多个 VM 的虚拟机规模集组成。 如果一个 VM 发生故障,则多个 VM 提供复原能力。 负载均衡器在层中的 VM 之间分配请求。 可以通过向池中添加更多虚拟机来水平扩展层。

每个层也放置在其自己的子网中,这意味着其内部 IP 地址位于同一地址范围内。 此方法可以轻松地将网络安全组规则和路由表应用到各个层。

Web 层和业务层是无状态的。 任何 VM 都可以处理该层的任何请求。 数据层应包含复制的数据库。 如果可能,请使用托管数据库,但也可以在 VM 托管的数据库上托管数据库。 对于 Windows,建议使用具有 AlwaysOn 可用性组的 SQL Server 实现高可用性。 对于 Linux,请选择支持复制的数据库,例如 Apache Cassandra。

网络安全组限制对每个层的访问。 例如,数据库层仅允许从业务层进行访问。

注释

引用关系图中标有 业务层的层 是指业务逻辑层。 呈现层标记为 Web 层。 该示例显示了一个 Web 应用程序,但也可以对其他拓扑(如桌面应用)使用多层体系结构。 为每个团队易于理解的层级使用清晰且具描述性的名称。 还可以在 Azure 资源中使用这些名称, vmss-appname-business-tier例如。

其他注意事项

  • N 层体系结构不限于三个层。 更复杂的应用程序通常具有更多的层。 在这种情况下,请考虑使用第 7 层路由将请求路由到特定层。

  • 层为可伸缩性、可靠性和安全性创建边界。 请考虑在这些方面具有不同要求的服务的单独层。

  • 使用虚拟机规模集进行 自动缩放

  • 在体系结构中查找可在不进行重大重构的情况下使用托管服务的位置。 具体而言,请考虑缓存、消息传送、存储和数据库。

  • 将外围网络(也称为 外围网络非军事区域屏蔽子网)放置在应用程序前面,以提高安全性。 外围网络包括实现防火墙和数据包检查等安全功能的网络虚拟设备(NVA)。 有关详细信息,请参阅 “实现安全的混合网络”。

  • 在虚拟机规模集中使用两个或多个 NVA,使用外部负载均衡器跨实例分配 Internet 请求以实现高可用性。 有关详细信息,请参阅 部署高度可用的 NVA

  • 阻止对运行应用程序代码的 VM 的直接远程桌面协议(RDP)或安全外壳(SSH)访问。 而是使用 Azure Bastion 通过专用 IP 地址安全地连接到 VM,该地址提供 RDP 和 SSH 连接。 有关详细信息,请参阅 Azure Bastion 概述

  • 使用站点到站点虚拟专用网络(VPN)或 Azure ExpressRoute 将 Azure 虚拟网络扩展到本地网络。 有关详细信息,请参阅 混合网络参考体系结构

后续步骤