应用程序服务器和 Web 服务器有啥区别?

Posted

技术标签:

【中文标题】应用程序服务器和 Web 服务器有啥区别?【英文标题】:What is the difference between application server and web server?应用程序服务器和 Web 服务器有什么区别? 【发布时间】:2010-10-30 11:43:33 【问题描述】:

应用服务器和Web服务器有什么区别?

【问题讨论】:

性能方面哪个是更好的应用服务器或网络服务器 【参考方案1】:

大多数情况下,这些术语 Web 服务器和应用程序服务器可以互换使用。

以下是 Web 服务器和应用程序服务器在功能上的一些主要区别:

Web 服务器旨在提供 HTTP 内容。 App Server 也可以提供 HTTP 内容,但不仅限于 HTTP。可以提供RMI/RPC等其他协议支持 Web 服务器主要设计用于提供静态内容,尽管大多数 Web 服务器都有插件来支持脚本语言,如 Perl、php、ASP、JSP 等,这些服务器可以通过这些插件生成动态 HTTP 内容。 大多数应用服务器都将 Web Server 作为其不可分割的一部分,这意味着 App Server 可以做任何 Web Server 能够做的事情。此外,App Server 具有支持应用程序级服务的组件和功能,例如连接池、对象池、事务支持、消息传递服务等。 由于 Web 服务器非常适合静态内容,而应用服务器非常适合用于动态内容,因此大多数生产环境都将 Web 服务器用作应用服务器的反向代理。这意味着在为页面请求提供服务时,静态内容(例如图像/静态 html)由解释请求的 Web 服务器提供。使用某种过滤技术(主要是请求资源的扩展)Web 服务器识别动态内容请求并透明地转发到应用服务器

此类配置的示例是 Apache Tomcat HTTP Server 和 Oracle(以前称为 BEA)WebLogic Server。 Apache Tomcat HTTP Server 是 Web 服务器,Oracle WebLogic 是应用程序服务器。

在某些情况下,服务器是紧密集成的,例如 IIS 和 .NET Runtime。 IIS 是网络服务器。 IIS 配备 .NET 运行环境后,即可提供应用服务。

【讨论】:

JBoss(现为 WildFly)也是应用服务器的著名示例:D 很好的解释,因为我们可以使用应用程序服务器而不是 Web 服务器,为单个应用程序同时拥有 Web 服务器和应用程序服务器有什么好处?以及性能方面的最佳选择是什么? "Apache Tomcat HTTP Server 是 Web 服务器,Oracle WebLogic 是应用程序服务器。"所以首先,Apache Tomcat 和 Apache HTTP 服务器是两个不同的产品。这并不是一个准确的说法。 Apache Tomcat 是一个应用服务器。当然,它也可以提供网页服务,但它是用于部署 Java 的应用服务器。我意识到很多人松散地使用术语“网络服务器”。但这只会让人们感到困惑。 Apache Tomcat 不是一个 Web 服务器,它是一个运行 Java 服务器的应用服务器。 Apache HTTP 服务器是一个 Web 服务器。没有称为 Apache Tomcat HTTP 服务器的服务器。 -1 用于混淆 Apache Tomcat 和 Apache HTTPD。 ***.com/questions/30632/…【参考方案2】:

这是一些场景的详细答案,可以清楚地了解差异和相似之处,以及两者如何协同工作。

应用服务器是一个有时与网络服务器混用的术语。虽然 Web 服务器主要处理 HTTP 协议,但应用程序服务器处理多种不同的协议,包括但不限于 HTTP

Web 服务器的主要工作是显示网站内容,而应用服务器负责逻辑,即用户与显示内容之间的交互。应用程序服务器与网络服务器协同工作,其中一个显示,另一个交互。

服务器和客户端之间来回传输的信息不仅限于简单的显示标记,还包括两者之间的交互。

在大多数情况下,服务器通过组件 API 创建此交互,例如 J2EE(Java 2 平台)EJB(企业JavaBean) 和其他不同的应用软件模型。

一个例子:

了解应用程序服务器与 Web 服务器一起使用的场景与没有应用程序服务器的场景之间差异的最佳方法是通过在线商店。

场景 1:没有应用程序服务器的 Web 服务器

