什么是N层架构?


193

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

这使我问,什么是N-Tier体系结构?一个人如何获得经验?


2
有趣的是,另一篇文章也询问了N-Tier架构是什么,但是答案却完全不同。stackoverflow.com/questions/7271165/…。似乎有用于软件的N-Tier体系结构和用于硬件的N-Tier体系结构。
2014年

Answers:


247

维基百科

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

所谓的“层级”是有争议的,但在我看来,它至少需要跨越过程边界。否则,它称为图层。但是,它不必在物理上不同的机器中。尽管我不建议这样做,但是您可以在同一盒子上托管逻辑层和数据库。

替代文字

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

对于n层编程,您需要以某种称为“数据集”的可移植形式打包数据,然后通过网络进行传输。.NET的DataSet类或诸如SOAP之类的Web服务协议很少是通过网络进行对象飞行的此类尝试。


6
“ 3层”和“ N层”有区别吗?
chakrit

7
这取决于您如何计算“层”(逻辑,物理等),但是编写一个应用程序很容易涉及三个以上的过程。UI,UI平台(如Eclipse RCP),Web服务,BLL,DAL,数据库,身份验证服务,报告服务,分析服务...
Eugene Yokota,

6
@chakrit:在我的时代(我已经老了),2层(客户端服务器)自动引用了n层。
爱德华多·莫尔蒂尼

@EugeneYokota-据说代表了体系结构中的物理部分(例如,在集群中可能会或可能不会进一步分配),而将引用应用程序组件的逻辑分组
伊莱兰·马尔卡

有人告诉我一些看起来很相似的东西,但是这些层是表示层-服务层-集成/数据层。您是否知道这些是与上述架构相同的东西还是不同的词?就我所知,它们似乎相同,但我想确定一下。
KayleighArianna

20

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

  • 3层表示表示层+组件层+数据访问层。
  • N层是在这些层之外添加其他层时,通常是为了实现额外的模块化,可配置性或与其他系统的互操作性。

12
实际上,如果这些层之一由远程方(例如付款处理器)托管,则该层可能不是那么“不必要”
Zak

1
嗯 “层”和“服务”之间存在巨大差异。N-Tier通常用于指示对于给定的层,它之上的任何内容都必须经过它才能访问较低级别的服务。如果它们是并行的,我将它们称为服务而不是层。
Dak

在构建通常的MCV(3层体系结构)时,可以决定使用双层接口来实现MCV,这样一来,人们实际上可以替换特定的层,而不必修改一行代码。我们经常看到这样做的好处,例如,在您希望能够使用多个数据库的情况下(在这种情况下,控制层和数据层之间具有双重接口)。将其放在视图层(演示)上后,可以(按住!)用另一台机器替换USER界面,从而实现REAL输入的自动化(!!!)
David Svarrer

15

这是一个流行词,指的是诸如Java-ASP.Net-中间件-数据库层之类的常规Web体系结构。所有这些都是一个“层”。


4

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

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

取自Microsoft 网站


4

如果我理解了这个问题,那么在我看来,发问者的确是在问:“好的,所以三层式是很好理解的,但是似乎在四层式上存在着炒作,困惑和不确定性,或者概括地说,N层架构的意思是。那么……什么是N层的定义得到了广泛的理解和认可?”

这实际上是一个很深的问题,并且要解释为什么,我需要更深入一点。忍受我

经典的3层体系结构:数据库,“业务逻辑”和表示形式,是阐明如何遵守关注点分离原则的好方法。就是说,如果我想更改“业务”如何为客户提供服务的方式,则不必查看整个系统就可以知道如何做到这一点,尤其是不应分散业务问题的决策Willy-nilly通过代码。

现在,该模型已经运行了数十年,并且是经典的“客户端-服务器”模型。快进到云产品,在Web产品中,Web浏览器是一组广泛且物理分布的用户的用户界面,并且通常最终不得不添加内容分发服务,而这些服务却不是经典的3层体系结构的一部分(和需要自行管理)。

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

现在,在牢记此概念的前提下,阅读N层体系结构示例的其他说明,您将开始理解这个问题。其他观点包括基于供应商的方法(例如NGINX),内容感知的负载平衡器,数据隔离和安全服务(例如IBM Datapower),所有这些方法可能会或可能不会为给定的体系结构,部署和用例增加价值


3

据我了解,N-Tier使用单独的物理机将业务逻辑,客户端访问和数据彼此分离。从理论上讲,其中一个可以独立于其他进行更新。


3

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

以此类推在http://msdn.microsoft.com/zh-cn/library/bb384398.aspx


3

在构建通常的MCV(3层体系结构)时,可以决定使用双层接口来实现MCV,这样一来,人们实际上可以替换特定的层,而不必修改一行代码。

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

将其放在视图层(表示)上时,可以(按住!)用另一台机器替换USER界面,从而自动执行REAL输入(!!!)-从而可以进行数以千计的繁琐的可用性测试无需任何用户重复一遍又一遍地轻敲并重新轻敲相同的内容。

一些人将具有1个或2个双接口的这种3层体系结构描述为4层5层体系结构,暗含着暗示了双接口。

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

行动范例

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


2

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

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

例如,在3层应用程序中,业务层与大型机对话(独立过程),与Reporting Service对话(独立过程),那么该应用程序将是5层。

因此,通用名称为n层。


2

来自https://docs.microsoft.com/zh-cn/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.

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


1

N层应用程序是包含三个以上组件的应用程序。这些成分是什么?

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

所有社交应用程序(如Instagram,Facebook),大型行业服务(如Uber,Airbnb),在线大型多人游戏(如Pokemon Go),具有精美功能的应用程序均为n层应用程序。


0

马丁·福勒清楚地表明:

分层是软件设计人员用来分解复杂软件系统的最常用技术之一。您可以在机器体系结构中看到它,其中层从一种编程语言开始,而操作系统调用则进入设备驱动程序和CPU指令集,并进入芯片内部的逻辑门。网络将FTP置于TCP之上,而TCP则位于IP之上,而IP则位于以太网之上。

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

将系统分为几层有许多重要的好处。

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

•您可以用相同基本服务的替代实现替换层。FTP服务可以在不更改以太网,PPP或任何电缆公司使用的情况下运行。

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

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

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

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

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

•额外的层可能会损害性能。通常,每一层都需要将一种表示形式转换为另一种表示形式。但是,对基础功能的封装通常会为您带来比补偿更大的效率提高。可以优化控制交易的层,然后可以使一切更快。但是,分层体系结构中最难的部分是确定要拥有的层以及每个层应该承担的责任。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.