一、重新认识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页面请求,以此达到动静分离的目的。
六、Nginx服务器之负载均衡策略(6种)
在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。
负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
}
在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
#其他页面反向代理到tomcat容器
location ~ .*$ {
index index.jsp index.html;
proxy_pass http://dynamic_zuoyu;
}
这就是最基本的负载均衡实例,但这不足以满足实际需求;目前Nginx服务器的upstream模块支持6种方式的分配:
在这里,只详细说明Nginx自带的负载均衡策略,第三方不多描述。
总结:以上便是6种负载均衡策略的实现方式,其中除了轮询和轮询权重外,都是Nginx根据不同的算法实现的。在实际运用中,需要根据不同的场景选择性运用,大都是多种策略结合使用以达到实际需求。
链接: https://blog.youkuaiyun.com/yujing1314/article/details/107000737.
链接: https://blog.youkuaiyun.com/wjg8209/article/details/94899191.