195

我最近看到很多开发人员的职位发布,其中包含一个或多或少这样的句子:“必须具有 N-Tier 架构的经验”或“必须能够开发 N-Tier 应用程序”。

这让我问,什么是 N-Tier 架构?一个人如何获得经验?

4

12 回答 12

248

维基百科

在软件工程中,多层架构(通常称为 n 层架构)是一种客户端-服务器架构,其中表示、应用程序处理和数据管理在逻辑上是独立的过程。例如,使用中间件为用户和数据库之间的数据请求提供服务的应用程序采用多层架构。“多层架构”使用最广泛的指的是三层架构。

什么是“层”是有争议的,但在我看来,它至少需要跨越流程边界。或者它被称为图层。但是,它不需要在物理上不同的机器中。虽然我不推荐它,但您可以在同一个盒子上托管逻辑层和数据库。

替代文字

编辑:一个含义是表示层和逻辑层(有时称为业务逻辑层)需要“跨线”跨越机器边界,有时在不可靠、缓慢和/或不安全的网络上。这与简单的桌面应用程序非常不同,其中数据与文件位于同一台机器上,或者您可以直接访问数据库的 Web 应用程序。

对于 n 层编程,您需要将数据打包成某种称为“数据集”的可传输形式,然后通过网络传输它们。.NET 的DataSet类或SOAP之类的 Web 服务协议是通过网络传输对象的少数尝试。

于 2008-11-23T06:10:10.837 回答
20

