EdgeScript
最近在研究如何对线上的代码进行A/B测试(灰度测试),由于使用了阿里云的CDN,刚好看到了有相关的解决方案,这里稍微记录一下,方便以后学习
一、使用场景
请求处理结束:常用应用场景为缓存设置、回源鉴权、A/B Testing等
请求处理开始:常用应用场景为一次鉴权、拦截、限速等。
二、CLI使用
作用
发布、查询、删除、修改、回滚
配置
# 安装Python,执行es脚本
python ./es.py config --id=AK_ID --secret=AK_SECRET
发布
# 发布到测试环境
./es.py action=push_test_env domain=<domain> rule='{"pos":"<head|foot>","pri":"0-999","rule_path":"<the es code path>","enable":"<on|off>"}'
# 发不到生产环境
./es.py action=push_product_env domain=<domain> rule='{"pos":"<head|foot>","pri":"0-999","rule_path":"<the es code path>","enable":"<on|off>","configid":"<configid>"}'
pos:position
pro:priority
rule_path:ES脚本的位置
enable:当前规则是否生效
configid:修改的时候才需要,需要提前使用查询接口进行获取
查询
#查询测试(生产)环境的规则配置
./es.py action=<query_test_env|query_product_env> domain=<domain>
删除
#删除测试(生产)环境的规则配置
./es.py action=<del_test_env|del_product_env> domain=<domain> configid=<configid>
回滚
./es.py action=rollback_test_env domain=<domain>
三、使用
-
ES中有内置变量
$cookie_{name}
,对应于nginx中的$cookie_
变量 -
add_req_header可以用来添加回源请求头
-
rewrite改写或重定向
接受三个参数url, flag, code
参数 含义 url 目标URL flag 取值为break表示仅修改URI,不修改参数 code 响应码
四、脚本
# 获取cookie
grey = $cookie_GREY
grey_flag = 'grey'
if eq(grey, grey_flag){
# 添加请求头
add_req_header(grey, grey_flag)
# 灰度代码放在grey目录下
grey_uri = concat('/grey', $uri)
rewrite(grey_uri, 'break')
}