hxz
发布于 2023-01-01 / 55 阅读
0

Nginx在微服务中的应用和测试策略

一、什么是Nginx

Nginx是一个高性能的http和反向代理web服务器,特点是占有内存少,并发能力强。

二、Nginx应用场景

①反向代理:

在介绍反向代理之前,先介绍一下什么是代理、什么是正向代理?

代理:

代理可以理解为中介,客户端和服务器之间本来可以直接通信,中间插入一个中介,这个中介就是代理。

代理示意图

正向代理:

正向代理是客户端代理,代理客户端,服务端并不知道具体发起请求的客户端。作用是帮助客户端访问其无法直接访问的服务器资源。

正向代理示意图

反向代理:

反向代理是服务端代理,代理服务端,客户端不知道具体处理请求的服务端。

反向代理示意图

Nginx反向代理简单实现:

在nginx配置文件中配置80端口的监听策略,添加location配置,描述proxy_pass指向服务应用,就能实现某应用端口的反向代理。

②负载均衡:

当多个客户端访问同一个网站,Nginx将客户端请求分派到服务端的多个应用实例上去处理业务,实现多请求压力的分摊和平衡。

负载均衡示意图

负载均衡有以下几种常见的实现类型:

(1)轮询:这是默认的nginx负载均衡算法,将请求依次分发给多台服务器,也即权重都为1,服务器处理请求的顺序是ABCABCABC。

http {
    upstream testServer {
        server  127.7.77.234:8090;
        server  127.7.77.235:8090;
        server  127.7.77.236:8090;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://testServer;
        }
    }
}

(2)加权轮询:根据服务器的具体情况,比如性能或容量,为每个服务器分配不同的权重,性能好的服务器可以被分派更多的请求。

如下修改nginx.conf文件的加权轮询配置,指定轮询几率,weight和访问比率成正比。服务器处理请求的顺序是ABBCCCABBCCCABBCCC。

http {
    upstream testServer {
        server  127.7.77.234:8090 weight=1;
        server  127.7.77.235:8090 weight=2;
        server  127.7.77.236:8090 weight=3;
    }

    server {
        listen 80;

        location / {
            proxy_pass http://testServer;
        }
    }
}

(3)IP哈希:同一IP地址的客户端的请求会被转发到某台固定的后端服务器,因为用户的多次请求不会被转发到不同的服务器上,所以保证了session会话连续性。

     upstream test {
        ip_hash;
        server  127.7.77.234:8090;
        server  127.7.77.235:8090;
           }

③流量控制:

在Nginx中,实现流量控制,主要通过以下配置来调控:

http  {

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
server {
    location  /  {
        limit_req zone=one burst=5 ;
    }

$binary_remote_addr :其中binary是将remote_addr以二进制格式存储,remote_addr是Nginx的内置变量,代表客户端的IP地址,这个值由服务器根据客户端的IP指定。

zone=one:表示创建一个名为one,大小为10m的区域来存放访问的频次信息

rate=1r/s:表示每秒最多只能处理来自同一客户端的1个请求

server中的配置:

limit_req zone=one:设置使用上面定义的配置区域one来配置。

burst:是缓冲区,设置大小为5,这样如果在1s内请求超过1次后,超过的请求会存放在缓冲区中等待,但是支持等待的空间只有5个,同一IP的请求次数超过了burst+rate,就返回503错误。

Nginx503

三、Nginx测试策略:

从测试人员的角度,当被测服务接入Nginx服务,我们需要怎么测试?

①校验被测服务中Nginx负载均衡机制:

比如我们想要校验负载均衡机制设置是否符合预期,预期Nginx采用负载均衡机制设置为加权轮询——A服务器:B服务器=2:8,那我们可以通过在一定时间窗口内(比如5min)发送请求,查看Nginx日志(access_log(访问日志)和error_log(错误日志)),获取到客户端访问Nginx服务的信息和Nginx运行的异常情情况及错误信息等来校验是否符合预期

②校验被测服务中Nginx流量控制机制:

模拟多个请求,触发限流规则,验证限流规则是否生效(如果是短时间多个请求,一般可以通过python的多线程来实现)