您有一个只有 Web 服务器而没有应用程序服务器的在线商店。该网站将提供一个展示,您可以从中选择产品。当您提交查询时,站点会执行查找并将 HTML 结果返回给其客户端。 Web 服务器将您的查询直接发送到数据库服务器(请耐心等待,我将在下一篇文章中解释这一点)并等待响应。收到后,Web 服务器会将响应制定为 HTML 文件并将其发送到您的 Web 浏览器。每次运行查询时都会发生服务器和数据库服务器之间的这种来回通信。

场景 2:带有应用服务器的 Web 服务器

如果您要运行的查询之前已经完成并且此后没有数据更改,则服务器将生成结果而无需将请求发送到数据库服务器。这允许实时查询,其中第二个客户端可以访问相同的信息并接收实时、可靠的信息,而无需向数据库服务器发送另一个重复查询。服务器基本上充当数据库服务器和 Web 服务器之间的中介。这允许在第一种情况下提取的信息可重用,因为此信息嵌入在特定的“自定义”HTML 页面中,这不是可重用的过程。第二个客户端将不得不再次请求信息并接收另一个包含所请求信息的 HTML 嵌入页面 - 效率非常低。更不用说这种类型的服务器非常灵活,因为它能够管理自己的资源,包括安全性、事务处理、消息传递和资源池。

为了支持如此多样的复杂任务,该服务器必须具有内置冗余、强大的处理能力和大量 RAM,以实时处理它提取的所有数据。

【讨论】:

这并不准确/令人困惑,即使对于 Web 应用程序也是如此(即术语应用程序服务器适用于非 Web 应用程序)。仅考虑 Web:Web 服务器包括用于处理 Web 请求 (http) 的软件(apache、nginx)。应用程序服务器包含/公开应用程序(例如 php 代码)。它们可能是同一台机器,也可能不是——例如,在一台机器(Web 服务器)上使用 nginx 将请求转发到另一台本身没有任何机器(应用程序服务器)上的 php-fpm 是正常的http 访问(只为 php-fpm 本身暴露端口)。 @AD7six Web 服务器专门处理 HTTP 请求,而应用程序服务器通过包括 HTTP 在内的任意数量的协议处理应用程序的业务逻辑。 我的意思是应用服务器可以处理http请求,这绝不是要求。 the application server deals with several different protocols, including, but not limited, to HTTP 在重新阅读给出的示例后,我看不到任何真正的清晰之处 - 描述主要与缓存有关。需要明确的是,网络服务器是软件,应用程序是软件。如果它们部署在同一台机器上,则可以随意引用该机器。如果它们在不同的机器上,那么将运行 webserver as 的机器称为 webserver,将运行应用程序的机器称为 appserver 是很正常的。您通常会根据负载和负载平衡来拆分事物。总的来说,我发现这个答案并没有增加任何有用的东西。 @AD7six 我的回答是为了补充其他答案,即其他答案已经意味着你所问的只是对它的扩展。【参考方案3】:

这两个术语都非常通用,一个包含另一个,在某些情况下反之亦然。

网络服务器:使用 http 协议向网络提供内容。

应用服务器:托管和公开业务逻辑和流程。

我认为主要是web服务器通过http协议暴露一切,而应用服务器不限于此。

也就是说,在很多场景中你会发现Web服务器被用来创建应用服务器的前端,也就是说,它暴露了一组允许用户与业务规则交互的网页在应用服务器中找到。

【讨论】:

【参考方案4】:

网络服务器

运行python -m 'SimpleHTTPServer' 并转到http://localhost:8080。您看到的是一个正在运行的 Web 服务器。服务器只是通过 HTTP 提供存储在您计算机上的文件。关键是这一切都是在 HTTP 协议之上完成的。例如,还存在 FTP 服务器,它们执行完全相同的操作(提供存储的文件),但基于不同的协议。

应用服务器

假设我们有一个像下面这样的小应用程序(来自Flask 的sn-p)。

@app.route('/')
def homepage():
    return '<html>My homepage</html>'

@app.route('/about')
def about():
    return '<html>My name is John</html>'

小示例程序将 URL / 映射到函数 homepage() 并将 /about 映射到函数 about()

要运行此代码,我们需要一个应用服务器(例如 Gunicorn) - 一个可以侦听来自客户端的请求并使用我们的代码动态返回某些内容的程序或模块。在示例中,我们只是返回了一些非常糟糕的 HTML。

其他人都在谈论的业务逻辑是什么?好吧,由于 URL 映射到我们代码库中的某个特定位置,因此我们假设展示了一些关于我们的程序如何工作的逻辑。


回顾

