我想知道是否有人可以简洁地比较/对比前端,后端和中间件("中端"?)之间的差异.
是否存在重叠的情况?是否有必须重叠的情况,前端/后端不能分开?在瓶颈方面,哪一方面与哪种类型的瓶颈有关?
这是一个细分:
前端层 - >用户界面层通常由HTML,Javascript,CSS,Flash和各种服务器端代码组成,如ASP.Net,经典ASP,PHP等.将此视为最接近用户在代码方面.
中间件,中间层 - >一层返回,通常称为系统的"管道"部分.Java和C#是编写这部分的常用语言,可以被视为UI和数据之间的粘合剂,可能是Web服务或WCF组件或其他SOA组件.
后端层 - >数据库和其他数据存储通常处于此级别.Oracle,MS-SQL,MySQL,SAP以及各种现成的软件都会浮现在这个软件上,这是对数据的最终处理.
任何这些之间都可能存在重叠,因为您可以将所有内容都放入一个层,就像ASP.Net网站一样,它使用内置的AJAX功能生成Javascript,而后面的代码可能包含数据库命令,使后面的代码包含中间和后面 - 等级.或者,可以使用VBScript作为所有层使用ADO对象并将所有三个层合并为一个层.
同样,在某些情况下,可以组合使用中间件和前端或后端.
瓶颈通常有几个不同的水平:
1)数据库或后端处理 - >这可能不同于工资单或销售或其他任务,其中数据库的吞吐量正在减少.
2)中间件瓶颈 - >这可能是某些Web服务可能达到容量但前端和后端具有处理更多流量的带宽.或者,可能有一些服务器是系统的一部分,不是UI部分或原始数据可能是使用Biztalk或MSMQ之类的瓶颈.
3)前端瓶颈 - >这可能是客户端或服务器端问题.例如,如果您购买了一台低端PC,并且加载了一个由下载大量数据组成的网页,那么客户端可能就是瓶颈所在.同样,如果服务器受到像Amazon.com或其他高流量网站有时可能获得的请求的影响,服务器可能会对请求进行排队.
其中一些是需要解释的,所以它并不是完美的任何方式和YMMV.
编辑:需要考虑的是一些系统可以有多个前端或后端.例如,内容管理系统可能会让网站访问者查看作为前端的内容,但内容编辑者如何更改网站上的数据呢?提取这些数据的能力可以被视为前端,因为它是一个UI组件,或者它可以被视为后端,因为它被内部用户而不是观看网站的一般公众使用.因此,这里有一些内容可以说.
一般来说,人们将应用程序的表示层称为前端,将持久层(通常是数据库)称为后端,将任何内容称为中间层.这组想法通常被称为3层架构.它们允许您将应用程序分成更容易理解(和可测试!)的块; 您还可以在更高层中更轻松地重用较低层代码.
哪个代码是哪一层有些主观; 图形设计人员倾向于将所有不是表示的东西都视为后端,数据库人员将数据库前面的所有内容都视为前端,依此类推.
但是,并非所有应用程序都需要以这种方式分离出来.拥有3个独立的子项目肯定比打开index.php和破解更多的工作; 取决于(1)您希望维护应用程序需要多长时间(2)您希望应用程序获得的复杂程度,您可能希望放弃复杂性.
您的问题实际上有3个问题:
定义前端,中间和后端
它们如何以及何时重叠?
他们相关的常见瓶颈.
JB King所描述的是正确的,但它是一个特殊的简单版本,实际上他将front,middle和bacn映射到MVC层.他将M映射到后面,V映射到前面,C映射到中间.
对于很多人来说,它很好,因为它们来自丑陋的世界,甚至没有应用MVC,你可以在视图中直接调用DB.
然而,在真实,复杂的Web应用程序中,您确实有两个或三个不同的层,称为前,中和后.它们中的每一个都可以具有关联的数据库和控制器.
最终用户可以看到前端.它不应该与前台混淆,后台是前端参数和管理的UI.前端通常是某种CMS或电子商务平台(Magento等)
中端不是强制性的,是商业逻辑的所在.它将基于PIM,MDM工具或某种自定义数据库,您可以在其中丰富您的产品或文章(用于CMS).它也是您编写需要在不同前端之间共享的业务功能的地方(例如在PC前端和基于API的移动应用程序之间).有时,像ActiveMQ这样的ESB或工具将是您的中端
后端将是第3层,覆盖源数据库或ERP.它可能是API跟踪和读取ERP的过程.如果您正在进行电子商务,它可能是您的供应商数据库.实际上,它实际上取决于Web项目,但它始终是一个中央存储库.它可以通过DB调用,API,Hibernate层或全功能的后端应用程序访问
这个描述意味着在这个帖子中不可能回答其他两个问题,因为瓶颈实际上取决于你的3个结尾包含什么:JB King写的内容对于简单的MVC架构仍然是正确的
在问到这个问题的时候(5年前),也许MVC模式还没有被广泛采用.现在,绝对没有理由不遵循MVC模式,并且视图将与DB调用相关联.如果您阅读"是否存在必须重叠的情况,并且前端/后端不能分开?" 在更广泛的意义上,有3个不同的组件,那么有时候3层架构当然没用.想想一个简单的个人博客,你不需要提取外部数据或轮询RabbitMQ队列.