day24_Nginx学习笔记
一、测试
项目完成后,需要进行测试Test。
测试分为:
功能测试(对某一个功能进行测试)**黑盒**:
public int addOrder(Order order);
流程测试(对一套业务进行测试)**白盒**:
public int addOrder(Order order);
返回1:
代表添加成功
返回0:
代表添加失败
返回-1:
服务器问题
压力测试:
前提:在功能测试和流程测试都没有问题的前提下。
压力测试就是测试高并发访问的问题。
如何解决呢?
1. 优化代码,从代码逻辑上和性能上(软件层面)。
2. 更换性能服务器(物理方面)。
3. Nginx服务器(服务器集群+负载均衡)
二、代理
反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。
三、Nginx在Windows平台的配置
- 能够使用Nginx搭建Tomcat集群,并完成负载均衡。
1、什么是Nginx?
经过查阅资料发现,Nginx不是后端的范畴,更多的是运维方面的知识。
Nginx
是俄罗斯人编写的十分轻量级的HTTP服务器
,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。
Nginx的特点是占用内存少
,并发能力强
,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
2、为什么使用Nginx?
背景:互联网飞速发展的今天,大用户量高并发
已经成为互联网的主体。怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题。用单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在150到200左右。按照并发访问量占总用户数量的5%到10%这样计算,单点tomcat网站的用户人数在1500到4000左右。对于一个为全国范围提供服务的网站显然是不够用的,为了解决这个问题引入了负载均衡方法
。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。
负载均衡服务器分为两种,一种是通过硬件实现的负载均衡服务器,简称硬负载
,例如:f5。另一种是通过软件来实现的负载均衡,简称软负载
,例如apache
和nginx
。硬负载和软负载相比前者作用的网络层次比较多,可以作用到socket接口的数据链路层对发出的请求进行分组转发但是价格成本比较贵,而软负载作用的层次在http协议层之上,可以对http请求进行分组转发,并且因为是开源的所以几乎是0成本,所以阿里巴巴、京东等电商网站使用的都是Nginx服务器。
3、使用Nginx完成负载均衡
完成Nginx负载均衡,那么需要先来介绍Tomcat的安装和配置,我们首先要来配置Tomcat完成集群的配置。因为我们没有多台服务器运行Tomcat,那么我们可以模拟在一台服务器上运行多个Tomcat程序。
说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。
-
使用Tomcat配置Tomcat集群:
1、下载Tomcat:https://tomcat.apache.org/download-90.cgi,我下载的是apache-tomcat-9.0.7这个版本。
2、安装和配置Tomcat:直接将下载后的Tomcat解压在本地磁盘,解压两个分别命名为tomcat1和tomcat2。
3、配置tomcat环境变量:
4、需要将tomcat带有端口号的地方改成不同的端口即可,分别打开两个tomcat的安装目录下conf下的server.xmltomcat1/conf/server.xml中的文件修改如下:
tomcat2/conf/server.xml中的文件修改如下:
5、然后cmd分别进入tomcat1和tomcat2的安装目录下/bin,运行startup.bat。
-
Nginx的安装和部署:
1、Nginx官网下载地址:http://nginx.org/en/download.html
2、将nginx-1.14.0.zip解压包某个盘符下。
3、打开文件夹,双击nginx.exe即可运行。
4、我们会看到一个窗口一闪而过。此时我们打开任务管理器,可以看到两个nginx.exe在那里运行着,这说明我们已经启动了。
5、 打开浏览器 http://localhost:80 显示如下页面,表示安装成功。
6、关闭nginx需要使用:相当于找到nginx进程kill。
DOS命令为:nginx -s stop
7、修改nginx的配置文件后,需要重新加载配置文件:可以在不关闭nginx的情况下更新配置文件。
DOS命令为:nginx -s reload
8、如果不想直接加载,而只是想看看自己的配置文件有没有问题,可以直接输入:nginx -t
-
Nginx的负载均衡的配置:
1、打开D:\learn\JavaWeb\nginx-1.14.0\conf这个文件:
2、修改:C:\Windows\System32\drivers\etc\hosts文件,可以配置访问本机的域名。
通过以上的配置我们已经可以通过访问到不同的tomcat来分担服务器端的压力了。 -
配置Tomcat的session共享可以有三种解决方案:
请求负载过程中会话信息不能丢失.那么需要在多个tomcat中session需要共享。
第一种:是以负载均衡服务器
本身提供的session共享策略,每种服务期的配置是不一样的并且nginx本身是没有的。
第二种:是利用web容器本身的session共享策略
来配置共享。针对于weblogic这种方式还是靠谱的。但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播方式来实现的session复制,会浪费很多带宽
导致整个网络反映缓慢。官网也建议这种方式最好不要超过4台tomcat,具体的内容可参考/webapps/docs/cluster-howto.html里面有详细的说明。下面是具体的配置过程:
第三种:是Tomcat集群
加redis
的Session共享配置方法。
在这里我们以第二种方式为例:
1、先配置Tomcat的虚拟目录:
2、修改D:\learn\JavaWeb\tomcat1\conf\server.xml文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可:
Xml代码:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
使用这样方法配置的集群会将Session同步到所在网段上的所有配置了集群属性的实例上
(此处讲所在网段可能不准确,因为Membership 是使用address和port来区分的。
tomcat集群的实例如果在Membership配置中有相同的address和port值的tomcat被分到同一个集群里边。
他们的session是相互共享的,同一个session的集群被称为一个cluster。
可以配置多个cluster,但是cluster和cluster之间的session是不共享的)。
也就是说如果该广播地址下的所有Tomcat实例都会共享Session,那么假如有几个互不相关的集群,就可能造成Session复制浪费,所以为了避免浪费就需要对节点多做点设置了,如下:
Xml代码
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
</Channel>
</Cluster>
加了一个Channel,里面包了个Membership,咱们要关注的就是membership的port属性和address属性,不同的集群设置不同的port值或address值,从目前的使用来看,基本上是隔离开了。
3、修改项目的web.xml文件:web.xml文件的修改很简单:只需要在节点中添加这个节点<distributable/>
就可以了。有了这二步就实现了Tomcat的集群和Session的共享了。