网络服务器 - 提供存储在某处的文件(最常见的是 .css、.html、.js)。常见的 Web 服务器有 Apache、Nginx 甚至 Python 的 SimpleHTTPServer。

应用服务器 - 提供动态生成的文件。本质上,大多数 Web 服务器都有某种插件,甚至带有内置功能来做到这一点。还有严格的应用服务器,如 Gunicorn (Python)、Unicorn (Ruby)、uWSGI (Python) 等。

请注意,您实际上可以使用应用程序服务器的代码构建 Web 服务器。这在开发过程中的某些情况下完成,您不希望在您的计算机上运行大量不同的服务器。

【讨论】:

这是最好最简洁的答案。我想知道是否可以将 Web 服务器视为应用程序服务器的子集。现在我认为它就像一个 web 服务器就像一个 getter 方法,一个应用程序服务器就像一个工厂方法(其中 URL 是一个构造函数参数:D) Uff.. 最后,感谢您提供 Python 视角。尽管这个话题看起来与语言无关,但事实并非如此。没有使用过 EJB 的人不会清楚地理解面向 Java 的答案。 谢谢。 “要运行这段代码,我们需要一个应用服务器”,你能指定运行flask程序的应用服务器是什么吗? 这是一个近乎完美的答案 @aderchox 将 Apache 变成应用服务器。所以不知道你的意思是它不准确。 Nginx 可以用 Lua 扩展,所以你甚至可以让它煮咖啡。这是否意味着 Nginx 也是一个咖啡机?【参考方案5】:

正如 Rutesh 和 jmservera 所指出的,区别是模糊的。从历史上看,它们是不同的,但到 90 年代,这两个先前截然不同的类别融合了特征并有效地融合在一起。此时最好将“App Server”产品类别想象为“Web 服务器”类别的严格超集。

一些历史。在 Mosaic 浏览器和超链接内容的早期,出现了一种称为“Web 服务器”的东西,它通过 HTTP 提供网页内容和图像。大多数内容是静态的,HTTP 1.0 协议只是一种传送文件的方式。 “Web 服务器”类别很快演变为包括 CGI 功能——有效地在每个 Web 请求上启动一个进程以生成动态内容。 HTTP 也变得成熟,产品变得更加复杂,具有缓存、安全和管理功能。随着技术的成熟,我们从 Kiva 和 NetDynamics 那里获得了公司特定的基于 Java 的服务器端技术,最终都合并到了 JSP 中。微软在 Windows NT 4.0 中添加了 ASP,我认为是在 1996 年。静态 Web 服务器学习了一些新技巧,因此它是许多场景的有效“应用服务器”。

在并行类别中,应用服务器已经发展并存在了很长时间。公司为 Unix 提供了 Tuxedo、TopEnd、Encina 等产品,这些产品在哲学上源自大型机应用程序管理和监控环境,如 IMS 和 CICS。 Microsoft 的产品是 Microsoft Transaction Server (MTS),后来演变成 COM+。这些产品中的大多数都指定了“封闭的”特定于产品的通信协议,以将“胖”客户端与服务器互连。 (对于 Encina,通信协议是 DCE RPC;对于 MTS 是 DCOM;等等。)在 1995/96 年,这些传统的应用服务器产品开始嵌入基本的 HTTP 通信能力,首先是通过网关。线条开始模糊。

Web 服务器在处理更高的负载、更多的并发性和更好的功能方面变得越来越成熟。应用服务器提供了越来越多的基于 HTTP 的通信能力。

此时,“应用服务器”和“网络服务器”之间的界限是模糊的。但人们继续以不同的方式使用这些术语,作为强调的问题。当有人说“Web 服务器”时,您通常会想到以 HTTP 为中心、Web UI 和面向应用程序。当有人说“应用服务器”时,您可能会想到“更重的负载、企业功能、事务和队列、多通道通信(HTTP + 更多)。但通常它是同时满足两组工作负载需求的同一个产品。

IBM 的“应用服务器”WebSphere 拥有自己的捆绑网络服务器。 WebLogic,另一个传统的应用服务器也是如此。 Windows 是 Microsoft 的应用服务器(除了是其文件和打印服务器、媒体服务器等),它捆绑了 IIS。

【讨论】:

非常明确的答案。但是,您能否详细说明一下允许 Web 服务器充当应用程序服务器的“新技巧”。 “新技巧”意味着运行服务器端逻辑。像 ASP 或其他脚本逻辑。最初的“网络服务器”只是从文件系统返回静态内容。现在,我们已经走了很长一段路。 我读过很多关于“企业功能”的文章。你能详细说明一下吗?【参考方案6】:

