WebServer、应用程序Server、HttpServer差别

WEBserver、应用程序server、HTTPserver有何差别?IIS、Apache、Tomcat、Weblogic、WebSphere都各属于哪种server,这些问题困惑了非常久,今天最终梳理清楚了:

-Webserver的基本功能就是提供Web信息浏览服务。它仅仅需支持HTTP协议、HTML文档格式及URL。

与client的网络浏览器配合。由于Webserver主要支持的协议就是HTTP,所以通常情况下HTTPserver和WEBserver是相等的(有没有支持除HTTP之外的协议的webserver,作者没有考证过),说的是一回事。

  应用程序server(简称应用server),我们先看一下微软对它的定义:”我们把应用程序server定义为“作为server运行共享业务应用程序的底层的系统软件”。 就像文件server为非常多用户提供文件一样,应用程序server让多个用户能够同一时候使用应用程序(一般是客户创建的应用程序)”

  通俗的讲,Webserver传送(serves)页面使浏览器能够浏览。然而应用程序server提供的是client应用程序能够调用(call)的方法(methods)。确切一点。你能够说:Webserver专门处理HTTP请求(request),可是应用程序server是通过非常多协议来为应用程序提供(serves)商业逻辑 (business logic)。

 

  以Java EE为例,Webserver主要是处理静态页面处理和作为 Servlet容器,解释和运行servlet/JSP,而应用server是运行业务逻辑的,主要是EJB、 JNDI和JMX API等J2EE API方面的,还包括事务处理、数据库连接等功能,所以在企业级应用中。应用server提供的功能比WEBserver强大的多。

 

  以这样的定义,IIS、Apache、Tomcat都能够属于Webserver,Weblogic、WebSphere都属于应用server。

 

  Apache:在Webserver中,Apache是纯粹的Webserver,常常与Tomcat配对使用。它对HTML页面具有强大的解释能力。可是不能解释嵌入页面内的server端脚本代码(JSP/Servlet)。

  Tomcat:早期的Tomcat是一个嵌入Apache内的JSP/Servlet解释引擎Apache+Tomcat就相当于IIS+ASP。后来的Tomcat已不再嵌入Apache内。Tomcat进程独立于Apache进程运行。 并且,Tomcat已经是一个独立的Servlet和JSP容器,业务逻辑层代码和界面交互层代码能够分离了。

因此,有人把Tomcat叫做轻量级应用server。

 

  IIS:微软早期的IIS。就是一个纯粹的Webserver。

后来,它嵌入了ASP引擎。能够解释VBScript和JScriptserver端代码了。这时,它就能够兼作应用server。

当然。它与J2EE应用server根本无法相比,可是,从功能上说,从原理上说,它勉强能够称之为应用server。确切地说,它是兼有一点应用server功能的Webserver。

  综上:Apache是纯粹的webserver。而Tomcat和IIS由于具有了解释运行server端代码的能力,能够称作为轻量级应用server或带有server功能的Webserver。Weblogic、WebSphere由于能提供强大的J2EE功能。毫无疑问是绝对的应用server。对于处于中间位置的Tomcat,它能够配合纯WebserverApache一起使用,也能够作为应用server的辅助与应用server一起部署:

  • 一、Tomcat与应用server

      到眼下为止,Tomcat一直被觉得是Servlet/JSP API的运行器,也就所谓的Servlet容器。然而,Tomcat并不仅仅如此,它还提供了JNDI和JMX API的实现机制。尽管如此,Tomcat仍然还不能算是应用server,由于它不提供大多数J2EE API的支持。

      非常有意思的是,眼下很多的应用server通常把Tomcat作为它们Servlet和JSP API的容器。由于Tomcat同意开发人员仅仅需通过增加一行致谢,就能够把Tomcat嵌入到它们的应用中。遗憾的是。很多商业应用server并没有遵守此规则。

     

      对于开发人员来说,假设是为了寻找利用Servlet、JSP、JNDI和JMX技术来生成Java Web应用的话。选择Tomcat是一个优秀的解决方式;可是为了寻找支持其他的J2EE API,那么寻找一个应用server或者把Tomcat作为应用server的辅助。将是一个不错的解决方式;第三种方式是找到独立的J2EE API实现,然后把它们跟Tomcat结合起来使用。尽管整合会带来相关的问题,可是这样的方式是最为有效的。

     

  • 二、Tomcat与Webserver

      Tomcat是提供一个支持Servlet和JSP运行的容器。Servlet和JSP能依据实时须要。产生动态网页内容。而对于Webserver来说。 Apache仅仅支持静态网页,对于支持动态网页就会显得无能为力;Tomcat则既能为动态网页服务。同一时候也能为静态网页提供支持。尽管它没有通常的Webserver快、功能也不如Webserver丰富,可是Tomcat逐渐为支持静态内容不断扩充。大多数的Webserver都是用底层语言编写如C。利用了对应平台的特征,因此用纯Java编写的Tomcat运行速度不可能与它们相提并论。

      一般来说,大的站点都是将Tomcat与Apache的结合,Apache负责接受全部来自client的HTTP请求,然后将Servlets和JSP的请求转发给Tomcat来处理。Tomcat完毕处理后,将响应传回给Apache。最后Apache将响应返回给client。

     

      并且为了提高性能。能够一台apache连接多台tomcat实现负载平衡。

     

      关于WEBserver、应用程序server的更具体差别能够参考以下这篇文章:

      通俗的讲,Webserver传送(serves)页面使浏览器能够浏览,然而应用程序server提供的是client应用程序能够调用(call)的方法(methods)。

    确切一点,你能够说:Webserver专门处理HTTP请求(request),可是应用程序server是通过非常多协议来为应用程序提供(serves)商业逻辑 (business logic)。

      以下让我们来细细道来:

      Webserver(Web Server)

      Webserver能够解析(handles)HTTP协议。当Webserver接收到一个HTTP请求(request),会返回一个HTTP响应 (response),比如送回一个HTML页面。为了处理一个请求(request),Webserver能够响应(response)一个静态页面或图片,进行页面跳转(redirect)。或者把动态响应(dynamic response)的产生托付(delegate)给一些其他的程序比如CGI脚本。JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,server端(server-side)JavaScript。或者一些其他的server端(server-side)技术。

    不管它们(译者注:脚本)的目的怎样,这些server端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器能够浏览。

     

      要知道。Webserver的代理模型(delegation model)非常easy。当一个请求(request)被送到Webserver里来时,它仅仅单纯的把请求(request)传递给能够非常好的处理请求 (request)的程序(译者注:server端脚本)。Webserver仅仅提供一个能够运行server端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。server端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

     

      尽管Webserver不支持事务处理或数据库连接池。但它能够配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability)。比如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)常常被误觉得仅仅是应用程序server专有的特征。

      应用程序server(The Application Server)

      依据我们的定义。作为应用程序server。它通过各种协议。能够包括HTTP。把商业逻辑暴露给(expose)client应用程序。

    Webserver主要是处理向浏览器发送HTML以供浏览,而应用程序server提供访问商业逻辑的途径以供client应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法 (或过程语言中的一个函数)一样。

      应用程序server的client(包括有图形用户界面(GUI)的)可能会运行在一台PC、一个Webserver或者甚至是其他的应用程序server上。在应用程序server与其client之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。

    相反,这样的信息就是程序逻辑(program logic)。正是由于这样的逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以client才干够随心所欲的使用这样的被暴露的商业逻辑。

      在大多数情形下,应用程序server是通过组件 (component) 的应用程序接口(API)把商业逻辑暴露(expose)(给client应用程序)的,比如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序server的EJB(Enterprise JavaBean)组件模型。此外,应用程序server能够管理自己的资源。比如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing)。资源池(resource pooling),和消息(messaging)。就象Webserver一样,应用程序server配置了多种可扩展(scalability)和容错(fault tolerance)技术。