它基于您如何将表示层与核心业务逻辑和数据访问分开(维基百科

  • 三层表示表示层+组件层+数据访问层。
  • N 层是在这些层之外添加额外的层,通常是为了额外的模块化、可配置性或与其他系统的互操作性。
于 2008-11-23T06:13:25.307 回答
16

这是一个流行词,指的是普通的 Web 体系结构,例如 Javascript - ASP.Net - 中间件 - 数据库层。这些东西中的每一个都是一个“层”。

于 2008-11-23T06:04:29.100 回答
4

N 层数据应用程序是分成多个层的数据应用程序。也称为“分布式应用程序”和“多层应用程序”,n 层应用程序将处理分离为分布在客户端和服务器之间的离散层。当您开发访问数据的应用程序时,您应该清楚地区分构成应用程序的各个层。

典型的 n 层应用程序包括表示层、中间层和数据层。在 n 层应用程序中分离各个层的最简单方法是为要包含在应用程序中的每个层创建离散项目。例如,表示层可能是 Windows 窗体应用程序,而数据访问逻辑可能是位于中间层的类库。此外,表示层可能通过服务等服务与中间层中的数据访问逻辑进行通信。将应用程序组件分成不同的层可以提高应用程序的可维护性和可扩展性。它通过更容易地采用新技术来实现这一点,这些新技术可以应用于单个层,而无需重新设计整个解决方案。此外,

取自微软网站

于 2015-02-07T14:17:33.613 回答
4

如果我理解了这个问题,那么在我看来,提问者真的是在问“好的,所以 3 层很好理解,但似乎围绕 4 层或概括地说,N 层架构的意思是。那么......被广泛理解和同意的 N 层定义是什么?

这实际上是一个相当深的问题,为了解释原因,我需要更深入一点。忍受我。

经典的 3 层架构:数据库、“业务逻辑”和表示,是阐明如何遵守关注点分离原则的好方法。也就是说,如果我想改变“业务”想要为客户服务的方式,我不应该查看整个系统来弄清楚如何做到这一点,尤其是决策业务问题不应该分散不顾一切地通过代码。

现在,这个模型已经运行了几十年,它是经典的“客户端-服务器”模型。快进到云产品,其中 Web 浏览器是广泛且物理分布的一组用户的用户界面,通常最终必须添加内容分发服务,这不是经典 3 层架构的一部分(以及需要自行管理)。

这个概念概括了服务、微服务、数据和计算的分布方式等等。某物是否是“层”很大程度上取决于该层是否为该层后面(或下面)的服务提供接口和部署模型。因此,内容分发网络将是一个层,但身份验证服务不会。

现在,带着这个概念去阅读 N 层架构示例的其他描述,你就会开始理解这个问题。其他观点包括基于供应商的方法(例如 NGINX)、内容感知负载平衡器、数据隔离和安全服务(例如 IBM Datapower),所有这些都可能会或可能不会为给定的架构、部署和用例增加价值。

于 2016-01-16T16:19:12.000 回答
3

据我了解,N-Tier 使用单独的物理机将业务逻辑、客户端访问和数据相互分离。理论是其中一个可以独立于其他更新。

于 2008-11-23T06:04:25.140 回答
3

N 层数据应用程序是分成多个层的数据应用程序。也称为“分布式应用程序”和“多层应用程序”,n 层应用程序将处理分离为分布在客户端和服务器之间的离散层。当您开发访问数据的应用程序时,您应该清楚地区分构成应用程序的各个层。

等等http://msdn.microsoft.com/en-us/library/bb384398.aspx

于 2014-09-22T05:50:44.517 回答
3

在构建通常的 MCV(一种 3 层架构)时,可以决定使用双层接口来实现 MCV,这样实际上就可以替换特定的层,而无需修改甚至一行代码。

我们经常看到这样做的好处,例如在您希望能够使用多个数据库的情况下(在这种情况下,您在控制层和数据层之间有一个双重接口)。

当你把它放在视图层(展示)上时,你就可以(等一下!!)用另一台机器替换用户界面,从而自动化真实输入(!!!)——从而你可以运行数千个乏味的可用性测试无需任何用户一次又一次地点击和重新点击并重新点击相同的东西。

有些人将这种具有 1 个或 2 个双接口的3 层架构描述为4 层5 层架构,隐含地暗示了双接口。

其他情况包括(但不限于)您 - 在半复制或完全复制的数据库系统的情况下实际上能够将其中一个数据库视为“主”,因此您将拥有一个层由主数据库组成,另一个由从数据库组成。

移动示例

因此,多层 - 或 N 层- 确实有一些解释,而我肯定会坚持 3 层 + 额外的层,其中包括楔入其间的薄接口磁盘以启用所述层交换,并且在测试(特别是在移动设备上使用),您现在可以在真实软件上运行用户测试,通过以控制逻辑无法区分真实用户点击的方式模拟用户点击。这在模拟真实用户测试中几乎是最重要的,因为您可以记录来自用户 OTA 的所有输入,然后在进行回归测试时重复使用相同的输入。

于 2017-05-01T19:57:49.423 回答
2

当我们谈论层时,我们通常谈论物理进程(具有不同的内存空间)。

因此,如果应用程序的层部署在不同的进程中,那么这些不同的进程将是不同的层。

例如,在 3 层应用程序中,业务层与大型机(独立进程)对话并与报告服务(独立进程)对话,那么该应用程序将是 5 层。

因此,通用名称是 n-tier。

于 2013-07-03T23:04:12.610 回答
2

来自https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

N层架构主要将应用程序轮胎划分为逻辑轮胎物理层,并将它们划分为子部分。 在此处输入图像描述

层是一种分离职责和管理依赖关系的方法。每一层都有特定的职责。较高层可以使用较低层中的服务,但反之则不行。

层在物理上是分开的,在不同的机器上运行。一个层可以直接调用另一个层,或者使用异步消息传递(消息队列)。尽管每一层都可能托管在自己的层中,但这不是必需的。多个层可能托管在同一层上。物理分离层提高了可扩展性和弹性,但也增加了额外网络通信的延迟。

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

N 层应用程序可以具有封闭层架构或开放层架构:

In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.

封闭层架构限制了层之间的依赖关系。但是,如果一层只是将请求传递到下一层,它可能会产生不必要的网络流量。

于 2018-07-21T02:15:58.973 回答
1

N 层应用程序是涉及三个以上组件的应用程序。那些组件是什么?

  • 缓存
  • 异步行为的消息队列
  • 负载均衡器
  • 用于搜索海量数据的搜索服务器
  • 处理海量数据的组件
  • 运行异构技术的组件,通常称为 Web 服务等。

所有像 Instagram、Facebook 这样的社交应用程序,像 Uber、Airbnb 这样的大型行业服务,像 Pokemon Go 这样的在线大型多人游戏,具有花哨功能的应用程序都是 n 层应用程序。

于 2020-05-20T11:10:33.843 回答
0

Martin Fowler 清楚地证明:

分层是软件设计人员用来分解复杂软件系统的最常用技术之一。您可以在机器架构中看到它,其中层从带有操作系统调用的编程语言下降到设备驱动程序和 CPU 指令集,以及芯片内部的逻辑门。网络在 TCP 之上有 FTP,它在 IP 之上,在以太网之上。

当从层的角度考虑系统时,您可以想象软件中的主要子系统以某种形式的层蛋糕排列,其中每一层都位于较低的层上。在这个方案中,高层使用低层定义的各种服务,但低层不知道高层。此外,每一层通常对上层隐藏其较低层,因此第 4 层使用第 3 层的服务,第 3 层使用第 2 层的服务,但第 4 层不知道第 2 层。(并非所有分层架构都像这样不透明,但大多数是——或者更确切地说,大多数是不透明的。)

将系统分解成层有许多重要的好处。

• 您可以将单个层理解为一个连贯的整体,而无需对其他层了解太多。您可以了解如何在 TCP 之上构建 FTP 服务,而无需了解以太网如何工作的细节。

• 您可以用相同基本服务的替代实现来替换层。FTP 服务无需更改即可通过以太网、PPP 或任何有线电视公司使用的方式运行。

• 最小化层之间的依赖关系。如果有线电视公司改变其物理传输系统,只要他们使 IP 工作,我们就不必改变我们的 FTP 服务。

• 图层是标准化的好地方。TCP 和 IP 是标准,因为它们定义了它们的层应该如何操作。

• 一旦您构建了一个层,您就可以将它用于许多更高级别的服务。因此,FTP、telnet、SSH 和 HTTP 使用 TCP/IP。否则,所有这些高级协议都必须编写自己的低级协议。来自凯尔·杰弗里·帕萨雷利图书馆

分层是一项重要的技术,但也有缺点。

• 层很好地封装了一些但不是全部的东西。因此,您有时会得到级联更改。分层企业应用程序中的经典示例是添加一个需要在 UI 上显示的字段,该字段必须在数据库中,因此必须添加到其间的每一层。

• 额外的层会损害性能。在每一层,事物通常都需要从一种表示形式转换为另一种表示形式。但是,底层函数的封装通常会给您带来超过补偿的效率增益。可以优化控制事务的层,然后使一切变得更快。但是分层架构中最难的部分是决定拥有哪些层以及每一层的职责是什么。

于 2019-05-22T13:48:52.470 回答