正如许多人之前所说,Web 服务器处理 HTTP 请求,而应用程序服务器处理分布式组件的请求。 因此,了解差异的最简单方法可能是比较这两种产品提供的编程环境。

Web 服务器 -> 编程环境

IIS : ASP (.NET)

Tomcat : Servlet

码头:Servlet

Apache : PHP, CGI

应用服务器 -> 编程环境

MTS : COM+

WAS:EJB

JBoss:EJB

WebLogic 应用服务器:EJB

关键区别在于应用服务器支持一些分布式组件技术,提供远程调用和分布式事务等功能,如Java世界中的EJBCOM+ 在 Microsoft 平台上。 Http 服务器通常支持一些更简单的编程环境,通常是脚本,如 Microsoft 或基于 Servlet 的 ASP (.NET),包括 JSP 和许多其他情况下的 Java 或 PHP 和 CGI​​ 情况下的 Apache。

负载平衡、集群、会话故障转移、连接池等过去属于应用服务器领域的其他功能,现在也可以直接或通过某些第三方产品在 Web 服务器上使用。

最后,值得注意的是,像 Spring Framework 这样的“轻量级容器”进一步扭曲了画面,这些容器通常以更简单的方式补充应用程序服务器的目的,并且没有应用程序服务器基础架构。而且由于应用程序的分布方面正在从分布式组件转向服务范式和 SOA 架构,留给传统应用服务器的空间越来越少。

【讨论】:

您列出的任何应用程序服务器都可以用作 apache http 之类的 http Web 服务器吗?【参考方案7】:

简而言之,The web server 是通过 HTTP 请求为用户提供静态网页的服务器。The application server 是托管系统业务逻辑的服务器. 它通常同时托管长时间运行的/批处理进程和/或不适合人类消费的互操作服务(REST/JSON 服务、SOAP、RPC 等)。

【讨论】:

“主机的业务逻辑”一词是什么意思?它是如何执行的? 业务逻辑是否通过Web服务暴露给客户端? 它可以通过网络服务提供服务,也可以通过任何其他接口提供服务(TCP、MQ、共享上的平面文件(我不推荐最后一个))。 这可能会产生误导。应用程序服务器不托管任何东西。您的代码托管业务逻辑,而应用服务器充当该业务逻辑与用户请求的网页之间的粘合剂。 是谁把所有这些令人困惑的术语带到了各处,到处都是模棱两可的定义?【参考方案8】:

Web 服务器和应用程序服务器之间的主要区别在于,Web 服务器旨在为静态页面提供服务,例如HTML 和 CSS,而 Application Server 负责通过执行服务器端代码来生成动态内容,例如JSP、Servlet 或 EJB。

我应该使用哪一个? 一旦您了解了 Web 和应用程序服务器以及 Web 容器之间的区别,就很容易弄清楚何时使用它们。 如果您提供静态网页,则需要像 Apache HTTPD 这样的web server。如果您的 Java 应用程序只有 JSP 和 Servlet 来生成动态内容,那么您需要 web containers,例如 Tomcat 或 Jetty。同时,如果您有使用 EJB、分布式事务、消息传递和其他奇特功能的 Java EE 应用程序,那么您需要一个成熟的 application server,例如 JBoss、WebSphere 或 Oracle 的 WebLogic。

Web 容器是 Web Server 的一部分,Web Server 是 Application Server 的一部分。

Web Server 由 Web 容器组成,而 Application Server 由 Web 容器和 EJB 容器组成。

【讨论】:

“Web Server 由 web 容器组成”:根据youtu.be/ATObcDPLa40 这个视频,是假的【参考方案9】:

Web 服务器专门处理 HTTP/HTTPS 请求。它使用 HTTP/HTTPS 协议向网络提供内容。

应用服务器通过任意数量的协议(可能包括 HTTP)为应用程序提供业务逻辑。应用程序可以像调用对象的方法一样使用这个逻辑。在大多数情况下,服务器通过组件 API 公开此业务逻辑,例如 Java EE(Java 平台,企业版)应用服务器上的 EJB(企业 JavaBean)组件模型。 重点是Web服务器通过http协议暴露一切,而应用服务器不限于此。 因此,应用服务器提供的服务比 Web 服务器多得多,后者通常包括:

A(专有或非专有)API 负载平衡、故障转移... 对象生命周期管理 状态管理(会话) 资源管理(例如数据库的连接池)

