关于webserver:应用服务器和Web服务器有什么区别?

What is the difference between application server and web server?

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


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

以下是Web服务器和应用程序服务器功能的一些关键区别:

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

这种配置的示例是ApacheTomcatHTTP服务器和Oracle(以前叫BEA)WebLogic服务器。ApacheTomcatHTTP服务器是Web服务器,OracleWebLogic是应用服务器。

在某些情况下,服务器是紧密集成的,如IIS和.NET运行时。IIS是Web服务器。当配备.NET运行时环境时,IIS能够提供应用程序服务。


这是一个详细的答案,其中包含一些场景,以清楚地了解差异、相似性以及两者如何协同工作。

应用服务器是一个术语,有时与Web服务器混合使用。虽然Web服务器主要处理HTTP协议,但应用服务器处理几个不同的协议,包括但不限于HTTP。

Web服务器的主要工作是显示站点内容,应用服务器负责逻辑、用户与显示内容之间的交互。应用服务器与Web服务器一起工作,其中一个显示,另一个交互。

在服务器及其客户机之间来回传输的信息不局限于简单的显示标记,而是二者之间的交互。

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

enter image description here

一个例子:

理解应用服务器与Web服务器一起工作的场景与没有应用服务器的场景之间的区别的最佳方法是通过在线商店。

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

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

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

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

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

希望这有帮助。


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

  • Web服务器:使用HTTP协议向Web提供内容。

  • 应用服务器:承载并公开业务逻辑和流程。

我认为主要的一点是,Web服务器通过HTTP协议公开所有内容,而应用服务器并不局限于此。

也就是说,在许多场景中,您会发现Web服务器正被用于创建应用服务器的前端,即,它公开了一组网页,允许用户与应用服务器中的业务规则进行交互。


正如Rutesh和JMServera所指出的,区别是模糊的。历史上,它们是不同的,但通过90年代,这两个先前不同的类别混合了功能并有效地合并了。在这一点上,最好设想一下"应用服务器"产品类别是"Web服务器"类别的严格超集。

一些历史。在Mosaic浏览器和超链接内容的早期,有了一种叫做"Web服务器"的东西,它通过HTTP提供网页内容和图像。大部分内容是静态的,HTTP1.0协议只是一种传送文件的方法。"Web服务器"类别迅速发展到包括CGI功能——有效地对每个Web请求启动一个进程以生成动态内容。HTTP也变得成熟,产品也变得更加复杂,具有缓存、安全和管理功能。随着技术的成熟,我们从KIVA和NETMODICAM中得到了特定于公司的Java服务器端技术,这些技术最终都融合到JSP中。我认为微软在1996年将ASP添加到了WindowsNT4.0中。静态Web服务器已经学习了一些新的技巧,因此对于许多场景来说,它是一个有效的"应用服务器"。

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

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

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

  • IBM的"应用服务器"WebSphere有自己的捆绑式Web服务器。
  • 另一个传统的应用服务器weblogic也一样。
  • Windows是微软的应用服务器(除了其文件和打印服务器、媒体服务器等之外),它捆绑了IIS。


网络服务器

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

应用服务器

假设我们有一个像下面这样的小应用程序(烧瓶中的片段)。

1
2
3
4
5
6
7
@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映射到代码库中的某个特定位置,那么我们假设显示了一些关于程序如何工作的逻辑。

重铸

Web服务器-提供存储在某个地方的文件(最常见的是.css,.html,.js)。常见的Web服务器有Apache、nginx甚至是python的simplehttpserver。

应用服务器-提供动态生成的文件。基本上,大多数Web服务器都有某种插件,甚至自带了这样做的功能。还有严格的应用服务器,如gunicorn(python)、unicorn(ruby)、uwsgi(python)等。

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


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

Web服务器->编程环境

IIS:ASP(.NET)

汤姆猫:servlet

码头:servlet

Apache:php、cgi

应用服务器->编程环境

MTS:com公司+

是:EJB

jboss:ejb

WebLogic应用服务器:EJB

关键的区别在于,应用服务器支持一些分布式组件技术,提供诸如远程调用和分布式事务之类的特性,如Java世界中的EJB或微软平台上的COM+。HTTP服务器通常支持一些更简单的编程环境,通常是脚本,如微软(ASP)或servlet——基于JSP(包括.NET),包括JSP和许多其他在Java或PHP和CGI情况下的Apache。

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

最后,值得注意的是,使用"轻量级容器"(如Spring框架)会进一步扭曲图片,这通常以更简单的方式补充应用服务器的用途,而不使用应用服务器基础结构。而且,由于应用程序中的分布方面正从分布式组件转向服务范式和SOA体系结构,传统应用程序服务器的空间越来越少。


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

应用服务器通过任何协议(可能包括HTTP)向应用程序提供业务逻辑。应用程序可以像调用对象上的方法一样使用这个逻辑。在大多数情况下,服务器通过组件API(如JavaEE(Java平台,Enterprise Edio)应用服务器上找到的EJB(企业JavaBean)组件模型)公开此业务逻辑。重点是Web服务器通过HTTP协议公开所有内容,而应用服务器不受此限制。因此,应用服务器提供的服务比Web服务器多得多,通常包括:

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

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

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

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

这种配置的例子是ApacheHTTP服务器和BEAWebLogic服务器。ApacheHTTP服务器是Web服务器,BEAWebLogic是应用服务器。在某些情况下,服务器是紧密集成的,如IIS和.NET运行时。IIS是Web服务器。当配备.NET运行时环境时,IIS能够提供应用程序服务

1
2
3
4
5
6
7
8
9
10
11
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+

