day24_Nginx学习笔记

1、软件测试浅谈

项目完成后,需要进行测试Test。
测试分为:
    1、功能测试(对某一个功能进行测试)**黑盒**:
        public int addOrder(Order order);
    2、流程测试(对一套业务进行测试)**白盒**:
        public int addOrder(Order order);
        假设
        返回1
            代表添加成功
        返回0
            代表添加失败
        返回-1
            服务器有问题
    3、压力测试:
        前提:在功能测试和流程测试都没有问题的前提下。
        压力测试就是测试高并发访问的问题。
        如何解决高并发呢?
            1. 优化代码,从代码逻辑上和性能上(软件层面)。
            2. 更换性能服务器(物理方面)。
            3. Nginx服务器(服务器集群+负载均衡)。

2、正向代理与反向代理

  反向代理方式实际上就是一台负责转发的代理服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处理的是tomcat。

3、Nginx在Windows平台的配置

  • 使用Nginx搭建Tomcat集群,并完成负载均衡。

3.1、什么是Nginx?

  经过查阅资料发现,Nginx不是后端的范畴,更多的是运维方面的知识。
  Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。
  Nginx的特点是占用内存少并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

3.2、为什么使用Nginx?

  背景:互联网飞速发展的今天,大用户量高并发已经成为互联网的主体。怎样能让一个网站能够承载几万个或几十万个用户的持续访问呢?这是一些中小网站急需解决的问题。用单机tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量150到200左右。按照并发访问量占总用户数量的5%到10%这样计算,单点tomcat网站的用户人数在1500到4000左右。对于一个为全国范围提供服务的网站显然是不够用的,为了解决这个问题引入了负载均衡方法。负载均衡就是一个web服务器解决不了的问题可以通过多个web服务器来平均分担压力来解决,并发过来的请求被平均分配到多个后台web服务器来处理,这样压力就被分解开来。
  负载均衡服务器分为两种,一种是通过硬件实现的负载均衡服务器,简称硬负载,例如:f5。另一种是通过软件来实现的负载均衡,简称软负载,例如ApacheNginx。硬负载和软负载相比,前者作用的网络层次比较多,可以作用到socket接口的数据链路层对发出的请求进行分组转发但是价格成本比较贵,而软负载作用的层次在http协议层之上,可以对http请求进行分组转发,并且因为是开源的所以几乎是0成本,所以阿里巴巴、京东等电商网站使用的都是Nginx服务器。

3.3、使用Nginx完成负载均衡

  完成Nginx负载均衡,那么需要先来介绍Tomcat的安装和配置,我们首先要来配置Tomcat完成集群的配置。因为我们没有多台服务器运行Tomcat,那么我们可以模拟在一台服务器上运行多个Tomcat程序。
  说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS、JS、html、htm等文件。

3.3.1、使用Tomcat配置Tomcat集群

1、下载Tomcat:https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.30/bin/apache-tomcat-8.5.30.zip,我下载的是apache-tomcat-8.5.30这个版本。
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,两个tomcat启动成功。

3.3.2、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配置文件:可以在不关闭nginx的情况下更新配置文件。
  DOS命令为:nginx -s reload
8、如果不想直接加载,而只是想看看自己的配置文件有没有问题,可以直接输入:nginx -t

3.3.3、Nginx的负载均衡的配置

1、打开D:\learn\JavaWeb\nginx-1.14.0\conf这个文件:


2、修改:C:\Windows\System32\drivers\etc\hosts文件,可以配置访问本机的域名。
通过以上的配置我们可以通过访问到不同的tomcat来分担服务器端的压力了。

3.3.4、配置Tomcat的session共享可以有三种解决方案

请求负载均衡过程中会话信息不能丢失.那么需要在多个tomcat中session需要共享。
第一种:是以负载均衡服务器本身提供的session共享策略,每种服务期的配置是不一样的,并且nginx本身是没有的。
第二种:是利用web容器本身的session共享策略来配置共享。针对于weblogic这种方式还是靠谱的。

    但是针对于tomcat这种方式存在很大的缺陷,主要因为是依靠广播方式来实现的session复制,会浪费很多带宽导致整个网络反映缓慢。

    官网也建议这种方式最好不要超过4台tomcat,具体的内容可参考/webapps/docs/cluster-howto.html里面有详细的说明。下面是具体的配置过程:
第三种:使用Tomcat集群redis的session共享配置方法。

在这里我们以第二种方式为例:
1、我们不想把应用放在tomcat中,我们想把应用放在别的目录中,但是又希望tomcat可以管理它,该如何办呢?
答:需要配置Tomcat的虚拟目录:


2、修改D:\learn\JavaWeb\tomcat1\conf\server.xml文件,最简单的集群配置只需要将节点中注释掉的下面这句取消注释即可:
Xmml代码:
    <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,那么假如有几个互不相关的集群,就可能z造成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的共享了。

posted @ 2018-06-15 14:46 黑泽君 阅读(...) 评论(...) 编辑 收藏