大多数应用服务器都将 Web Server 作为其不可分割的一部分,这意味着 App Server 可以做任何 Web Server 能够做的事情。此外,App Server 具有支持应用程序级服务的组件和功能,例如连接池、对象池、事务支持、消息传递服务等。

应用程序服务器可以(但不总是)在 Web 服务器上运行以执行程序逻辑,然后由 Web 服务器传送其结果。这是 Web 服务器/应用程序服务器场景的一个示例。 Microsoft 世界中的一个很好的例子是 Internet Information Server / SharePoint Server 关系。 IIS 是一个网络服务器; SharePoint 是一个应用程序服务器。 SharePoint 位于 IIS 的“顶部”,执行特定的逻辑,并通过 IIS 提供结果。 例如,在 Java 世界中,Apache 和 Tomcat 也有类似的情况。

由于 Web 服务器非常适合用于静态内容,而应用服务器非常适合用于动态内容,因此大多数生产环境都将 Web 服务器用作应用服务器的反向代理。这意味着在为页面请求提供服务时,图像/静态 html 等静态内容由解释请求的 Web 服务器提供。使用某种过滤技术(主要是请求资源的扩展)Web 服务器识别动态内容请求并透明地转发到应用服务器。

此类配置的示例是 Apache HTTP Server 和 BEA WebLogic Server。 Apache HTTP 服务器是 Web 服务器,BEA WebLogic 是应用程序服务器。 在某些情况下,服务器是紧密集成的,例如 IIS 和 .NET Runtime。 IIS 是网络服务器。当配备 .NET 运行时环境时,IIS 能够提供应用程序服务


Web Server                               Programming Environment
Apache                                   PHP, CGI
IIS (Internet Information Server)        ASP (.NET)
Tomcat                                   Servlet
Jetty                                    Servlet

