一、服务器

  服务器,是提供计算服务的设备。在网络环境下,根据服务器提供的服务类型不同,分为文件服务器,数据库服务器,应用程序服务器,WEB服务器等。

 1.1 web服务器

    Web服务器是可以向发出请求的浏览器提供文档的程序。

      1、服务器是一种被动程序:只有当Internet上运行在其他计算机中的浏览器发出请求时,服务器才会响应。

      2、Internet上的服务器也称为Web服务器,是一台在Internet上具有独立IP地址的计算机,可以向Internet上的客户机提供WWW、Email和FTP等各种Internet服务。

    Web服务器的内容:

      1、应用层使用HTTP协议。 

      2、HTML文档格式。 

      3、浏览器统一资源定位器(URL)。

    1.1.1 常用web服务器

      最常用的Web服务器是Apache和Microsoft的Internet信息服务器(Internet Information Server,ⅡS)。这里简单介绍一下Apache。

      Apache是世界使用排名第一的web服务器软件。他可以运行在几乎所有广泛使用的计算机平台上(跨平台性、安全性)。它快速、可靠并且可通过简单地API扩充,将Perl/Python等解释器编译到服务器中。Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,现在是世界使用排名第一的Web服务器软件。

      Apache HTTP Server和Nginx都能够将某一个固定内容的文本文件的内容通过HTTP协议返回到客户端,我们将这样固定内容的资源(无论何时、任何人访问它得到的内容都是完全相同的资源)称之为静态资源。

      优点:

        1、相对于Tomcat来说,Apache处理静态文件速度快。

        2、apache的 rewrite 比nginx 的强大 。

        3、Apache性能稳定。

      缺点:

        1、属于老牌重量级web服务器(重量级主要是在软件包的大小上比较大,软件的耦合度大)。

        2、速度、性能不及其他轻量级web服务器,并且消费内存较高。

        3、使用传统的select模型,比较稳定的Prefork模式为多进程模式,需要经常派生子进程。所以消耗的cpu等服务器资源比较大。

        4、配置相对复杂,自身不支持动态页面,不适合高并发场景。

      轻量级和重量级服务器的理解:

        重量级:对于每知个请求会用一个进程去进行服务,进程非常占资源 ,当并发量大的时候,就道需要等额的进程,导致的是高内存占用和CPU占用 。

        轻量级:原理是当链接的状态发生改变的时候,呼叫事件分发器来处理链接变化;由于http请求大部分时间都是在等待,所以只需要一个进程就可容以同时处理大量链接。

 1.2 应用程序服务器

    应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。

    1.2.1 Tomcat服务器

      Tomcat 服务器是一个免费、开源的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于初学者来说,可以这样认为,当在一台机器上配置好Apache服务器,可利用它响应HTML页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

      当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。独立的Servlet容器是Tomcat的默认模式,但是它也具有处理HTML的能力,但他对于HTML的处理不如Apache服务器。

      Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:

        动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。

        负载均衡——当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理。

      优点:

        1、Tomcat是开源的Web服务器,经过长时间的发展,性能、稳定性等方面都非常好。

        2、Tomcat是开源免费、功能强大易用的

        3、与Apache HTTP Server相比,Tomcat能够动态的生成资源并返回到客户端。

      缺点:

        1、在静态页面处理能力上,Tomcat不如Apache。

   1.2.2  jetty

      Jetty 是一个开源的servlet容器,基于Java的web容器,为JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接。

      优点:

        1、Jetty可作为一个嵌入式服务器,即:如可以在应用中加入Jetty的JAR文件,应用便可以在代码中对外提供Web服务。

        2、相对于Tomcat而言,Jetty更轻量级

        3、Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如像一些 web 聊天应用非常适合用 Jetty 做服务器,像淘宝的 web 旺旺就是用 Jetty 作为 Servlet 引擎。

      缺点:

        1、在处理少数非常繁忙的连接上没有Tomcat强,也就是说连接的生命周期如果短的话,Tomcat 的总体性能更高

   1.2.3 Nginx

      Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

      Nginx有动态分离机制,静态请求直接就可以通过Nginx处理,动态请求才转发请求到后台交由Tomcat进行处理。

      优点:

        1、轻量级,高性能http和反向代理服务器。

        2、高并发连接达到2-4万个,内存、cpu等系统资源消耗低。Rewrite重写规则(根据域名,URL的不同将HTTP请求分到不同的后端服务器群组),内置的健康检查功能(Nginx Proxy 后端的某台web服务器宕机也不会影响前端访问),节省带宽(支持GZIP压缩,可以添加浏览器本地缓存的Header头)。

        3、比apache占用更少的内存及资源

        4、 Nginx 静态处理性能比 Apache 高 3倍以上 

        5、安装非常简单 , 配置文件非常简洁(还能够支持perl语法)

      缺点:

        1、nginx处理动态请求鸡肋般动态请求要apache去做nginx只适合静态和反向 

        2、rewrite频繁不如Apache

    1.2.4 Nginx与Apache比较

      nginx相对于apache的优点

        1、轻量级,同样起web 服务,比apache占用更少的内存及资源
        2、抗并发,nginx 处理请求是是异步的,多个连接(万级别)可以对应一个进程, 而apache是同步多进程模型,一个连接对应一个进程,在高并发下nginx 能保持低资源低消耗高性能。
        3、Nginx适合做前端服务器,负载性能很好,本身就是一个反向代理服务器 
          4、Nginx 静态处理性能比 Apache 高 3倍以上 ,耗费内存少
        5、安装简单 ,Nginx 配置简洁(还能够支持perl语法),Apache 复杂 
        6、高度模块化的设计,编写模块相对简单
        7、社区活跃,各种高性能模块出品迅速
      apache 相对于nginx 的优点:

        1、apache的 rewrite 比nginx 的强大 ;
        2、动态请求由apache去做,nginx只适合静态和反向;
        3、Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;
        4、Apache 的组件比 Nginx 多 ,基本涵盖所有应用;
        5、性能稳定,而nginx相对bug较多。

   1.2.5  Apache与Tomcat的比较

      相同点:

        1、两者都是Apache组织开发的
        2、两者都有HTTP服务的功能
        3、两者都是免费的
      不同点:

        1、  Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器。

        2、 Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页如(ASP,PHP,CGI,JSP)等动态网页的就不行。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。

          3、 Apache:侧重于HTTPServer ,Tomcat:侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;

        4、 Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。 实际使用中Apache与Tomcat常常是整合使用

        5、如果客户端请求的是静态页面,则只需要Apache服务器响应请求。  如果客户端请求动态页面,则是Tomcat服务器响应请求。 因为JSP是服务器端解释代码的,这样整合就可以减少Tomcat的服务开销。 

        可以理解Tomcat为Apache的一种扩展

   1.2.6  Tomcat与Jetty的比较

      相同点:

        1、两者都是一个轻量级的基于Java的web容器
        2、两者都是免费、开源的
      不同点:

        1、Jetty可作为一个嵌入式服务器,即:如可以在应用中加入Jetty的JAR文件,应用便可以在代码中对外提供Web服务。

        2、 相对于Tomcat而言,Jetty更轻量级

          3、Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如像一些 web 聊天应用非常适合用 Jetty 做服务器,像淘宝的 web 旺旺就是用 Jetty 作为 Servlet 引擎。

        4、在处理少数非常繁忙的连接上没有Tomcat强,也就是说连接的生命周期如果短的话,Tomcat 的总体性能更高