一个样例

  比如。设想一个在线商店(站点)提供实时定价(real-time pricing)和有效性(availability)信息。

这个站点(site)非常可能会提供一个表单(form)让你来选择产品。当你提交查询 (query)后,站点会进行查找(lookup)并把结果内嵌在HTML页面中返回。站点能够有非常多种方式来实现这样的功能。我要介绍一个不使用应用程序server 的情景和一个使用应用程序server的情景。观察一下这两中情景的不同会有助于你了解应用程序server的功能。

 

情景1:不带应用程序server的Webserver

  在此种情景下,一个Webserver独立提供在线商店的功能。

Webserver获得你的请求(request),然后发送给server端(server- side)能够处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件。如properties和XML文件等)中查找定价信息。一旦找到,server端(server-side)程序把结果信息表示成(formulate)HTML形式。最后Webserver把会它发送到你的Web浏览器。

 

简而言之,Webserver仅仅是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

 

情景2:带应用程序server的Webserver

  情景2和情景1相同的是Webserver还是把响应(response)的产生托付(delegates)给脚本(译者注:server端 (server-side)程序)。然而,你能够把查找定价的商业逻辑(business logic)放到应用程序server上。

由于这样的变化,此脚本仅仅是简单的调用应用程序server的查找服务(lookup service),而不是已经知道怎样查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应(response)时就能够使用该服务的返回结果了。

  在此情景中。应用程序server提供(serves)了用于查询产品的定价信息的商业逻辑。(server的)这样的功能(functionality)没有指出有关显示和client怎样使用此信息的细节。相反client和应用程序server仅仅是来回传送数据。当有client调用应用程序server的查找服务(lookup service)时,此服务仅仅是简单的查找并返回结果给client。

 

  通过从响应产生(response-generating)HTML的代码中分离出来。在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的client。比如收款机。也能够调用相同的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的由于信息内嵌在 HTML页中了。

  总而言之,在情景2的模型中,在Webserver通过回应HTML页面来处理HTTP请求(request),而应用程序server则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

警告(Caveats)

  如今,XML Web Services已经使应用程序server和Webserver的界线混淆了。

通过传送一个XML有效载荷(payload)给server,Webserver如今能够处理数据和响应(response)的能力与曾经的应用程序server相同多了。

  另外。如今大多数应用程序server也包括了Webserver。这就意味着能够把Webserver当作是应用程序server的一个子集(subset)。

尽管应用程序server包括了Webserver的功能,可是开发人员非常少把应用程序server部署(deploy)成这样的功能(capacity)(译者注:这样的功能是指既有应用程序server的功能又有Webserver的功能)。

相反,假设须要,他们一般会把Webserver独立配置,和应用程序server一前一后。这样的功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序server了),分开配置(专门的Webserver。集群(clustering)等等),并且给最佳产品的选取留有余地。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章