Application Server                       Programming Environment
WAS (IBM's WebSphere Application Server) EJB
WebLogic Application Server (Oracle's)   EJB
JBoss AS                                 EJB
MTS                                      COM+

【讨论】:

提到了一些其他的东西,但是很多对我来说似乎是抄袭。就像最后的列表一样,好像是从丹的帖子中复制的。并且“...反向代理到应用服务器...”最后还使用 HTTP Server 和 BEA WebLogic Server 作为示例,与 Rutesh Makhijani 所写的内容几乎相同。【参考方案10】:

这两者之间的界限越来越细了。

应用服务器向客户端公开业务逻辑。这意味着应用程序服务器由一组方法组成(但不仅限于,甚至可以是允许许多人在其上运行软件的联网计算机)来执行业务逻辑。所以它只会输出想要的结果,而不是 HTML 内容。 (类似于方法调用)。所以它不是严格基于 HTTP 的。

但网络服务器将 HTML 内容传递给网络浏览器(严格基于 HTTP)。 Web 服务器只能处理静态 Web 资源,但是服务器端脚本的出现允许 Web 服务器也可以处理动态内容。 Web 服务器接收请求并将其定向到相关脚本(PHP、JSP、CGI 脚本等)以创建要发送到客户端的 HTML 内容。收到内容后,Web 服务器会将 HTML 页面发送给客户端。

但是,现在这两个服务器都一起使用。 Web 服务器接受请求,然后调用脚本来创建 HTML 内容。然后,该脚本将再次调用应用服务器 LOGIC(例如 Retrieve transaction details)来填充 HTML 内容。

所以这两个服务器都被有效地使用了。

因此.... 我们可以有把握地说,如今,在大多数情况下,Web 服务器被用作应用程序服务器的子集。但从戏剧上看,情况并非如此。

我已经阅读了很多关于这个主题的文章,发现this的文章非常好用。

【讨论】:

戏剧性 -> 理论上?【参考方案11】:

在 Java 术语中,还有一个:web 容器(或更严格地说,servlet 容器)。例如,它位于 Web 服务器和应用程序服务器之间。

Java 术语中的 Web 容器是一种应用服务器,它基本上实现了 Java EE 的 JSP/Servlet 部分,并且缺少 Java EE 的几个核心部分,例如 EJB 支持。一个例子是 Apache Tomcat。

【讨论】:

【参考方案12】:

应用程序服务器的设计和部署通常是为了促进运行时间更长的进程,这些进程也将占用更多资源。

Web 服务器通常用于资源密集型的短时间突发。这主要是为了方便提供基于网络的流量。

【讨论】:

【参考方案13】:

Web 服务器运行 HTTP 协议来提供网页。应用程序服务器可以(但不总是)在 Web 服务器上运行以执行程序逻辑,然后由 Web 服务器交付其结果。这是 Web 服务器/应用程序服务器方案的一个示例。

Microsoft 世界中的一个很好的例子是 Internet Information Server / SharePoint Server 的关系。 IIS 是一个网络服务器; SharePoint 是一个应用程序服务器。 SharePoint 位于 IIS 之上,执行特定逻辑,并通过 IIS 提供结果。

在 Java 世界中,Apache 和 Tomcat 也有类似的场景。

【讨论】:

【参考方案14】:

应用服务器是一台机器(实际上是在某台机器上运行的可执行进程),它“监听”(在任何通道上,使用任何协议),接收来自客户端对其提供的任何服务的请求,然后根据那些请求。 (可能会或可能不会涉及对客户的回应)

Web 服务器是运行在机器上的进程,它使用“互联网”协议之一(http、https、ftp 等)专门“侦听”TCP/IP 通道,并根据这些协议执行任何操作传入请求...通常,(如最初定义的那样),它获取/生成并返回一个 html 网页给客户端,或者从服务器上的静态 html 文件中获取,或者根据传入客户端请求中的参数动态构建。

【讨论】:

你能举出浴柜的例子吗? 你能提供这两个例子吗?谢谢。【参考方案15】:

首先,Web 服务器通过 HTTP 协议提供 Web 内容(HTML 和静态内容)。另一方面,应用程序服务器是一个容器,您可以在其上构建业务逻辑和流程,并通过各种协议(包括 n 层架构中的 HTTP)向客户端应用程序公开业务逻辑和流程。

因此,应用服务器提供的服务比网络服务器多得多,通常包括:

A(专有或非专有)API 对象生命周期管理, 状态管理(会话), 资源管理(例如到数据库的连接池), 负载平衡、故障转移...

AFAIK,ATG Dynamo 是 90 年代后期最早的应用服务器之一(根据上面的定义)。在 2000 年初,它是一些专有应用服务器的统治,如 ColdFusion (CFML AS)、BroadVision (服务器端 javascript AS) 等。但没有一个真正在 Java 应用服务器时代幸存下来。

【讨论】:

【参考方案16】:

基本理解:

在客户端服务器架构中

服务器 :> 为请求提供服务。

Client :> 哪个消费服务。

Web 服务器和应用程序服务器都是软件应用程序,它们充当其客户端的服务器。

他们的名字是根据他们的使用地点来命名的。

Web server :> serve web content
           :> Like Html components
           :> Like Javascript components
           :> Other web components like images,resource files
           :> Supports mainly web protocols like http,https.
           :> Supports web Request & Response formats.

用法——

      we require low processing rates,

      regular processing practices involves.

例如:所有平面服务器通常都是现成的,仅服务于网络 基于内容。

Application server :> Serve application content/component data(Business data).
                   :> These are special kind which are custom written 
                      designed/engineered for specific
                      purpose.some times fully unique in 
                      their way and stands out of the crowd. 

                   :> As these serves different types of data/response contents
                   :> So we can utilize these services for mobile client,web 
                      clients,intranet clients. 
                   :> Usually application servers are services offered on different 
                      protocols.    
                   :> Supports different Request& Response formats.

用法——

      we require multi point processing,

      specialized processing techniques involves like for AI.

例如:Google 地图服务器、Google 搜索服务器、Google 文档服务器、Microsoft 365 服务器,用于 AI 的 Microsoft 计算机视觉服务器。

我们可以将它们假设为 4 层/n 层架构中的层/层次结构。

 So they can provide 
                    load balancing,
                    multiple security levels,
                    multiple active points,
                    even they can provide different request processing environments.

请点击此链接了解标准架构类比:

https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ee658120(v%3dpandp.10)

【讨论】:

【参考方案17】:

最大的区别是 Web 服务器处理 HTTP 请求,而应用程序服务器将在任意数量的协议上执行业务逻辑。

【讨论】:

【参考方案18】:

实际上 Apache 是一个 Web 服务器,而 Tomcat 是一个应用程序服务器。当 HTTP 请求到达 Web 服务器时。然后静态内容通过网络服务器发送回浏览器。是否有逻辑要做,然后将该请求发送到应用程序服务器。处理完逻辑后,将响应发送到 Web 服务器并发送到客户端。

【讨论】:

【参考方案19】:

以上所有内容都只是使非常简单的事情过于复杂。应用程序服务器包含一个 Web 服务器,一个应用程序服务器比标准 Web 服务器具有更多的添加/扩展。如果以 TomEE 为例:

CDI - Apache OpenWebBeans
EJB - Apache OpenEJB
JPA - Apache OpenJPA
JSF - Apache MyFaces
JSP - Apache Tomcat
JSTL - Apache Tomcat
JTA - Apache Geronimo Transaction
Servlet - Apache Tomcat
Javamail - Apache Geronimo JavaMail
Bean Validation - Apache BVal

您将看到 Tomcat(Web 容器/服务器)只是应用服务器库中的另一个工具。如果您愿意,您也可以在 Web 服务器中获取 JPA 和其他技术,但应用程序服务器只是为了您的方便而打包了所有这些东西。要完全归类为应用服务器,您基本上需要遵守某个标准规定的工具列表。

【讨论】:

【参考方案20】:

不一定有明确的分界线。如今,许多程序结合了两者的元素 - 服务 http 请求(Web 服务器)和处理业务逻辑(应用服务器)

【讨论】:

【参考方案21】:

来自https://en.wikipedia.org/wiki/Web_server

网络服务器是一种通过 HTTP 处理请求的计算机系统,HTTP 是用于在万维网上分发信息的基本网络协议。该术语可以指整个系统,或专门指接受和监督 HTTP 请求的软件。

来自https://en.wikipedia.org/wiki/Application_server#Application_Server_definition

应用程序服务器运行在 Web 服务器之后(例如 Apache 或 Microsoft Internet Information Services (IIS))并且(几乎总是)在 SQL 数据库(例如 PostgreSQL、mysql 或 Oracle)之前运行.

Web 应用程序是在应用程序服务器上运行并以应用程序服务器支持的语言编写并调用应用程序服务器提供的运行时库和组件的计算机代码>.

【讨论】:

【参考方案22】:

应用服务器和网络服务器都用于托管网络应用程序。 Web Server 处理 Web 容器,而 Application Server 处理 Web 容器以及 Microsoft dot Net 的 EJB (Enterprise JavaBean) 容器或 COM+ 容器。

Web 服务器设计用于提供 HTTP 静态内容,如 HTML、图像等,动态内容有插件支持 Perl、PHP、ASP、JSP 等脚本语言,并且仅限于 HTTP 协议。下面的服务器可以生成动态的 HTTP 内容。

Web 服务器的编程环境:

IIS : ASP (.NET)

Apache Tomcat:Servlet

码头:Servlet

Apache:Php、CGI

Application Server 可以做任何 Web Server 能够做的事情,并使用任何协议进行侦听,并且 App Server 具有支持应用程序级服务的组件和功能,例如连接池、对象池、事务支持、消息传递服务等。

应用服务器的编程环境:

MTS:COM+

原来是:EJB

JBoss:EJB

WebLogic 应用服务器:EJB

【讨论】:

【参考方案23】: web 服务器:对于每个 URL,它都会返回一个文件。这就是它所做的一切。该文件是静态内容,这意味着它存储在服务器中的某个位置,在您提出请求之前。最流行的 Web 服务器是 apache httpnginx。 应用服务器:对于每个 URL,它运行一些代码,用某种语言编写,生成响应并返回它。响应不是预先存在的,它是为您的特定请求生成的,即动态内容。每种语言的应用程序服务器都不同。一些流行的例子是 tomcat/jetty 用于 java,uwsgi/gunicorn 用于 python。

几乎您访问的每个页面都使用两者。静态内容(例如,图像、视频)由 Web 服务器提供,其余的(您与其他用户不同的部分)由应用服务器生成。

【讨论】:

Apache 加上 mod_cgi、mod_perl、mod_php 等是应用服务器,那么呢? .NET Core 的 Kestrel 是什么,它是 .NET 特有的,在进程中运行并为应用程序提供 HTTP 服务器功能?【参考方案24】:

虽然两者之间可能存在重叠(某些 Web 服务器甚至可能用作应用程序服务器),但恕我直言,最大的区别在于处理模型和会话管理:

在Web服务器处理模型中,重点是处理请求; “会话”的概念几乎是虚拟的。也就是说,“会话”是通过在客户端和服务器之间传输状态表示(因此是 REST)和/或将其序列化到外部持久存储(SQL Server、Memcached 等)来模拟的。

在应用程序服务器中,会话通常更加明确,并且通常在“会话”的整个持续时间内以对象的形式存在于应用程序服务器的内存中。

【讨论】:

【参考方案25】:

IMO,主要是关于分离关注点。

从纯粹的技术角度来看,您可以在单个 Web 服务器中完成所有操作(Web 内容 + 业务逻辑)。如果您这样做,那么信息将嵌入到请求的 HTML 内容中。会有什么影响?

例如,假设您有 2 个不同的应用程序,它们在浏览器上呈现完全不同的 HTML 内容。如果您将业务逻辑分离到一个应用程序服务器中,那么您可以提供不同的 Web 服务器通过脚本在应用程序服务器中查找相同的数据。但是,如果您不将逻辑分离并将其保留在 Web 服务器中,那么无论何时更改您的业务模型,您最终都会在您拥有的每一个 Web 服务器中更改它,这将花费更多时间,不太可靠并且容易出错。

【讨论】:

【参考方案26】:

IBM makes a really nice comparison between the two:

按照严格的定义,Web 服务器是应用服务器的公共子集。

Web 服务器提供静态 Web 内容(例如 HTML 页面、文件、图像、视频),主要是为了响应来自 Web 浏览器的超文本传输​​协议 (HTTP) 请求。

应用程序服务器通常也可以提供 Web 内容,但它的主要工作是实现最终用户客户端和服务器端应用程序代码之间的交互——该代码代表通常称为业务逻辑的代码——生成和交付动态内容,例如交易结果、决策支持或实时分析。应用程序服务器的客户端可以是应用程序自己的最终用户 UI、Web 浏览器或移动应用程序,并且客户端-服务器交互可以通过任意数量的通信协议进行。

然而,在实践中,Web 服务器和应用程序服务器之间的界限变得越来越模糊,尤其是随着 Web 浏览器已成为首选的应用程序客户端,以及用户对 Web 应用程序和 Web 应用程序性能的期望不断提高。

大多数 Web 服务器都支持脚本语言(例如 ASP、JSP、PHP、Perl)的插件,这些插件使 Web 服务器能够根据服务器端逻辑生成动态内容。越来越多的应用服务器不仅包含 Web 服务器功能,而且使用 HTTP 作为其主要协议并支持其他协议(例如 CGI 和 CGI​​ 变体)与 Web 服务器交互。它们还允许 Web 应用程序利用反向代理、集群、冗余和load balancing 等服务——这些服务可以提高性能和可靠性,并允许开发人员减少对基础设施的关注,而更多地关注编码。

为了让事情更加混乱,许多 Web 服务器和一些应用程序服务器被称为或称自己为 Web 应用程序服务器

最重要的是,当今最流行的 Web 服务器和应用程序服务器是两者的混合体。您今天使用的大多数日益丰富的应用程序都结合了静态 Web 内容和动态应用程序内容,通过 Web 服务器和应用程序服务器技术的组合交付。

【讨论】:

【参考方案27】:

这取决于具体的架构。一些应用服务器可能会原生使用 Web 协议(XML/RPC/SOAP over HTTP),因此技术上的差异很小。通常,Web 服务器是面向用户的,通过 HTTP/HTTPS 提供各种内容,而应用程序服务器不是面向用户的,可能使用非标准或不可路由的协议。当然,对于 RIA/AJAX,差异可能会更加模糊,仅向提供特定远程访问服务的客户端提供非 HTML 内容 (JSON/XML)。

【讨论】:

【参考方案28】:

从上述出色的 SO 传播者的帖子中得出我的结论,我得出的结论是,两者都是驻留在实际金属服务器(物理服务器)上的软件。两者携手合作,为最终用户提供服务。然后,根据设置,我们可以选择如何调用它,这意味着如何描述它取决于实际使用的设置。如果它们都驻留在同一个裸机(物理服务器)上,我们称它为 Web 和应用程序服务器……很简单!如果在不同的机器上,显然,我们手上有两个不同的裸机(物理服务器)。然后我们可以根据它们的功能来标记这些服务器:一个Web服务器和另一个应用程序服务器。

【讨论】:

以上是关于应用程序服务器和 Web 服务器有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Web 应用程序和客户端/服务器应用程序有啥区别?

微服务和 Web 服务有啥区别?

Web 服务器和游戏服务器有啥区别?

asp.net web 方法和 wcf 服务有啥区别?

用于用户身份验证的个人访问令牌和 json Web 令牌有啥区别?

请问Java ee与Javaweb 有啥区别