什么是N层架构?

时间:2008-11-23 06:01:05

标签: architecture n-tier-architecture multi-tier

我最近看到很多开发人员的职位发布,其中包括一个或多或少类似的句子:“必须具有N层体系结构的经验”,或“必须能够开发N层应用程序”。

这让我想问一下,什么是N-Tier架构?如何获得使用它的经验?

12 个答案:

答案 0 :(得分:241)

Wikipedia

  

在软件工程中,多层次   架构(通常称为   n层架构)是一个   客户端 - 服务器架构,其中,   演示文稿,应用程序   处理和数据管理   逻辑上分开的过程。对于   例如,使用的应用程序   中间件来处理数据请求   在用户和数据库之间使用   多层架构。最多   广泛使用“多层次   架构“指的是三层   架构。

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

alt text

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

对于n层编程,您需要以某种称为“数据集”的可传输形式打包数据,并通过网络传输它们。 .NET的DataSet类或Web服务协议(如SOAP)很少通过网络传播对象。

答案 1 :(得分:22)

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

3-tier表示表示层+组件层+数据访问层。 N层是在这三个之外添加不必要的层并且用流行语标记的,所以看起来你的架构师看起来并不是一堆破解猴子。我说这是基于我必须使用的N层架构。

答案 2 :(得分:16)

这是一个流行语,指的是普通的Web架构,例如Javascript - ASP.Net - 中间件 - 数据库层。这些东西都是“等级”。

答案 3 :(得分:4)

  

N层数据应用程序是分离为的数据应用程序   多层。也被称为"分布式应用程序"和"多层次   应用," n层应用程序将处理分离为离散   在客户端和服务器之间分发的层。当你   开发访问数据的应用程序,你应该清楚   组成应用程序的各层之间的分离。

     

典型的n层应用程序包括表示层,中间层   层和数据层。分离各层的最简单方法   在n层应用程序中,为每个层创建离散项目   您想要包含在您的应用程序中。例如,   表示层可能是Windows窗体应用程序,而   数据访问逻辑可能是位于中间层的类库。   此外,表示层可以与数据通信   通过服务(如服务)访问中间层的逻辑。   将应用程序组件分成单独的层会增加   应用程序的可维护性和可伸缩性。它通过这样做   使更容易采用可应用于的新技术   单层,无需重新设计整个解决方案。在   此外,n层应用程序通常存储敏感信息   中间层,它保持与表示层的隔离。

取自微软website

答案 4 :(得分:4)

如果我理解这个问题,那么在我看来,提问者真的在问“好吧,所以3层很好理解,但似乎有4层的炒作,混乱和不确定性的混合,或者概括,N层架构意味着。那么......对于广泛理解和商定的N层的定义是什么?“

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

经典的3层架构:数据库,“业务逻辑”和演示,是阐明如何遵守关注点分离原则的好方法。也就是说,如果我想改变“业务”想要为客户提供服务的方式,我不应该透过整个系统来了解如何做到这一点,特别是决策业务问题不应该分散不知所措的代码。

现在,这种模式已经存在了数十年,它是典型的“客户端 - 服务器”模型。快进云产品,其中Web浏览器是广泛且物理分布的用户集的用户界面,并且通常最终必须添加内容分发服务,这些服务不是传统3层体系结构的一部分(和这需要自己管理。)

这个概念概括了服务,微服务,数据和计算的分布方式等等。某些东西是否是“层”主要归结为层是否为层的后面(或下面)的服务提供接口和部署模型。因此,内容分发网络将是一个层,但认证服务不是。

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

答案 5 :(得分:3)

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

答案 6 :(得分:3)

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

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

中等等

答案 7 :(得分:3)

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

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

当你把它放在View-layer (演示文稿)上时,你可以(保持!!)用另一台机器替换USER接口,从而自动化REAL输入(!!!) - 因此,您可以进行数千次繁琐的可用性测试,而无需任何用户不得不重复点击并重新重新点击相同的内容。

有些人将这种 3层架构描述为具有1个或2个双接口作为 4层 5层架构,暗示暗示双界面。

其他情况包括(但不限于)您 - 在半完全或完全复制的数据库系统的情况下实际上可以将其中一个数据库视为" master"因此,您将拥有包含主数据库的层和包含从数据库的另一层。

移动示例

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

答案 8 :(得分:2)

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

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

  

例如,在3层应用程序中,业务层与Mainframes(单独的流程)进行对话并与Reporting Service进行对话(单独的流程),然后该应用程序将是5层。

因此,通用名称是n层。

答案 9 :(得分:2)

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

N层架构主要将应用轮胎划分为逻辑轮胎物理层,并且将它们分为子部分。 enter image description here

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

层在物理上是分开的,在不同的计算机上运行。一层可以直接调用另一层,也可以使用异步消息传递(消息队列)。尽管每个层都可以托管在自己的层中,但这不是必需的。可能在同一层上托管多个层。物理上分离各层可以提高可伸缩性和弹性,但同时也会增加其他网络通信的延迟。

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

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.

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

答案 10 :(得分:1)

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

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

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

答案 11 :(得分:0)

马丁·福勒清楚地表明:

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

从层次上考虑系统时,您会想到主要子系统 在软件中以某种形式的层蛋糕排列,其中每一层 放在较低的层上。在此方案中,高层使用各种服务 由较低层定义,但较低层不知道较高层。 此外,通常每一层都将其下层隐藏在上层之上,因此 第四层使用第三层的服务,第三层使用第二层的服务,但是第四层 不知道第2层。(并非所有分层结构都是这样的不透明,但是 大多数是-或大多数情况下大多数都是不透明的。)

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

•您可以在不知道的情况下将单个层理解为一个连贯的整体 关于其他层的很多东西。您可以了解如何构建FTP服务 不了解以太网工作原理的详细信息。

•您可以用相同的替代实现替换层 基本服务。 FTP服务可以通过以太网,PPP, 或任何有线公司使用的东西。

•您可以最小化层之间的依赖性。如果电缆公司改变 它的物理传输系统,只要它们使IP工作,我们就不会 必须更改我们的FTP服务。

•图层是进行标准化的好地方。 TCP和IP是标准 因为它们定义了图层的工作方式。

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

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

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

•额外的层可能会损害性能。通常,每一层都需要 从一种表示转换为另一种表示。但是,封装 基本功能的使用通常可以使您获得更高的效率 比补偿。可以优化控制交易的层,并 然后将使一切变得更快。 但是,分层体系结构中最难的部分是确定要具有的层 以及每一层的责任。