在传统意义上,N层意味着将应用程序分成“层”并将每个“层”放在不同的服务器上。这至少有三个原因:
维护:
a)代码维护:更容易修复错误和添加功能。
b)硬件维护:关闭一台服务器不会中断其他层的服务。
性能:一台服务器通常不够快,无法同时处理Web请求,业务逻辑计算和数据库/文件访问。
可伸缩性:特别是水平可伸缩性
a)容错:每层有多于1个物理服务器的能力意味着当1个服务器关闭时,应用程序仍然可以作为一个整体运行。
b)负载平衡:拥有多个层实例有助于服务大量请求。
如今,硬件和网络足够快,可以在单个服务器上每秒处理数千个请求。此外,IT现在的热门话题是“整合”。因此,即使将应用程序拆分为层,它们也可能最终在单个服务器上的虚拟机上托管。
我认为,现在当人们谈论N层架构时,他们正在谈论应用程序中关注点的分离。它更像是逻辑分离而不是物理分离。我认为只要我们实现良好的关注点分离和松散耦合,应用程序就不必是N层。似乎许多程序员认为N层架构是每个Web应用程序必须遵守的黄金标准。
那么,现在你的N层架构是什么?
答案 0 :(得分:3)
从维基百科文章中我读到:
通常,术语层用于描述物理分布 单独的服务器,计算机或网络上的系统组件 (处理节点)。一个三层架构将有三个 处理节点。图层指的是组件的逻辑分组 它可能或可能不是物理上位于一个处理节点上。
我认为“层”的概念和“层”的概念与时间混在一起。 我个人喜欢谈论层而不是层,因为我更喜欢PAAS解决方案,我只关注软件,而且行业正在朝着这个方向慢慢前进。
此外,当您计划可以大大扩展的应用程序时,我仍然认为您不应该考虑n层的可扩展性。 事实上,流量很大的非常受欢迎的网站只将它们分成3个组成部分: 数据库服务器,Web服务器(包括缓存服务器)和一些CDN(内容传递网络)。 这种分离可以在任何应用中实现。
但总而言之,我认为程序员应该只考虑应用程序中的层次和关注点分离,以实现最重要(和最困难)的任务:从长远来看可维护性。
答案 1 :(得分:2)
我认为它一直是人为的区别。我同意你的前提,即它现在主要指的是组件的逻辑分离。但是,仍然有很多应用程序太大(使用明智或数据方面)以适应单个机器,因此出于可伸缩性原因将应用程序分离为离散组件的想法绝对不会死。
答案 2 :(得分:1)
一个人的安全吗?我宁愿你点击我的网络服务器而不是我的应用服务器!