tomcat 与 nginx,apache的区别是什么?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJcCnTrc-1572492460111)(http://pic36.nipic.com/20131129/8821914_111419739001_2.jpg)]

tomcat 与 nginx,apache的区别是什么?

  转载链接: 知乎话题:tomcat 与 nginx,apache的区别是什么?

1. Apache:

  • Apache 服务器可以运行在几乎所有广泛使用的计算机平台上,Linux、Unix、Windows等,Apache 是世界上使用最为广泛的Web 服务器。因为其具有高效、功能强大、超强可扩展性等特点。同时Apache是一个强大的模块化服务器!有着非常强大Apache扩展模块!可以帮助web应用更加的灵活和更加的强大.

  • 但是要知道Apache本身是静态资源服务器!只支持静态页面HTML,ASP,PHP,Freemarke访问!也就是说当客户端访问Apache服务器,Apache服务器如实返回给请求的客户端!如果想访问动态页面,例如Java的jsp和servlet等, Apache服务器就无法解析了,

  • Apache服务器很诚实!不会编译执行动态页面结果而直接返回文件,如果需要返回java程序的动态页面结果!需要Tomcat在Apache后台支撑,也就是说由Apache接受请求!转发给Tomcat进行处理!但是相对复杂的配置文件以及模块化学习成本较高,和后期nginx更加轻量级的http服务器出现!让Apache逐步走下神坛!

2. Tomcat:

  • Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,Tomcat 支持JavaEE的动态页面Jsp和Servlet解析。因为Tomcat性能稳定,配置简单而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的JavaWeb 应用服务器。但是要知道他Tomcat和IIS等Web服务器一样,也具有处理HTML等静态页面的功能!但是处理静态资源的性能远没有apache强大!

  • Tomcat服务器属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

  • Tomcat是Apache 服务器的扩展,但运行时它是独立运行的。

  • Apache和tomcat可以结合使用!正确的搭配姿势,Apache 为HTML等静态页面服务,而Tomcat 实际上运行JSP 页面和Servlet等动态资源!

3. Nginx:

  • Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

  • Nginx一出生就打着处理高并发的口号!强大的并发处理能力也顺应了当今web开发的发展趋势!大用户量大并发处理给用Nginx展示了施展才华的舞台!

  • 中国使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

  • 但是我们要知道nginx服务器也不直接处理请求,如果需要访问servlet或者动态的jsp页面!

  • 还是需要nginx讲请求转发到tomcat等应用服务器处理请求!如果让一个tomcat面对大量的并发请求会有些应接不暇!我们可以通过nginx和tomcat结合负载均衡配置,大大提高web项目吞吐量,数据距离能力!

  • Nginx起到一个代理服务器的角色(即反向代理),通过轮询,权重,ip分配等方式将请求转发到不同的tomcat处理!多个tomcat共同完成了一件事情,性能大大提升!

4. Apache,Nginx对比 Tomcat:

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

  • Apache HTTP Server和Nginx都能够将某一个文本文件的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的——也就是说无论何时、任何人访问它得到的内容都是完全相同的,这样的资源我们称之为静态资源。动态资源则与之相反,在不同的时间、不同的客户端访问得到的内容是不同的.

  • Apache HTTP Server和Nginx本身不支持生成动态页面,但它们可以通过其他模块来支持(例如通过Shell、PHP、Python脚本程序来动态生成内容)。

  • 如果想要使用Java程序来动态生成资源内容,使用这一类HTTP服务器很难做到。Java Servlet技术以及衍生的Java Server Pages技术可以让Java程序也具有处理HTTP请求并且返回内容(由程序动态控制)的能力,

  • Tomcat正是支持运行Servlet/JSP应用程序的容器(Container):

  • Tomcat运行在JVM之上,它和HTTP服务器一样,绑定IP地址并监听TCP端口,同时还包含以下职责:

    1. 管理Servlet程序的生命周期.

    2. 将URL映射到指定的Servlet进行处理

    3. 与Servlet程序合作处理HTTP请求——根据HTTP请求生成HttpServletResponse对象并传递给Servlet进行处理,将Servlet中的HttpServletResponse对象生成的内容返回给浏览器

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

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

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

  • Tomcat好比一个饭店的厨师!当饭店很小的时候!他不仅的做厨师自己还得做服务员!来人吃饭他询问客人吃什么,了解需求以后!还需要去后台做饭,在端给客人,客人走了他还要说句“OK 200”。Tomcat手艺不错,吃饭的人越来越多!Tomcat有点应接不暇!点菜,做菜,端菜。饭店决定,聘请一个服务员,再聘请一个厨师!服务员就是apache或者nginx,他负责接收客人的需求,但是他们不做菜,将菜单转发给厨师!厨师也轻松很了多,只负责做菜,而且还多了一个厨师,他的压力也减轻了一半!

5. Apache 对比 Nginx

  • Nginx/Apache负责前端接收请求,转发请求。tomcat进行请求处理!

  • Apache和Nginx:因为他们的角色有点重叠!我们从技术层面进行对比!

  • Nginx:

    • epoll 异步非阻塞

    • nginx在开启时,会生成一个master进程,然后,master进程会fork多个worker子进程,最后每个用户的请求由worker的子线程处理。可以配置nginx的upstream实现nginx的反向代理。

    • 支持7层负载均衡静态文件、反向代理、前端缓存等处理方便

    • 支持高并发连接,每秒最多的并发连接请求理论可以达到 50000 个

    • 配置文件简单用线程处理用户请求,而线程是共享内存的,只需要开启少量进程,多个线程就可以共享进程的内存,占用内存小

    • 一个进程死掉时,会影响到多个用户的使用,稳定性差

  • Apache:

    • 稳定

    • rewrite强大

    • select 同步阻塞

    • 一个连接对应一个进程用进程处理用户请求,用MPM(多处理模块)来绑定到网络端口上,接受请求,调度子进程处理请求当用户请求过多时,开启的进程较多,占用内存大,每秒最多的并发连接请求最多不超过 3000 个

    • 一个进程死掉时,不会影响其他的用户

推荐:
服务器最低86元/年

拼团链接: 阿里云点击进入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶孤心丶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值