我想知道是否有人可以简洁地比较/对比前端,后端和中间件(“中端”?)之间的差异。
是否存在重叠的情况?是否存在必须重叠且前端/后端无法分离的情况?在瓶颈方面,哪一端与哪种类型的瓶颈相关?
Answers:
这是一个细分:
前端层->用户界面层通常由HTML,Javascript,CSS,Flash和各种服务器端代码(例如ASP.Net,经典ASP,PHP等)组成,它们被认为是最接近用户的在代码方面。
中间层中间件->后一层,通常称为系统的“管道”部分。Java和C#是用于编写此部分的通用语言,可以将其视为UI和数据之间的粘合剂,并且可以是Web服务或WCF组件或其他SOA组件。
后端层->数据库和其他数据存储通常在此级别。Oracle,MS-SQL,MySQL,SAP和各种现成的软件都可以想到,这是对数据的最终处理。
两者之间可能存在重叠,因为您可以将所有内容都叠加到一个层,例如ASP.Net网站,该网站使用生成Javascript的内置AJAX功能,而背后的代码可能包含数据库命令,从而使得背后的代码同时包含中间和后面-端层。或者,可以使用VBScript使用ADO对象充当所有层,并将所有三层合并为一层。
同样,在某些情况下,可以将中间件与前端或后端组合使用。
瓶颈通常具有几个不同的层次:
1)数据库或后端处理->这可能与工资或销售或其他任务有所不同,在这些任务中,数据库的吞吐量正在使事情陷入困境。
2)中间件瓶颈->这将是某些Web服务可能无法承受容量的地方,但是前端和后端具有处理更多流量的带宽。或者,可能有一些服务器不是系统的一部分,而是系统的一部分,而使用Biztalk或MSMQ之类的原始数据可能会成为瓶颈。
3)前端瓶颈->这可能是客户端或服务器端的问题。例如,如果您使用一台低端PC并加载了一个包含许多正在下载的数据的网页,则客户端可能是瓶颈所在。同样,如果服务器受到诸如Amazon.com或其他高流量网站有时可能收到的请求的困扰,则服务器可能正在排队请求。
其中的某些内容需要解释,因此无论从哪种角度来讲,它都不是完美的。
编辑:要考虑的是某些系统可以具有多个前端或后端。例如,内容管理系统可能会为网站访问者提供一种查看前端内容的方法,但是内容编辑器如何能够更改网站上的数据呢?提取此数据的能力可以看作是前端,因为它是UI组件,或者可以看作是后端,因为它是由内部用户而不是查看站点的公众使用的。因此,这里有一些背景要说。
一般而言,人们将应用程序的表示层称为前端,将其持久层(通常为数据库)称为后端,并将介于两者之间的任何内容称为中间层。这套想法通常称为3层架构。它们使您可以将应用程序分成更容易理解(和可测试!)的块;您还可以更轻松地在较高层中重用较低层的代码。
哪个代码属于哪一层是有些主观的;图形设计师倾向于将不是表示形式的所有内容都视为后端,数据库人员则将数据库前面的所有内容都视为前端,依此类推。
但是,并非所有应用程序都需要以这种方式分离出来。与仅打开index.php并进行破解相比,拥有3个独立的子项目无疑是更多的工作。取决于(1)您期望将应用程序维护多长时间(2)您期望应用程序变得多么复杂,您可能希望放弃复杂性。
实际上,您的问题中有3个问题:
JB King所描述的是正确的,但这是一个特定的简单版本,实际上,他将前,中间和bacn映射到了MVC层。他将M映射到后面,将V映射到前面,将C映射到中间。
对于许多人来说,这很好,因为它们来自丑陋的世界,即使没有应用MVC,您也可以在视图中进行直接DB调用。
但是,在实际的复杂Web应用程序中,实际上的确有两个或三个不同的层,分别称为前,中和后。它们每个都可以具有关联的数据库和控制器。
前端将对最终用户可见。不应将其与前台(用于前台参数和管理的UI)混淆。前端通常是某种CMS或电子商务平台(Magento等)
中间端不是强制性的,而是业务逻辑所在的位置。它将基于PIM,MDM工具或某种自定义数据库,您可以在其中丰富产品或文章(用于CMS)。它也是您编写需要在不同的前端之间共享的业务功能(例如,在PC前端和基于API的移动应用程序之间)共享的地方。有时,ESB或ActiveMQ之类的工具将成为您的中端
后端将是第3层,覆盖您的源数据库或ERP。可能是将API写入您的ERP或从中读取。如果您要进行电子商务,则可能是您的供应商数据库。实际上,它确实取决于Web项目,但是它始终是一个中央存储库。它可以通过数据库调用,API,Hibernate层或功能齐全的后端应用程序进行访问
这个描述意味着在这个线程中不可能回答其他两个问题,因为瓶颈实际上取决于三个端点所包含的内容:对于简单的MVC架构,JB King编写的内容仍然适用
在问这个问题时(5年前),也许MVC模式尚未得到广泛采用。现在,绝对没有理由不遵循MVC模式,并且视图将与数据库调用相关联。如果您阅读问题“在某些情况下它们必须重叠并且前端/后端不能分开吗?” 从广义上讲,具有3个不同的组件,则3层架构当然毫无用处。想想一个简单的个人博客,您无需提取外部数据或轮询RabbitMQ队列。
这是一个显示前端/中端/后端的真实示例。
前端和后端之间可能有重叠。这通常会导致应用程序维护和可伸缩性方面的长期问题。在遗留应用程序中相当普遍。
大多数现代技术堆栈都鼓励开发人员严格区分。例如,在图片中,您可以看到第一个系统的后端具有Rest Web服务,这是清晰的分隔线。
大多数瓶颈是由数据库/网络引起的。数据库位于后端。至于网络问题,每个连接都经过网络,因此每个连接都有可能变慢。通过良好的应用程序设计,可以避免这些问题。
就网络和安全性而言,后端是迄今为止(应该是)最安全的节点。
中端部分通常是Web服务器,在某种程度上很疯狂,并且在许多方面与公司的网络隔离。中端节点通常放置在DMZ中,并使用防火墙设置从网络中进行分段。网页的大多数服务器端代码解析都是在中端Web服务器上进行的。
进入后端意味着要经历中间端,中间端有一组精心设计的规则,允许/禁止访问存储在数据库(后端)服务器上的重要数字。