Nginx http_split_client_module 实现AB测试

split_client模块


split_client该模块和map模块相似也是通过生成新的变量来完成AB测试的split_clients模块,这个模块可以根据变量的值按照百分比的方式生成新的变量。

什么是AB测:比如我们的产品不太确定推出的功能用户是否接受,所以推出了多个版本的功能让某一个百分比的用户去尝试某一类功能,最后看大家反馈来决定最终使用哪个功能版本。split_client模块就是根据某类变量的值按照百分比生成新变量的值。

ngx_http_split_clients_module模块创建适合于A/B测试(也叫做分离测试)的变量。或者当做负载均衡来使用。我相信,有很多地方可以用上此模块。

 

split_clients指令


语法:split_clients string $variable { ... }
默认值:     —
配置段:     http

 

配置实例


例一:

http{
    split_clients "${remote_addr}AAA" $variant{
        0.51%   .one;
        20.0%   .two;
        50.5%   .three;
         *       "";
       } 
    
     server{
     location /{
      index index${variant}.html
      }
  }  
}

 IP地址加上AAA字符串会使用MurmurHash2转换成数字。得出的数字在前0.5%,那么$variant值为.one,相应的在0.5-2.0%区间的值为.two,其他的为空字符。

原始字符串的值经过MurmurHash2算法进行了哈希。 示例中,哈希值从0到21474835(0.5%)对应于变量$varian".one"值, 哈希值从21474836到107374180(2%)对应于值".two", 哈希值从107374181到4294967295对应于值""(一个空字符串)。

例二:转载例子

nginx做缓存的时候,可能用到多快盘。比如如下配置:
proxy_cache_path /disk1 levels=1:2 keys_zone=cache_disk1:10m max_size=5g inactive=7d use_temp_path=off;
proxy_cache_path /disk2 levels=1:2 keys_zone=cache_disk2:10m max_size=5g inactive=7d use_temp_path=off;
proxy_cache_path /disk3 levels=1:2 keys_zone=cache_disk3:10m max_size=5g inactive=7d use_temp_path=off;

可是怎么让请求均匀的分配到这三块盘上呢,一般是配置split_clients方法,方法如下:
split_clients $request_uri $disk {
        33% disk1;
        33% disk2;
        * disk3;

之后在location中配置如下:
        location ~ (live\.m3u8)$ {
                        proxy_pass http://liveUpstream;
                        proxy_cache_valid 10s;
                        proxy_ignore_headers cache-control;
                        proxy_cache_key $uri;
                        proxy_cache cache_$disk;
        }

由location的标红配置可以看出,该缓存磁盘调用的是split_clients函数,会按照百分比获取一个磁盘。完整配置如下:

user  root;
worker_processes  1;

events {
        worker_connections  10240;
        use epoll;
}

worker_rlimit_nofile 30000;

http {
        lua_shared_dict nginxcache 60m;
        include       mime.types;
        default_type  application/octet-stream;
        log_format  session  '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                'upstream_cache_status=$upstream_cache_status '
                '"$http_user_agent" "$http_x_forwarded_for" "request_time 
                 $request_time"';
        access_log  logs/access.log  session;
        error_log  logs/error.log  error;
        sendfile        on;
        keepalive_timeout  65;
        client_max_body_size 2m;
        client_body_buffer_size 512k;
        proxy_cache_revalidate on;
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        proxy_cache_lock on;
        proxy_cache_lock_timeout 6s;
        proxy_cache_lock_age 6s;
        proxy_connect_timeout 75;
        proxy_send_timeout 75;
        proxy_read_timeout 75;
        proxy_buffer_size 16k;
        proxy_buffers 4 64k;
        proxy_busy_buffers_size 128k;
        proxy_temp_file_write_size 128k;
        proxy_temp_path ../proxy_temp;
 
	upstream vodUpstream {
		server 10.0.224.103:8080 max_fails=1 fail_timeout=1m;
	}
	
split_clients $request_uri $disk {
          33% disk1;
 		33% disk2;
 		*   disk3;
	}
	proxy_cache_path /disk1 levels=1:2 keys_zone=cache_disk1:600m max_size=10g inactive=7d use_temp_path=off;
	proxy_cache_path /disk2 levels=1:2 keys_zone=cache_disk2:600m max_size=10g inactive=7d use_temp_path=off;
	proxy_cache_path /disk3 levels=1:2 keys_zone=cache_disk3:600m max_size=10g inactive=7d use_temp_path=off;

server {
    listen       8080;
    server_name  starStreamerManager;
    location ~ (live\.m3u8)$ {
    proxy_pass http://vodUpstream;
    add_header Nginx-Cache "$upstream_cache_status";
    proxy_cache_valid 10s;
    proxy_cache_key $uri;
    proxy_cache cache_$disk;
    }
  }
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 主要配置文件介绍:profile文件,oratab 文件,数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件1.2 Oracle 主要配置文件介绍1.2.1 /etc/profile 文件 系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库 相关的环境变量就定义在/etc/profile 文件中 如下所示 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/8.1.7 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export ORACLE_SID=cams export ORACLE_TERM=vt100 export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export NLS_LANG=AMERICAN.ZHS16CGB231280 & 说明 1 配置上述环境变量要注意定义的先后顺序 如 定义 ORACLE_HOME 时 用 到 了 ORACLE_BASE 那 么 ORACLE_HOME 的 定 义 应 该 在 ORACLE_BASE之后 2 在使用中文版 CAMS 时 环境变量 NLS_LANG 的值应该设置为 AMERICAN.ZHS16CGB231280 如上所示 在使用英文版 CAMS时 可 以不设置 NLS_LANG 即去掉 export NLS_LANG=... ... 那一行 也可以 设置 NLS_LANG 的值为 AMERICAN_AMERICA.US7ASCII1.2.2 /etc/oratab 文件 /etc/oratab 文件描述目前系统中创建的数据库实例 以及是否通过 dbstart 和 dbshut 来控制该实例的启动与关闭 如下所示 忽略以#开头的注释部分 : cams:/u01/app/oracle/product/8.1.7:Y 其中 cams 为实例 ID /u01/app/oracle/product/8.1.7为 ORACLE_HOME目 录 Y表示允许使用 dbstart和 dbshut 启动和关闭该实例数据库 如果设置为 N 表示不通过 dbstart 和 dbshut 启动和关闭实例数据库 CAMS 系统要求在 安装完 ORACLE 后要求将该参数修改为 Y 以保证 ORACLE 数据库自启动 和关闭 1.2.3 数据库实例初始化文件 initSID.ora 每个数据库实例都有一个初始化 参数文件 其缺省 存放的路径为 $ORACLE_BASE/admin//pfile 其名称为 init.ora 如 cams 实 例 对 应 的 参 数 文 件 为 initcams.ora 缺 省 存 放 路 径 为 $ORACLE_BASE/admin/cams/pfile 即/u01/app/oracle/admin/cams/pfile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值