Tomcat是一款我们平时开发过程中最常用到的Servlet容器。本系列博客会记录Tomcat(以Tomcat 7为列)的整体架构、核心组件、IO线程模型、请求在Tomcat内部的流转过程以及一些Tomcat调优的相关知识点。力求能达到以下几个目的:
- 更加熟悉Tomcat的工作机制,工作中遇到Tomcat相关问题能够快速定位,从源头来解决;
- 对于一些高并发场景能够对Tomcat进行调优;
- 通过对Tomcat源码的分析,吸收一些Tomcat的设计的理念,应用到自己的软件开发过程中。
1. 什么是Tomcat
Tomcat是一款Apache下面的开源的Servlet容器,实现了对Servlet和JSP规范的支持。另外 Tomcat 本身内含了一个 HTTP 服务器,所以也可以被当作一个 Web 服务器来使用。但是Tomcat作为一个Web服务器,它对静态资源的处理能力要比Apache或者Nginx这类的Web服务器差很多,所以我们经常将Apache和Tomcat(或者是Nginx和Tomcat)组合使用,Apache来充当Web服务器处理静态资源的请求,Tomcat充当Servlet容器来处理动态请求。
Web服务器和应用服务器
Web服务器,是指一台在互联网上具有独立IP地址的高性能计算机,可以向互联网上的用户提供“WWW(万维网)、Email(电子邮件)和FTP(文件传输)”等各种互联网服务。根据Web服务器提供的服务类型的不同,Web服务器又可以分为Http服务器,Email服务器和FTP服务器等。
一般的Web服务器只提供页面浏览,文件下载和邮件等服务。如果要产生一些动态的响应,Web服务器一般不会自己处理,而是会委托给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets和ASP(Active Server Pages)等脚本。这些能处理动态响应的服务器就称为应用服务器。
2. 技术对比
作为一名Java开发人员,你也一定听说过或者使用过一些其他的服务器中间件软件,比如JBOSS、Weblogic、Websphere、Apache、Nginx、Jetty和Undertow。那么这些软件和tomcat有什么区别?各自的适用场景又是什么?下面来做下简单的介绍。
1. Weblogic和Websphere
这边可以将Weblogic和Websphere归为一类,他们都是收费软件,而且价格不菲。但是收费肯定有收费的原因,WebLogic 与 WebSphere 对业内多种标准有全面支持, 包括 EJB、 JSB、 JMS、 JDBC、XML 和 WML,使 Web 应用系统的实施更为简单,并且保护了投资,同 时也使基于标准的解决方案的开发更加简便。另外他们的安全性也非常高。WebLogic 和 WebSphere 的技术文档和相关服务也很到位,如果你的服务器哪一天 出问题了,只要你能出的起钱,他们的技术工程师立刻就能出现在你面前。
2. JBOSS
JBoss 是一个管理 EJB 的容器和服务器,支持 EJB 1.1、EJB 2.0 和 EJB3.0 的 规范。但 JBoss 核心服务不包括支持 servlet/JSP 的 WEB 容器,一般与 Tomcat 或 Jetty 绑定使用。JBOSS也是免费的。
为什么Weblogic、Websphere和JBOSS等服务器在我们平时开发中很少被用到?
经过上面的介绍我们发现Weblogic和Websphere有很多优点:对业界标准全方位的支持、安全性高、对并发的支持量大以及到位的技术支持。但是为什么我们在开发过程中很少使用呢?最重要的原因还是因为这些软件价格昂贵。现在开发过程中我们对EJB这种规范使用越来越少,而且软件开发人员的水平逐渐提升,硬件价格下降。我们发现Weblogic和Websphere给我们带来的优势我们完全可以通过其他途径获得,为什么还要花大价钱呢?另外非开源的资料也较少,这些原因加在一起导致Weblogic和Websphere在我们平时开发中几乎不会使用。当然如果你们公司是一个不缺钱的公司的话,完全可以使用。
至于JBoss我们发现它是通过集成Tomcat来获得Servlet容器功能的,而它本身的EJB功能也越来越式微,JBoss的使用量自然上不去。因为现在都只需要Servlet容器功能,为什么不直接使用Tomcat呢?
3. Jetty
Jetty也是一个Servlet引擎,和Tomcat相比,Jetty的架构设计更加简单。在性能上两者有各自的使用场景。从架构上来看 Tomcat 在处理少数非常繁忙的连接上更有优势,也就是说连接的生命周期如果短的话,Tomcat 的总体性能更高。而 Jetty 刚好相反,Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如像一些 web 聊天应用非常适合用 Jetty 做服务器,像淘宝的 web 旺旺就是用 Jetty 作为 Servlet 引擎。
4. Undertow
和Jetty类似,Undertow也是一个Servlet容器。
5. Apache
Apache是一款高性能的Web服务器,和Tomcat相比,Apache更加专注于提供高性能的Web服务,而Tomcat是最主要的还是被当做Servlet容器来使用的,虽然它也有Web服务的功能,但这不是Tomcat的主要功能也不是它擅长的功能。所以Apache和Tomcat能搭配成一个好的组合:Apache提供Web服务,处理静态资源,Tomcat作为Servlet容器处理动态请求。
6. Nginx
Nginx和Tomcat的关系和Apche和Tomcat的关系差不多。Nginx也是一个高性能的Web服务器,同时我们还经常拿Nginx当做反向代理服务器和负载均衡服务器。
3. Tomcat的优缺点
Tomcat开源,免费, 经过长时间的发展(先发优势),它已经广泛的被市场接受和认可,相对 Jetty 和 Undertow来说 Tomcat 还是更加稳定和成熟的,尤其在企业级应用方面,Tomcat 仍然是第一选择。
来源:oschina
链接:https://my.oschina.net/u/4338157/blog/4406175