【Java网络编程与IO流】Apache Tomcat和Nginx的区别是什么?

本文介绍了Apache、Tomcat和Nginx的区别及结合应用。先阐述线程、阻塞非阻塞、同步异步等预备知识,接着说明三者概念,分析其优缺点。最后指出Tomcat处理静态内容能力弱、并发数有限,可与Apache、Nginx结合实现高性能web服务器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java网络编程与IO流目录:

Apache Tomcat和Nginx的区别是什么?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBH4J1Lw-1606876050135)(C:\Users\lcz\AppData\Roaming\Typora\typora-user-images\image-20201202094755359.png)]

Nginx的势头很足,在2020 11月份使用份额上领先Apache。

一、预备知识 线程 阻塞和非阻塞 同步和异步

线程:

当一个程序在执行的时候,一般会创建一个进程,也可以有多个进程。而一个进程至少会创建一个线程,多个线程共享一个进程的内存。程序的最终运行是通过线程来操作的。线程的数量跟CPU的核数有关,一个核最多能发出两个线程。线程的操作主要分为给:CPU进行程序命令的执行;IO的操作(读取或输出数据)或请求网络数据。

阻塞和非阻塞:

阻塞:线程在执行IO操作读取数据时,这个IO可能会需要一定的时间才能等到数据返回,然后才能执行下面的命令。那么,此时这个线程的等待状态就把它成为阻塞,没有充分利用起CPU资源;

非阻塞:还是上述线程在进行IO操作时,无序等待数据的返回,可以接着往下执行代码命令,cpu资源一直在充分利用。

同步和异步:

同步:当线程进行IO操作请求数据时,是线程“主动”关心数据的返回;

异步:当前线程无需主动关心数据是否返回,当数据返回时,会有相关的事件通知线程。

而Nginx使用的就是非阻塞+异步;Apache使用的则是同步阻塞。

二、Apache和Nginx的概念

Apache

每一个连接,apache就会创建一个进程,每个线程内单线程,apache最多能创建256个线程。对于一个负载相对较高的网站来说,256的线程,也就是256个线程,因为线程处理请求时,是同步阻塞模式,接收请求之后,会一直等待该请求读取程序文件(IO)(同步), 执行业务逻辑,返回客户端,所有操作完成之后才能处理下一个请求(阻塞),如果服务器已经达到256的极限,那么接下去的访问就需要排队。

Nginx

nginx接收一个请求后,不会等待这个请求的文件读取操作完成之后才接收下一个请求,它不会等待这个请求的后续的处理结果。而是会马上循环处理下一个请求(不阻塞)。请求的程序文件执行完成之后,会主动通知该线程,不用你主动去等待或者轮询查看(异步)。最后返回给客户端。这样做,每个请求过来就不需要等待很长的时间排队,而是马上就能接收,开始进行处理了。等处理完成之后,会主动通知回调这个线程进行数据返回。

三、Apache和Tomcat概念

  • Apache是web服务器;Tomcat是Java服务器,只是一个servlet容器,是apache的扩展。
  • Apache是普通服务器,本身只支持html普通网页,不过可以通过插件支持jsp;而Tomcat是js/servlet容器,可解释Java程序;此外Apache可以与Tomcat单向连接,即Apache可以访问Tomcat资源,反之不然。

四、Apache、Tomcat和Nginx三者区别以及优缺点

Aapche:

Apache支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。

缺点:配置相对复杂,本身不支持动态页面。

优点:相对于Tomcat服务器来说处理静态文件是它的优势,速度快。Apache是静态解析,适合静态HTML、图片等。

Tomcat:

Tomcat是应用(Java)服务器,它只是一个Servlet容器,可以认为是Apache的开展,但是可以独立于Apache运行;

缺点:可以说Tomcat只能做Java服务器

优点:动态解析容器,处理动态请求,是编译JSP/Servlet的容器。

Nginx

Nginx是十分轻量的HTTP服务器,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器,其特点是占用内存少,并发能力强,易于开发,部署方便。

缺点:Nginx只适合静态和反向代理。

优点:负载均衡、反向代理,处理静态文件优势。Nginx处理静态请求的速度高于Apache。

五、Tomcat结合Apache、Nginx实现高性能的web服务器

tomcat与nginx、apache结合使用共有如下几点原因:

  • tomcat处理html的能力不如Apache和nginx,tomcat处理静态内容的速度不如apache和nginx。
  • tomcat接受的最大并发数有限,连接数过多,会导致tomcat处于"僵尸"状态,对后续的连接失去响应,需要结合nginx一起使用。

通常情况下,tomcat与nginx、Apache结合使用,nginx、apache既可以提供web服务,也可以转发动态请求至tomcat服务器上。但在一个高性能的站点上,通常nginx、apache只提供代理的功能,也就是转发请求至tomcat服务器上,而对于静态内容的响应,则由前端负载均衡器来转发至专门的静态服务器上进行处理。其架构类似于如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2IShGt89-1606876050140)(C:\Users\lcz\AppData\Roaming\Typora\typora-user-images\image-20201202102435939.png)]

在这种架构中,当haproxy或nginx作为前端代理时,如果是静态内容,如html、css等内容,则直接交给静态服务器处理;如果请求的图片等内容,则直接交给图片服务器处理;如果请求的是动态内容,则交给tomcat服务器处理,不过在tomcat服务器上,同时运行着nginx服务器,此时的nginx作为静态服务器,它不处理静态请求,它的作用主要是接受请求,并将请求转发给tomcat服务器的,除此之外,nginx没有任何作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mind_programmonkey

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值