现在的N层架构是什么意思?

6
在传统的意义上,N层意味着将应用程序分成“层”,并将每个“层”放在不同的服务器上。这样做至少有三个原因:
1. 维护: a) 代码维护:更容易进行错误修复和功能添加。 b) 硬件维护:关闭一个服务器不会影响其他层提供服务。
2. 性能:通常一个服务器无法同时处理Web请求、业务逻辑计算和数据库/文件访问。
3. 可扩展性:具体是水平可扩展性 a) 容错能力:每个层可以有多个物理服务器,这意味着当一个服务器关闭时,应用程序仍然可以作为整体运行。 b) 负载均衡:拥有多个层的实例可以帮助处理大量请求。
如今,硬件和网络足以在单个服务器上每秒服务数千个请求。此外,IT领域的流行词是“整合”。即使应用程序被分成了层,它们可能最终也将托管在单个服务器上的虚拟机上。
我认为,如今当人们谈论N层架构时,他们谈论的是应用程序内部的关注点分离。这更多是一种逻辑分离而不是物理分离。我认为只要我们实现良好的关注点分离和松耦合,应用程序就不必是N层架构。只是似乎许多程序员认为N层架构是每个Web应用程序必须遵守的黄金标准。
那么,对于您来说,N层架构是什么?
3个回答

3

根据我阅读的维基百科文章:

通常,术语“层”用于描述系统组件在单独的服务器、计算机或网络(处理节点)上的物理分布。三层架构将有三个处理节点。层指的是可能或可能不在一个处理节点上的组件的逻辑分组。

我认为“层”的概念和“层”的概念随着时间的推移而混淆了。我个人更喜欢仅谈论层,而不是层次结构,因为我更喜欢PAAS解决方案,我的关注点仅在软件上,并且该行业正在缓慢向这个方向发展。

此外,当您计划制作一个可以大大扩展的应用程序时,我仍然认为您不应该考虑n层可扩展性。事实上,非常受欢迎的具有大量流量的网站只将自己分为3个组件:数据库服务器、Web服务器(包括缓存服务器)和几个CDN(内容传递网络)。这种分离可以在任何应用程序中实现。

但最后,我认为程序员应该只考虑应用程序内的层和关注点分离,以实现最重要(也是最困难)的任务:长期可维护性。


1
同意。我猜经理/高层管理人员/面试官喜欢使用“N层”这个词,因为如果做得好,已经证明了N层提供可维护性、性能和可扩展性。但应该从另一个角度来看待它。此外,每次谈论可扩展性时,我都会想到这篇文章 - Thomas Li
2
+1 - 层是逻辑上的,层次是物理上的。这两个概念仍然非常相关,不应混淆。 - Adrian K

2

安全性是首要的吗?我宁愿你攻击我的 Web 服务器,也不要碰我的应用程序服务器!


2

我认为,一直以来,“组件化”都是一个人为的区分。我同意你的前提,即当今它主要指的是组件之间的逻辑分离。然而,仍有许多应用程序(无论是使用上还是数据方面)过于庞大,无法在单台机器上运行,因此将应用程序分成离散的组件以实现可扩展性的想法绝不会消失。


同意。出于可扩展性的原因将应用程序分离为离散组件并未过时,但更快的硬件、网络和服务器整合显然降低了需要这样做的应用程序数量。 - Thomas Li
它可能并没有死亡,但例如在网站的情况下,有更有效的方法来处理更多的页面浏览量。 - Durden81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接