Tomcat 与 Nginx,Apache的区别
Apache指的应该是Apache软件基金会下的一个项目—— Apache HTTP Server Project
Nginx同样也是一款开源的HTTP服务器软件(当然它也可以作为邮件代理服务器、通用的TCP代理服务器)。
Tomcat是Apache基金会下的另外一个项目,与Apache HTTP Server相比,Tomcat能够动态的生成资源并返回到客户端。Apache HTTP Server和Nginx都能够将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的——也就是说无论何时、任何人访问它得到的内容都是完全相同的,这样的资源我们称之为静态资源。
在严格意义上来说,Apache/Nginx 应该叫做[HTTP Server];而 Tomcat 则是一个[Application Server],或者更准确的来说,是一个[Servlet/JSP]应用的容器(Go/Python 等其他语言开发的应用也无法直接运行在 Tomcat 上),
HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。通过 CGI 技术,也可以将处理过的内容通过 HTTP Server 分发,但是一个 HTTP Server 始终只是把服务器上的文件如实的通过 HTTP 协议传输给客户端。
而应用服务器,则是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。
为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后,执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。
Nginx
Nginx是由一位来自俄罗斯的程序员Igor Sysoe所编写的十分轻量级的HTTP服务器。nginx,它的发音为“engine X”。是一个高性能基于HTTP和反向代理的服务器,当只有静态资源的时候,就可以使用nginx来做服务器,现在很流行的动静分离(普遍情况下,是需要动态资源和静态资源分开,将静态资源部署在nginx上,当如果是静态资源的请求来时,就直接到nginx配置的静态资源目录下面获取资源;如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给后台应用去处理,从而实现动静分离)就能通过nginx来实现。
· 具备高性能反向代理服务并属于轻量级的web服务器
反向代理
简单说就是利用代理服务器来接受互联网上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给互联网上请求连接的客户端,此时的代理服务器对外表现就属于一个反向代理服务器。
· 良好的扩展性,可以通过模块方式来进行功能扩展
· 较为灵活的负载均衡策略
轮询(默认)算法:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,则自动剔除故障机器,使用户访问不受到影响,个人觉得这个是最好的方法,但也有成本就是消耗机器的成本!实际情况中也验证了这一点,移动段的token!
· 抗并发的能力很强
Apache
Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。
Tomcat
Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。
如果请求是静态网页则由Apache处理,并将结果返回;如果是动态请求,Apache会将解析工作转发给Tomcat处理,Tomcat处理后将结果通过Apache返回。这样可以达到分工合作,实现负载均衡,提高系统的性能。
虽然Tomcat也可以认为是HTTP服务器,但通常它仍然会和Nginx配合在一起使用:
- 动静态资源分离——运用Nginx的反向代理功能分发请求:所有动态资源的请求交给Tomcat,而静态资源的请求(例如图片、视频、CSS、JavaScript文件等)则直接由Nginx返回到浏览器,这样能大大减轻Tomcat的压力。
- 负载均衡,当业务压力增大时,可能一个Tomcat的实例不足以处理,那么这时可以启动多个Tomcat实例进行水平扩展,而Nginx的负载均衡功能可以把请求通过算法分发到各个不同的实例进行处理
Apache和Nginx的部分功能相比较
异步能力:apache中也有异步模块支持异步功能,不过是阻塞性异步,而nginx是非阻塞性异步。
抗并发:nginx因为软件体积小,消耗主机资源少,抗并发能力是apache的3倍以上。
重量等级:apache配置相对nginx复杂,自身不支持动态页面。
漏洞缺陷:apache相对nginx的bug会少很多。
Nginx 以轻量的优点在慢慢取带重量级的Apache ,现在已经是主流。
归类: 自动化运维及服务