【问题标题】:Example of 4-Tier (for N-Tier) Architecture?4 层(用于 N 层)架构的示例?
【发布时间】:2012-06-01 10:49:12
【问题描述】:

最近我的一个朋友问我有关 N 层架构的问题,我能够通过示例向他解释 1、2 和 3 层架构。但是当我想给出超过 3 层的示例时,我被卡住了。我用谷歌搜索并寻求帮助,但找不到任何像样的例子。

它被命名为 N 层的事实让我认为“N”可以是从 1 开始的任何数字。但我找不到 4 层或 5 层的任何示例。

有人可以分享一些涉及超过 3 层的 N 层架构示例吗?

【问题讨论】:

  • 谁能提供.NET的例子?
  • N 层架构不依赖于供应商或语言。我以 Java 为例,但您可以用 ASP 代替 JSP,用 C# 代替 Java,用 .NET 代替 J2EE。
  • @MartinSpamer - 我尝试自己绘制地图,但不确定我是否做得对。由于我使用 .NET 技术,我认为使用 .NET 堆栈的示例会更容易解释。再次感谢您的回复。

标签: service architecture n-tier-architecture


【解决方案1】:
  1. 基础服务:例如数据库、目录服务、文件和打印服务、硬件抽象。这一层越来越多地被称为平台。
  2. 业务域层:应用服务器,如 JavaEE,包括 EJB、DCOM 或 CORBA 服务对象。提供业务功能,增加使用 SOA 和微服务。
  3. 表示层:例如Java Servlets/JSP、ASP、PHP。该层将越来越多地将 WebServices 包括为业务层服务的代理和适配器。
  4. 客户端层:瘦客户端(如浏览器上的 HTML 页面)和富客户端(如 Java WebStart 和 Flash)。
  • 在 Java EE 中,通常将业务域层分为数据访问(实体 Bean)和业务服务(会话 Bean)。
  • 在企业 SOA (Service Oriented Architecture) 中,ESB (Enterprise Service Bus) 通常作为第 1 层和第 2 层之间的附加层存在。它可能是平台供应的一部分。
  • 在 Mashups 中,您可以在第 3 层和第 4 层之间有一个聚合层。

被称为 N 层的转变反映了向越来越多的组件化架构的转变,从旧的客户端-服务器到第一个 3 层,然后是 4 层。层的定义特征是具有明确定义的关注点分离的接口。

【讨论】:

  • 我看到一些消息来源认为在客户端机器上执行的所有内容(并使用业务域 API)都是表示层。另一方面,我看到一些资源围绕数据库构建了一个精简的 API,并将其称为业务层使用的数据访问层。所以,我不确定在哪些情况下层中的分离是概念性的,在哪些情况下是物理的(单独的服务器)。
  • @JustAMartin 来源之间总会存在差异,我试图在我的回答中反映出来。
  • 在这种情况下 ESB 代表什么?
  • @Ali 企业服务总线 (en.wikipedia.org/wiki/Enterprise_service_bus)。我会加强答案,谢谢你的建议。
【解决方案2】:

四层架构包括以下内容

一个。客户端层——node.js angularJs 等基本上独立于服务器端,UI 团队独立处理客户端工件

b.聚合层 --- 内容交付网络 (akamai)

c。 api tier -- 所有服务器端调用的网关,可以有自己的缓存

d。服务层——包括内部或外部服务...

【讨论】:

  • 为什么这被否决了?想知道原因
【解决方案3】:

五分钟前我读到了这篇文章 https://www.nginx.com/blog/time-to-move-to-a-four-tier-application-architecture

客户端是您阅读它的地方 Api 或您的应用程序后端是您组装它的地方.. 数据聚合..要么通过外包事物的 jsons/xmls,要么通过数据库查询,最后服务层是您实际对数据库进行查询或在大数据上运行函数或从谷歌读取 GPS 位置和地图的地方......这就是我在这种情况下的看法。它只是将数据层从三层中划分出来。

但是这个 N 层模型是完全抽象的,因此您可以撕毁您的基础架构,直到您只拥有一些逻辑上的原子部分。还是在划分之前的结构。

【讨论】:

  • 是的,这在概念上比实际更抽象。当我想到层时,我更多的是在思考“为什么我应该将我的 Web 应用程序分成两部分并创建一个单独的后端 API?API 服务将位于哪里 - 在内联网区域或更安全的区域与数据库一起? "
【解决方案4】:

我倾向于用不那么抽象和更实际的解释来回答这个问题:“我要如何以及为什么要将我的系统分成多个层,我应该将它们放在服务器上的什么位置?”

基本上,当您创建一个使用数据库的简单网站时,您已经“开箱即用”了 3 层:

  • 数据层 - 数据库。但是,如果您使用的是短期内存缓存或文件系统,那么我们可能会争论是否可以将其视为“层”。

  • 应用层 - 在您的服务器上执行的代码。

  • 呈现(或客户端)层 - 在客户端机器上执行并将结果呈现给客户端的代码

现在,我们如何获得第四层?

很可能不需要拆分客户端层。它在客户的设备上,我们希望尽可能保持简单和高效。

我们可以拆分数据层吗?我已经看到一些系统使用围绕数据库、Azure Blob、文件系统等的 API 来创建一些可以被视为层的子系统。但这仍然是相同的数据层(a.k.a 基础服务层)还是我们可以将其视为一个单独的实体?如果我们把它分开,它会和我们的数据库在同一个物理(或虚拟)服务器上,这样我们就可以保护数据不被直接访问?

但是,在大多数情况下,拆分的是应用程序层。

其中一部分仍被命名为应用层。它成为一个内部 API Web 应用程序,并位于可以访问数据库的安全区域中。没有人可以直接访问数据库,只能通过这个应用层。

另一部分通过某种连接(HTTP 客户端等)成为应用层 API 的消费者。消费者可能被称为表示层(令人困惑 - 它与客户端层不一样吗?),即使它本身只有 JSON API 并且没有任何用户友好的格式。

但随之而来的问题是:在哪些情况下,作为开发人员,我们可能希望将我们的生活复杂化并将我们的 Web 应用程序拆分为表示层和应用程序层,而不是将它们作为层保持在同一个 Web 应用程序中?

在严重的工作负载中,单独的应用程序层可能有利于可扩展性,或者拒绝数据库连接到向用户公开的 Web 服务器(甚至是 Intranet 的服务器)可能是安全要求。

我看到一些雄心勃勃的项目从一开始就追求 4 层,然后诅咒自己过度设计的东西。您必须跟踪那些内部连接、安全性、身份验证令牌,控制套接字(不是在每个请求上打开新的 HTTP 连接),避免通过粗心创建的全局 HTTP 客户端实例意外共享多个并行请求的数据等。

【讨论】:

    【解决方案5】:

    4 层架构的一个简单示例是 RMI JDBC Servlet。这涉及 客户层 servlet 的应用服务器 用于服务器程序的 Rmi 服务器 用于数据库的 Jdbc 服务器

    【讨论】:

      【解决方案6】:

      这将取决于您要称为等级的内容。表示层的每个垂直都可以称为一个层。

      • 移动应用或网页前端(一页 Javascript 等)

      • 缓存或 CDN(内容交付网络)作为另一层。

      • 前端或 API 层

      如果服务需要多个微服务,也可以拆分业务层。比如

      • 业务流程层
      • 一个管理层。

      然后将数据层拆分为:

      • 数据库

      • 数据湖

      • 报告

      • 企业服务总线

      • 第三方访问数据(您的应用连接到其他 API 的地方)

      更多信息见Cloud Application Architecture

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        • 2013-07-03
        相关资源
        最近更新 更多