Web开发中的前端,后端和中间件之间的区别

我想知道是否有人能简洁地比较/对比前端,后端和中间件(“中端”?)之间的差异。

有没有重叠的情况? 他们必须重叠的情况下,前端/后端不能分开? 就瓶颈而言,哪一端与哪种瓶颈有关?

这里是一个细目:

前端层 – >用户界面层通常由HTML,Javascript,CSS,Flash以及各种服务器端代码(如ASP.Net,经典ASP,PHP等)组成。将此视为最接近用户在代码方面。

中间件,中间层 – >一层返回,通常被称为系统的“pipe道”部分。 Java和C#是编写这个部分的通用语言,可以被看作UI和数据之间的粘合剂,可能是Web服务或WCF组件或其他SOA组件。

后端层 – >数据库和其他数据存储通常在这个级别。 Oracle,MS-SQL,MySQL,SAP以及各种现成的软件让我们想起了这个数据的最终处理软件。

重叠可以存在于任何这些之间,因为你可以将所有东西都倒入一层,就像一个ASP.Net网站,它使用内置的AJAXfunction来生成Javascript,而后面的代码可能包含数据库命令,使得后面的代码包含中间和后面 – 端层。 或者,可以使用VBScript作为使用ADO对象的所有图层,并将所有三层合并为一个。

同样,在某些情况下,可以将中间件和前端或后端进行组合。

瓶颈通常对他们有几个不同的层次:

1)数据库或后端处理 – >这可以从工资或销售或其他任务吞吐量到数据库陷入困境的其他任务。

2)中间件瓶颈 – >这将是一些networking服务可能达到的容量,但前端和后端有带宽来处理更多的stream量。 或者,可能有一些服务器是系统的一部分,不完全是UI部分,或者是使用类似Biztalk或MSMQ的瓶颈的原始数据。

3)前端瓶颈 – >这可能是客户端或服务器端的问题。 例如,如果你拿了一台低端个人电脑,并加载了一个包含大量下载数据的网页,那么客户端可能就是瓶颈所在。 同样,服务器可能会排队请求,如果它正在像亚马逊网站或其他高stream量的网站有时可能得到的要求。

其中的一些内容有待解释,所以并不完善。


编辑:需要考虑的是某些系统可以有多个前端或后端。 例如,内容pipe理系统可能会让网站访问者查看前端内容,但内容编辑者如何更改网站上的数据呢? 提取这些数据的能力可以被看作是前端,因为它是一个UI组件,或者它可以被看作是后端,因为它被内部用户使用,而不是普通大众查看站点。 因此,这里有一些话要说。

一般来说,人们将应用程序的表示层作为其前端 ,持久层(通常是数据库)作为后端 ,以及作为中间层的任何东西。 这套思想通常被称为三层体系结构。 他们让你把你的应用程序分成更容易理解的(和可testing的!)块; 您也可以在更高层次更容易地重用低层代码。

哪个代码是哪个层次的一部分是有些主观的; 平面devise师倾向于将所有不以performanceforms为后端的东西都考虑进来,数据库人员把数据库前面的所有东西都当作前端,等等。

不过并不是所有的应用程序都需要这样分离。 有3个独立的子项目比只是打开index.php并且破解更多的工作。 取决于(1)您期望维护应用程序的时间有多长(2)您期望应用程序得到多么复杂,您可能想要放弃复杂性。

其实有三个问题在你的问题中:

  • 定义前端,中间和后端
  • 他们如何以及何时重叠?
  • 他们相关的通常瓶颈。

JB King所描述的是正确的,但它是一个特别简单的版本,实际上他将前,中,后映射到一个MVC层。 他将M映射到后面,V映射到前面,C映射到中间。

对于很多人来说,这很好,因为他们来自丑恶的世界,即使MVC没有被应用,你也可以直接在数据库中调用。

但是,在真实的,复杂的Web应用程序中,实际上有两个或三个不同的层,称为前,中,后。 他们每个人可能有一个关联的数据库和一个控制器。

前端将由最终用户可见。 它不应该与前台,前台的参数和pipe理用户界面相混淆。 前端通常是某种CMS或电子商务平台(Magento等)

中端不是强制性的,是商业逻辑的地方。 它将基于PIM,MDM工具或某种自定义数据库,可以丰富您的产品或文章(适用于CMS)。 它也将是您编写需要在不同前端之间共享的业务function的地方(例如PC前端和基于API的移动应用程序之间)。 有时候,像ActiveMQ这样的ESB或工具将会是你的中端

后端将是第三层,包括您的源数据库或您的ERP。 这可能只是API的读写你的ERP。 如果你正在做电子商务,它可能是你的供应商数据库。 实际上,它确实取决于Web项目,但它始终是一个中央存储库。 它将通过数据库调用,API或Hibernate层或全function的后端应用程序进行访问

这个描述意味着在这个线程中回答其他两个问题是不可能的,因为瓶颈真的取决于你的3个结尾包含什么:JB King写的简单的MVC体系结构

在问(5年前)问题的时候,也许MVC模式还没有被广泛采用。 现在,绝对没有理由不遵循MVC模式,并且将视图与DB调用绑定在一起。 如果你读到这样一个问题:“他们必须重叠的情况下,前端/后端不能分开吗? 从更广泛的意义上讲,有3个不同的组件,那么当时的3层架构当然是无用的。 想一个简单的个人博客,你不需要拉外部数据或轮询RabbitMQ队列。

在networking和安全方面,后端是目前最安全的(应该是)安全节点。

通常作为networking服务器的中间部分将在某种程度上处于狂野状态,并在很多方面从公司的networking中断。 中端节点通常放置在DMZ中,并通过防火墙设置从networking中分割出来。 网页的大部分服务器端代码parsing都是在中端Web服务器上处理的。

到达后端意味着要经过中间端,中间端有精心devise的一组规则,允许/不允许访问存储在数据库(后端)服务器上的重要数字。

这是一个真实世界的例子,显示前/中/后端。

一般说明:

  • 前端负责向用户呈现数据。 请注意有趣的怪癖,你可能有两个不同的前端与单个后端相关联
  • 后端提供业务逻辑/数据持久性。
  • 中间件(图中的activemq)负责系统到系统。 后端之间的整合。 通常它被安装为单独的应用程序 在这里输入图像说明

重叠:

前端和后端之间可能有重叠。 这通常会导致应用程序维护和可伸缩性方面的长期问题。 在遗留应用程序中相当普遍。

大多数现代技术堆栈鼓励开发者严格分离。 例如在图片中,您可以看到第一个系统的后端具有其他Web服务,这是明确的分隔线。

瓶颈

大部分瓶颈是由数据库/networking造成的。 数据库位于后端。 至于networking问题,每个连接都经过了netowrk,所以每个连接都有可能变慢。 通过良好的应用程序devise,这些问题可以大面积避免。