从JavaWeb的角度认识Nginx
作为一名JavaWeb方向程序员,更多的是写服务器后台代码,但是俗话说,不想当架构师的程序员不是好程序员,我们要对并发、负载等词汇进行深入探索。
一、重新认识Tomcat
- Tomcat属于轻量级的Web应用服务器,在中小型系统和并发访问用户不是很多的的场合下被普遍使用。
- Tomcat实际上是用来运行JSP页面和Servlet的,独立的Servlet容器是Tomcat的默认模式,可以理解为Tomcat只处理动态部分。
- 实际上Tomcat是Apache服务器项目的一个扩展组件,不过它是独立运行的。
- 当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。
- Tomcat具有处理HTML页面的功能,但是它对HTML页面的处理能力远不如Apache。
以上列举了Tomcat这个Web应用服务器的不足之处以及它的侧重点,因为它是Apache服务器的一个独立扩展插件,所以要将Apache服务器和Tomcat应用服务器一起使用才能取之长处避之短处。
但是随着Nginx服务器的袭来,Apache服务器的主流功能都可被Nginx服务器代替,而且Nginx服务器的性能更好。Nginx对请求的处理是异步型的,非阻塞的;而Apache对请求的处理是阻塞型,非异步型的;在高并发情况下Nginx能保持地资源低消耗高性能高度模块化,而且Nginx的配置文件相对Apache更为简单。Nginx 同时也是一个非常优秀的邮件代理服务器,so,为什么不选择Nginx服务器呢?
二、认识Nginx
- Nginx是一个高性能的Http和反向代理服务器,也是一个IMAP/POP3/SMTP服务器(电子邮件代理)。
- Nginx可作为负载均衡服务器,可作为Http代理服务器对外进行服务。
- 处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。
- 模块化的结构。
- 在国内,很多著名的网站都用Nginx走位网页服务器,如百度、京东、新浪、网易、腾讯、淘宝等。
三、Nginx的功能
- 处理静态文件,索引文件以及自动索引;
- 反向代理加速(无缓存),简单的负载均衡和容错;
- 基于IP 和名称的虚拟主机服务;
- 模块化的结构。同一个 proxy的多个子请求并发处理;
- IMAP/POP3/SMTP代理服务。
- 基于客户端 IP 地址和 HTTP 基本认证的访问控制;
- 支持 FLV (Flash 视频);
Nginx还不止这些功能,我只是列出了常见的功能。
四、关于负载均衡
当一台服务器的处理能力、存储空间不足时,不要企图去换更强大的服务器,对大型网站而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。其意思就是分摊到多个操作单元上进行执行。
在这里我们只阐述对请求的的负载均衡。
通过负载均衡调度服务器,将来自浏览器的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多的用户,就在集群中加入更多的应用服务器,使应用服务器的负载压力不再成为整个网站的瓶颈。
理论上的JavaWeb项目结构应该是这样的
五、Nginx和Tomcat对请求负载均衡的方案
整体思想方向:前端部署nginx服务器,后端部署tomcat应用。用户访问nginx服务器,对于静态资源nginx服务器直接返回到浏览器展示给用户,对动态资源的请求被nginx服务器转发(分配)到tomcat应用服务器,tomcat应用服务器将处理后得到的数据结构返回给nginx服务器,然后返回到浏览器展示给用户。
注意:在这里Tomcat应用服务器就是Java应用,可以理解为后台。
总结:在这里Nginx作为反向代理服务器,可以对后台的多台Tomcat服务器负载均衡,也可以让Nginx处理静态页面的请求、Tomcat处理JSP页面请求,以此达到动静分离的目的。
这篇博客讲解科普、理论和方向,下篇博客将带来实践。