简而言之,Web服务器是通过HTTP向用户提供Web页面的服务器。应用服务器是承载系统业务逻辑的服务器。它通常同时承载长时间运行的/批处理进程和/或互操作服务(REST/JSON服务、SOAP、RPC等)。


Web服务器和应用服务器之间的主要区别在于,Web服务器用于服务静态页面(如HTML和CSS),而应用服务器负责通过执行服务器端代码(如JSP、Servlet或EJB)生成动态内容。

我应该用哪一个?一旦您知道了Web和应用服务器以及Web容器之间的区别,就很容易知道何时使用它们。如果您提供的是静态网页,那么您需要像ApacheHTTPD那样的web server。如果你有JSP和JavaServlet的Java应用程序来生成动态内容,那么你需要像OTCAT或JETTY一样的EDOCX1 1。同时,如果使用JavaEE应用程序使用EJB、分布式事务、消息传递和其他花哨的功能,那么就需要一个完整的EDCOX1 2版,如JBOSS、WebSphere或Oracle的WebLogic。

Web容器是Web服务器的一部分,Web服务器是应用服务器的一部分。

Application Server

Web服务器由Web容器组成,而应用服务器由Web容器和EJB容器组成。


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

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

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


在Java术语中还有一个:Web容器(或者更严格地说,servlet容器)。比如说,它介于Web服务器和应用服务器之间。Java术语中的Web容器是一个应用服务器,它基本上只实现JavaEE的JSP/servlet部分,而缺少JavaEE的几个核心部分,例如EJB支持。Apache Tomcat就是一个例子。


应用服务器的设计和部署通常是为了方便运行时间更长的进程,而运行时间更长的进程也会占用更多的资源。

Web服务器通常用于资源不密集的短突发事件。这主要是为了方便提供基于Web的流量。


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

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

  • A(专有或非专有)API
  • 对象生命周期管理,
  • 国家管理(会议)
  • 资源管理(如数据库连接池)
  • 负载平衡,故障转移…

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


这两者之间的边界越来越薄。

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

但是,Web服务器将HTML内容传递给Web浏览器(严格基于HTTP)。Web服务器只能处理静态Web资源,但是服务器端脚本的出现也帮助Web服务器处理动态内容。Web服务器接收请求并将其定向到脚本(PHP、JSP、CGI脚本等)以创建要发送到客户机的HTML内容。然后Web服务器知道如何将它们发送回客户机。因为这是网络服务器真正知道的。

尽管如此,现在开发人员同时使用这两种方法。Web服务器接受请求,然后调用脚本来创建HTML,但脚本将再次调用应用程序服务器逻辑(例如检索事务详细信息)来填充HTML内容。

因此,在这种情况下,两个服务器都得到了有效的使用。

因此…我们可以相当安全地说,在当今大多数情况下,Web服务器被用作应用服务器的一个子集。但在戏剧上,情况并非如此。

我读了很多关于这个主题的文章,发现这篇文章非常方便。


以上所有这些都只是让一些非常简单的事情变得过于复杂而已。一个应用服务器包含一个Web服务器,一个应用服务器只是比标准的Web服务器有更多的添加/扩展。如果你以我为例:

1
2
3
4
5
6
7
8
9
10
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和其他技术,但是应用程序服务器只是为了方便您打包所有这些东西。要完全归类为应用服务器,您基本上需要遵守一些标准中列出的工具列表。


应用服务器是一台机器(实际上是在某台机器上运行的可执行进程),它"监听"(在任何通道上,使用任何协议),从客户机请求它提供的任何服务,然后根据这些请求执行某些操作。(可能涉及或可能不涉及对客户的回应)

Web服务器是在一台计算机上运行的进程,该计算机使用"Internet"协议(HTTP、HTTPS、FTP等)专门"侦听"TCP/IP通道,并根据这些传入的请求执行任何操作…通常,(如最初定义的那样),它从服务器上的静态HTML文件中获取/生成并将HTML网页返回给客户机,或者根据传入客户机请求中的参数动态构造。


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


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


应用服务器和Web服务器都用于承载Web应用程序。Web服务器处理Web容器,而应用服务器处理Web容器,以及EJB(EnterpriseJavaBean)容器或Microsoft DOT NET的COM+容器。

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

Web服务器的编程环境:

IIS:ASP(.NET)

阿帕奇Tomcat:servlet

Jetty:servlet

Apache:php、cgi

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

应用服务器的编程环境:

MTS:COM+

是:EJB

JBASE: EJB

WebLogic应用服务器:EJB


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


来自https://en.wikipedia.org/wiki/web_服务器

Web服务器是通过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应用程序是运行在应用程序服务器上的计算机代码,用应用程序服务器支持的语言编写,并调用应用程序服务器提供的运行库和组件。


虽然这两个服务器之间可能存在重叠(有些Web服务器甚至可以用作应用程序服务器),但IMHO在处理模型和会话管理方面的最大区别在于:

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

在应用服务器中,会话通常更为明确,并且在整个"会话"期间,会话形式通常是一个驻留在应用服务器内存中的对象。


这取决于具体的体系结构。一些应用程序服务器可能本机使用Web协议(XML/RPC/SOAP over HTTP),因此技术上几乎没有区别。通常,Web服务器面向用户,通过HTTP/HTTPS提供各种内容,而应用服务器不面向用户,可能使用非标准或非可路由协议。当然,使用RIA/Ajax,差异可能会进一步模糊,只为提供特定远程访问服务的客户机提供非HTML内容(JSON/XML)。


在我看来,这主要是为了分散关注。

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

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