一、测试

<code class="hljs cpp" style="margin: 0px 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0px; letter-spacing: 0px; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0px; color: #a9b7c6; background: #282b2e; overflow-x: auto; padding: 0.5em; display: block !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important;">项目完成后,需要进行测试Test。
测试分为:
    功能测试(对某一个功能进行测试)**黑盒**:
        例如:public int addOrder(Order order);
    流程测试(对一套业务进行测试)**白盒**:
        例如:public int addOrder(Order order);
        返回1:
            代表添加成功
        返回0:
            代表添加失败
        返回-1:
            服务器问题
    压力测试:
        前提:在功能测试和流程测试都没有问题的前提下。
        压力测试就是测试高并发访问的问题。
        如何解决呢?
. 优化代码,从代码逻辑上和性能上(软件方面)。
. 更换性能服务器(硬件方面)。
. 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。另一种是通过软件来实现的负载均衡,简称 软负载 ,例如 apachenginx 。硬负载和软负载相比前者作用的网络层次比较多,可以作用到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.xml tomcat1/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文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可:
<code class="hljs xml" style="margin: 0px 2px; line-height: 18px; font-size: 14px; font-weight: normal; word-spacing: 0px; letter-spacing: 0px; font-family: Consolas, Inconsolata, Courier, monospace; border-radius: 0px; color: #a9b7c6; background: #282b2e; overflow-x: auto; padding: 0.5em; display: block !important; white-space: pre !important; word-wrap: normal !important; word-break: normal !important; overflow: auto !important;">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的共享了。