cnsre / abtestinggateway Goto Github PK
View Code? Open in Web Editor NEWLicense: MIT License
License: MIT License
我们现在也准备做AB Test,但是我们这边只让用Redis集群,我们这个项目支持么?
你好,在使用过程中发现此处bug
在模块 local modulename = "abtestingCache" 代码中
_M.getUpstream = function(self, divsteps, usertable)
local upstable = {}
local cache = self.cache
for i = 1, divsteps do
local idx = indices[i]
local info = usertable[idx]
-- ups will be an actually value or nil
if info then
local ups = cache:get(info)
upstable[idx] = ups
end
end
return upstable
end
_M.setUpstream = function(self, info, upstream)
local cache = self.cache
local expire = shdict_expire
cache:set(info, upstream, expire)
end
这个是用户获取分流upstream以及写入upstream 但是这个地方并没有加入hosts ,因为有cache关系可能会造成用户分流了上次cache中的upstream。
1.用户city分流,city是作为request参数随着请求下发的吗,还是?
2.iprange 策略模式,需要做额外的配置吗,ip是直接从用户的请求中提取的吧,然后根据策略进行分流的
咨询一下如何扩展分流策略,比如我现在要按照参数年龄age分流,我按照以前有同事提供的,在init.luaabtesting\utils 的init.lua中_M.divtypes添加 ["arg_age"] = 'ageParser',然后启动,我添加策略时报错,如下所示:
[root@data2-node utils]# curl 127.0.0.1:8080/ab_admin?action=policy_set -d '{"divtype":"arg_age","divdata":[{"age":"1","upstream":"data1"},{"age":"2","upstream":"core"}]}'
{"code":40201,"desc":"lua runtime error ../lib/abtesting/adapter/policy.lua:95: module 'abtesting.diversion.arg_age' not found:\n\tno field package.preload['abtesting.diversion.arg_age']\n\tno file '../abtesting/diversion/arg_age.lua'\n\tno file '../lib/abtesting/diversion/arg_age.lua'\n\tno file '../lib/lua-resty-core/lib/abtesting/diversion/arg_age.lua'\n\tno file '/usr/local/openresty/lualib/abtesting/diversion/arg_age.lua'\n\tno file '/usr/local/openresty/lualib/abtesting/diversion/arg_age/init.lua'\n\tno file './abtesting/diversion/arg_age.lua'\n\tno file '/usr/local/openresty/luajit/share/luajit-2.1.0-beta1/abtesting/diversion/arg_age.lua'\n\tno file '/usr/local/share/lua/5.1/abtesting/diversion/arg_age.lua'\n\tno file '/usr/local/share/lua/5.1/abtesting/diversion/arg_age/init.lua'\n\tno file '/usr/local/openresty/luajit/share/lua/5.1/abtesting/diversion/arg_age.lua'\n\tno file '/usr/local/openresty/luajit/share/lua/5.1/abtesting/diversion/arg_age/init.lua'\n\tno file '/usr/local/openresty/lualib/abtesting/diversion/arg_age.so'\n\tno file './abtesting/diversion/arg_age.so'\n\tno file '/usr/local/lib/lua/5.1/abtesting/diversion/arg_age.so'\n\tno file '/usr/local/openresty/luajit/lib/lua/5.1/abtesting/diversion/arg_age.so'\n\tno file '/usr/local/lib/lua/5.1/loadall.so'\n\tno file '/usr/local/openresty/lualib/abtesting.so'\n\tno file './abtesting.so'\n\tno file '/usr/local/lib/lua/5.1/abtesting.so'\n\tno file '/usr/local/openresty/luajit/lib/lua/5.1/abtesting.so'\n\tno file '/usr/local/lib/lua/5.1/loadall.so'"}
读了代码,在iprange的分流方式的时候,在nginx的cache里面设置的key/value是用户访问的ip2long的值/upstream值,如果用户访问量很大的话,会不会有问题?
另外,cache的超时时间设置多少比较适合?
浏览器 访问 http://localhost/ab_admin 控制台的时候
nginx 日志 报出[error] 11003#0: *24 [lua] log.lua:28: errlog(): ab_div host [ab_admin] code : 50501, desc : error during action of , client: *, server: , request: "GET /ab_admin HTTP/1.1", host: ""
这是什么原因啊?在线等
还是想问一下:
为什么没有考虑把分流功能和设定功能完全分开;
因为我可能有很多的域名,没必要每个域名都配置location = /admin/policy/set之类的;
就是有一种设想,使用redis当中间数据库,ABTestingGateway这个应用只是一个读库来分流。使用另一个单独的应用,直接操作redis数据库来配置整个ABTestingGateway各个域名的策略。
admin/policy.lua的set方法的policyMod为什么是全局的?其他方法,比如check之类是local的policyMod。
将多级分流的admin/diversion.lua的第二个pfunc的step4修改成循环全部divsteps
本地跑的时候读取redis总是只有第一个循环才读的到数据。例如:多级分流把uidappoint设置成policy:0,把iprange设置成policy:1,则lua只有uidappoint的getUpstream读得出redis值;反之,多级分流把iprange设置成policy:0,把uidappoint设置成policy:1,则lua只有iprange的getUpstream读得出redis值
这个什么原因?
你好,
1,README 中详细讲解了如何配置各种策略与运行时环境,但是没有提如何配置主服务与beta服务的访问,你们给出的策略例子只能访问根目录,其它目录都报404,我们的项目url比较多,我们想按照不同的用户分流到不同的服务器上,该如何配置url,可否给出个例子
2,没有发现项目中嵌入web管理页面
嗨~
我在执行:curl 127.0.0.1:8030 -H 'X-Uid:30' -H 'X-Real-IP:192.168.1.1
报如下错误:
2016/05/04 00:16:22 [error] 7189#0: *31 lua entry thread aborted: runtime error: ...ABTestingGateway-master/utils/../diversion/diversion.lua:12: loop or previous error loading module 'abtesting.utils.sema'
stack traceback:
coroutine 0:
[C]: in function 'require'
...ABTestingGateway-master/utils/../diversion/diversion.lua:12: in function <...ABTestingGateway-master/utils/../diversion/diversion.lua:1>, client: 127.0.0.1, server: api.weibo.cn, request: "GET / HTTP/1.1", host: "127.0.0.1:8030"
疑问:
cat sema.lua
local modulename = "abtestingSema"
local _M = {}
local semaphore = require("lua-resty-core.lib.ngx.semaphore")
_M.sema = semaphore.new(1)
_M.upsSema = semaphore.new(1)
lua-resty-core.lib.ngx.semaphore 加载失败。。。 这个有什么作用呢 ?
local sem, err = sema:wait(0.01)
if sem then sema:post(1) end
等等~ 锁相关的吗 ? 学习下。
:)
能讲下cache模块具体实现吗?
线上系统打算使用,但是目前不清楚缓存模块逻辑
1 我对同一个策略进行了重复设置,都能成功。如下是我的输出,这样合理吗。
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=policy_set -d '{"divtype":"uidsuffix","divdata":[{"suffix":"1","upstream":"beta1"},{"suffix":"3",2"},{"suffix":"5","upstream":"beta1"},{"suffix":"0","upstream":"beta3"}]}'
{"code":200,"desc":"success the id of new policy is 8"}
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=policy_set -d '{"divtype":"uidsuffix","divdata":[{"suffix":"1","upstream":"beta1"},{"suffix":"3",2"},{"suffix":"5","upstream":"beta1"},{"suffix":"0","upstream":"beta3"}]}'
{"code":200,"desc":"success the id of new policy is 9"}
2 为什么在查询策略时,一直提示策略参数有误呢,如下是我的提示。(严格按照readme操作的)
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=policy_get&arg_policyid=4
[1] 77281
[root@data2-node logs]# {"code":50104,"desc":"parameter type error for policyID invalid"}
[1]+ Done curl 127.0.0.1:8080/ab_admin?action=policy_get
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=policy_get&&arg_policyid=4
{"code":50104,"desc":"parameter type error for policyID invalid"}
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=policy_get
{"code":50104,"desc":"parameter type error for policyID invalid"}
[root@data2-node logs]#
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=policy_get&policyid=4
[1] 77296
[root@data2-node logs]# {"code":50104,"desc":"parameter type error for policyID invalid"}
[1]+ Done curl 127.0.0.1:8080/ab_admin?action=policy_get
[root@data2-node logs]# curl 127.0.0.1:8080/ab_admin?action=runtime_get&hostname=api.weibo.cn
[1] 77305
[root@data2-node logs]# {"code":50104,"desc":"parameter type error for arg hostname invalid: "}
安装完依赖软件,按照示例步骤执行,执行到第9步中的第二步报404
执行tengine-2.1.2/objs/nginx -p pwd
-c conf/nginx.conf时报错
nginx: [emerg] unknown directive "set" in /path/to/ABTestingGateway-master/utils/conf/default.conf:22
tengine信息如下
Tengine version: Tengine/2.1.2 (nginx/1.6.2)
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)
TLS SNI support enabled
configure arguments: --with-ld-opt=-Wl,-rpath,/usr/local/web/LuaJIT-2.0.1/lib --with-luajit-inc=/usr/local/web/LuaJIT-2.0.1/include/luajit-2.0 --with-luajit-lib=/usr/local/web/LuaJIT-2.0.1/lib --without-http_rewrite_module --add-module=../lua-nginx-module-0.10.4
loaded modules:
ngx_core_module (static)
ngx_errlog_module (static)
ngx_conf_module (static)
ngx_dso_module (static)
ngx_syslog_module (static)
ngx_events_module (static)
ngx_event_core_module (static)
ngx_epoll_module (static)
ngx_procs_module (static)
ngx_proc_core_module (static)
ngx_openssl_module (static)
ngx_http_module (static)
ngx_http_core_module (static)
ngx_http_log_module (static)
ngx_http_upstream_module (static)
ngx_http_static_module (static)
ngx_http_autoindex_module (static)
ngx_http_index_module (static)
ngx_http_auth_basic_module (static)
ngx_http_access_module (static)
ngx_http_limit_conn_module (static)
ngx_http_limit_req_module (static)
ngx_http_geo_module (static)
ngx_http_map_module (static)
ngx_http_split_clients_module (static)
ngx_http_referer_module (static)
ngx_http_ssl_module (static)
ngx_http_proxy_module (static)
ngx_http_fastcgi_module (static)
ngx_http_uwsgi_module (static)
ngx_http_scgi_module (static)
ngx_http_memcached_module (static)
ngx_http_empty_gif_module (static)
ngx_http_browser_module (static)
ngx_http_user_agent_module (static)
ngx_http_upstream_ip_hash_module (static)
ngx_http_upstream_consistent_hash_module (static)
ngx_http_upstream_check_module (static)
ngx_http_upstream_least_conn_module (static)
ngx_http_upstream_keepalive_module (static)
ngx_http_upstream_dynamic_module (static)
ngx_http_stub_status_module (static)
ngx_http_write_filter_module (static)
ngx_http_header_filter_module (static)
ngx_http_chunked_filter_module (static)
ngx_http_range_header_filter_module (static)
ngx_http_gzip_filter_module (static)
ngx_http_postpone_filter_module (static)
ngx_http_ssi_filter_module (static)
ngx_http_charset_filter_module (static)
ngx_http_userid_filter_module (static)
ngx_http_footer_filter_module (static)
ngx_http_trim_filter_module (static)
ngx_http_headers_filter_module (static)
ngx_http_upstream_session_sticky_module (static)
ngx_http_reqstat_module (static)
ngx_http_lua_module (static)
ngx_http_copy_filter_module (static)
ngx_http_range_body_filter_module (static)
ngx_http_not_modified_filter_module (static)
经过调研,发现你们这个分流发布引擎特别适合我们目前的场景,由于本人是个java程序员,不太懂里面一些东西,demo如何跑起来,希望能有个QQ群或者QQ,非常感谢,觉得你们的产品做的很好,也希望我能成功把你们的产品引入公司,发挥它的作用!
我使用tengine+abtestinggateway,在测试的时候发现server块中加入proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for不能正确获取到IP,只能放在location块中。请问这可能是什么原因?谢谢。
iprange.lua里面将ip转换为long型时的offset的作用是什么,怎么决定取值的?
大家好,我对灰度系统进行了重构,主要是添加了router、优化了代码结构、优化代码风格,采用模块化设计,在develop分之。目前唯一的缺陷是压测性能略低于现有master分支,另外是router的加入导致的api改变,所以大家有兴趣的话可以试用下。
你好,
我是nginx新手,
按照README里的示例,在跑到
# 启动灰度系统,proxy server,灰度系统的配置也写在conf/nginx.conf中
9. /usr/local/nginx/sbin/nginx -p pwd
-c conf/nginx.conf
的时候出现下面错误
"nginx: [emerg] unknown directive "uniqueid_prefix" in xxx"
请问,unqiueid_prefix是哪个module里的命令。 给的示例又需要哪些module才能跑呢?
您好。
我按照示例,添加策略组的时候:
curl 127.0.0.1:8080/ab_admin?action=policygroup_set -d '{"1":{"divtype":"uidsuffix","divdata":[{"suffix":"1","upstream":"beta1"},{"suffix":"3","upstream":"beta2"},{"suffix":"5","upstream":"beta1"},{"suffix":"0","upstream":"beta3"}]},"2":{"divtype":"arg_city","divdata":[{"city":"BJ","upstream":"beta1"},{"city":"SH","upstream":"beta2"},{"city":"XA","upstream":"beta1"},{"city":"HZ","upstream":"beta3"}]},"3":{"divtype":"iprange","divdata":[{"range":{"start":1111,"end":2222},"upstream":"beta1"},{"range":{"start":3333,"end":4444},"upstream":"beta2"},{"range":{"start":7777,"end":2130706433},"upstream":"beta2"}]}}'
返回了404错误:
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
是否接口有了改动而文档没有更新?
请问redis是设置了密码的,我该如何配置?
你好,请问在运行时设置的规则,可以具体到location级别吗?现在的都是到servername级别的?
我看到好像是可以在hostname=servername.location这样设置的,但是好像达不到要求。。。
大概的思路是这样的:
location /ab_admin {
content_by_lua_file '../admin/ab_action.lua';
}
location /degrade_admin{
content_by_lua_file '../admin/degrade_action.lua';
}
仿照你的ab_admin 写一个degrade_admin,用于降级规则的设置,删除和查看。其规则的配置也仿照你的规则:
curl 127.0.0.1:8080/degrade_admin/action=degrade_set -d '{"degtype":"uidsuffix","degdata":[{"suffix":"1","percent":"90"}]}'
表示降级规则类型为uid后缀,若后缀为1,则降级百分之90.。
然后在 server {
listen 8050
access_by_lua_file '../degrade/degrade.lua';
location /test {
}
xxxxxx
}
用degrade.lua来做降级逻辑。
这样可以复用你的很多模块,error,handler,redis,cache等模块。
你觉得这样可行吗?真实的部署会不会有问题?因为刚开始接触实际项目,没啥经验:)
谢谢了:)
因为前段nginx 会有多台,如果使用单台redis 会有很严重的单点问题,如果引入reids 的ha 方案,又增加整体复杂度,是否可以使用redis 3.0 虽然目前不是那么靠谱
跟着作者的文档和测试和代码过了一遍; 最后发现好像运行时不能设置多种策略并存的情况;
在搭建完ABTestingGateway后,进行策略配置时,其URL如下:
curl 127.0.0.1:8080/ab_admin?action=policygroup_set -d '{"1":{"divtype":"arg__userId","divdata":[{"_userId":3100080,"upstream":"beta1"},{"_userId":3100081,"upstream":"beta1"}]}}'
返回信息为:
{"code":50104,"desc":"parameter type error for unsupported divtype"}
但如使用以下URL则设置成功:
curl 127.0.0.1:8080/ab_admin?action=policygroup_set -d '{"1":{"divtype":"arg_city","divdata":[{"city":"BJ","upstream":"beta1"},{"city":"SH","upstream":"beta2"}]}}'
{"desc":"success ","code":200,"data":{"groupid":1,"group":[3]}}
现是否只支持参数为city,其余参数不支持,望请解答,谢谢!
您好:
我用手机端业务进行测试时,登陆ID后需要手势密码解锁后进行APP内容加载,在进行灰度ID策略设置后,查看vhost_error.log日志,点击登陆只会出现post请求(如标题),然后无法找到对应police后走stable节点,正常连接请求日志为先post请求,输入手势解锁后进行get id信息 图片加载等,是否在策略模块中只配置对GET请求进行灰度,如何配置,请指点~在线等,谢谢!
现在有两个问题:
1,部署问题
2,在cache失效时,回源到redis时的效率问题。
1,部署问题
现有的部署是只有一个管理机,一个redis主库。但现在的问题是,为了不让管理机出现单点故障,需要多台管理机构成管理机集群,就Redis的部署问题。
多台管理机构成的集群依然只会写入一个Redis主库,但Redis主库挂掉后怎么办?
其实想过管理机和业务nginx都使用同一个Redis集群,但是担心网络延时问题(主要是业务nginx)。
有没有什么好的部署方案:)
2,在业务nginx中,如果lua cache超时失效,回源redis时,那么这时候请求会阻塞吧,这个问题怎么解决呢?
(流量比较大。。:))
查看错误日志:
2016/11/24 18:57:31 [error] 2804#2804: *8 lua entry thread aborted: runtime error: ../lib/lua-resty-core/lib/ngx/semaphore.lua:63: /usr/local/openresty/luajit/lib/libluajit- 5.1.so.2: undefined symbol: ngx_http_lua_ffi_semaphore_new stack traceback: coroutine 0: [C]: in function 'require' /www/abtesting/utils/../diversion/diversion.lua:11: in function </www/abtesting/utils/../diversion/diversion.lua:1>, client: 127.0.0.1, server: api.weibo.cn, request : "GET / HTTP/1.1", host: "127.0.0.1:8030"
分流策略设置都正常,出现的错误 undefined symbol: ngx_http_lua_ffi_semaphore_new,是luajit或niginx版本不对吗?
luajit 版本:LuaJIT 2.1.0-beta2 -- Copyright (C) 2005-2016 Mike Pall. http://luajit.org/
niginx版本:nginx version: openresty/1.9.15.1
满足策略后跳转的这些配置服务器
upstream beta2 {
keepalive 1000;
server server1:8021,server2:8021;
}
如上所示,满足beta2的策略走 下面连个server
现在面临一个问题,现在生产环境都是使用的nginx同时前端有elb负载器,现在准备接入这个系统,如何部署,不影响线上的业务。
1、部署是否可以独立出来?
2、如何转移流量过来做算法配置。
location ~* /abc/(i|f)/ {
set $backend 'stable';
rewrite_by_lua_file '../diversion/diversion.lua';
proxy_pass http://$backend;
}
请问一下,在$backend中默认将其赋值为 ‘stable’,实际上由 '../diversion/diversion.lua'的功能模块进行策略的分析与赋值,然后转向相应的streaming中,如果'../diversion/diversion.lua'的功能模块获取失败,那么就对应stable streaming了???请问,这里是这样理解吗。
1、首先文档上写着:建议选用openresty最新版,但是从openresty-1.9.15.1开始,lua-resty-core有些api变更,因此建议先使用openresty-1.9.7.5及以下。这句话让人很糊涂,先说让用最新版,后说建议先使用openresty-1.9.7.5及以下,容易让人误解。我在准备环境的时候安装的是openresty-1.9.7.5。
2、我按照文档上的步骤执行utils下的demo,到第9步开始遇到 #48 ,然后我按照 #27 中提供的解决方案,我先是把Luajit替换成openresty维护的版本,然后从/usr/local/oprensty/lualib中将ngx和resty目录 copy 到ABTestingGateway的lib/lua-resty-core目录下替换,仍旧报 #48 ,我现在迷糊了。
3、建议依赖的软件指定具体的版本号, #48 问题建议在readme中给出能用的解决方案。
2016/09/30 16:04:24 [error] 17653#0: *66 lua entry thread aborted: runtime error: /usr/local/openresty/nginx/../admin/ab_action.lua:1: module 'abtesting.adapter.policy' not found:
no field package.preload['abtesting.adapter.policy']
no file '../abtesting/adapter/policy.lua'
no file '../lib/abtesting/adapter/policy.lua'
no file '../lib/lua-resty-core/lib/abtesting/adapter/policy.lua'
no file '/usr/local/openresty/site/lualib/abtesting/adapter/policy.lua'
no file '/usr/local/openresty/site/lualib/abtesting/adapter/policy/init.lua'
no file '/usr/local/openresty/lualib/abtesting/adapter/policy.lua'
no file '/usr/local/openresty/lualib/abtesting/adapter/policy/init.lua'
no file './abtesting/adapter/policy.lua'
no file '/usr/local/openresty/luajit/share/luajit-2.1.0-beta2/abtesting/adapter/policy.lua'
no file '/usr/local/share/lua/5.1/abtesting/adapter/policy.lua'
no file '/usr/local/share/lua/5.1/abtesting/adapter/policy/init.lua'
no file '/usr/local/openresty/luajit/share/lua/5.1/abtesting/adapter/policy.lua'
no file '/usr/local/openresty/luajit/share/lua/5.1/abtesting/adapter/policy/init.lua'
no file '/usr/local/openresty/site/lualib/abtesting/adapter/policy.so'
no file '/usr/local/openresty/lualib/abtesting/adapter/policy.so'
no file './abtesting/adapter/policy.so'
no file '/usr/local/lib/lua/5.1/abtesting/adapter/policy.so'
no file '/usr/local/openresty/luajit/lib/lua/5.1/abtesting/adapter/policy.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
no file '/usr/local/openresty/site/lualib/abtesting.so'
no file '/usr/local/openresty/lualib/abtesting.so'
no file './abtesting.so'
no file '/usr/local/lib/lua/5.1/abtesting.so'
no file '/usr/local/openresty/luajit/lib/lua/5.1/abtesting.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
coroutine 0:
[C]: in function 'require'
/usr/local/openresty/nginx/../admin/ab_action.lua:1: in function </usr/local/openresty/nginx/../admin/ab_action.lua:1>, client: 10.135.192.59, server: localhost, request: "GET /ab_admin HTTP/1.1", host: "10.137.86.126:8020"
Hi:
我按照片你们给的的demo来试用了,我安装tengine-2.1.0 redis-2.8.19 lua版本如下:
lua-lpeg-0.9-3.el6.x86_64
lua-5.1.4-4.1.el6.x86_64
lua-devel-5.1.4-4.1.el6.x86_64
lua-json-1.3.2-2.el6.noarch
lua-jit版本是LuaJIT-2.0.4
我git你们给出的demo 然后运行 # /usr/local/nginx/sbin/nginx -p pwd
-c conf/nginx.conf
发现在一些问题:
a.nginx: [emerg] unknown directive "set_real_ip_from" in /opt/ABTestingGateway/utils/conf/nginx.conf:26
b.nginx: [emerg] unknown directive "real_ip_header" in /opt/ABTestingGateway/utils/conf/nginx.conf:27
c.nginx: [alert] lua_code_cache is off; this will hurt performance in /opt/ABTestingGateway/utils/conf/nginx.conf:56
d.nginx: [emerg] unknown "request_uid" variable
前面三个我把选项注释之后,不会再报错,但是最后一个request_uid这个参数在Nginx的变量中是没有的。现在很想知道这个变量代表的是什么意思,如何配置正常,才能启动?
再者,把这个参数去掉之后,可以正常启动,我找不到如何进入到后台?
我看了下代码,被绕蒙圈了,可不可以介绍得再详细点啊?或者麻烦出一个二次开发说明文档呗。
set $backend 'default_upstream'';
后面多了个单引号
请问现在这个系统是通过header来提取特征码的,例如uid那些
如果要改成用url参数的形式可以吗?
比如我需要同时设定不同的分流策略,如按照uid分流和按照ip分流,管理接口该如何设置?
对应的,如果能够同时设定不同的分流策略,我需要单独移除其中某个策略,该如何操作?我看runtime/del接口不能指定策略id,只能全部清除。
现在demo上是一个分流条件,例如:根据uid分流,根据iprange分流,根据city分流 等等,
现在我想做成 多个分流条件,例如按照uid 和 iprange 两个或多个条件来分流到一个beta机器。
还有个问题 如果upstream 分流到一个集群,而不是某台beta机器,如何做动态配置?如何处理呢 ?有相关的lua库吗?
请求任何接口都返回404,日志里提示
cannot open /path/to/ABTestingGateway-master/utils/../admin/ab_action.lua: Permission denied
现在都是root用户了怎么还会这样,权限也改成777了
-rwxrwxrwx 1 root root 2681 May 11 15:54 ab_action.lua
-rwxrwxrwx 1 root root 2303 May 11 15:54 action.lua
-rwxrwxrwx 1 root root 7857 May 11 15:54 policygroup.lua
-rwxrwxrwx 1 root root 6093 May 11 15:54 policy.lua
-rwxrwxrwx 1 root root 7173 May 11 15:54 runtime.lua
我在启动管理后台,
/usr/local/nginx/sbin/nginx -p pwd
-c conf/vhost.conf
提示这个:
nginx: [emerg] "lua_shared_dict" directive is not allowed here in /usr/local/dygateway/utils/conf/vhost.conf:1
是因为版本不对吗?
如果有计划的话,什么时候可以开源?
A服务器启动灰度系统,B服务器启动‘appServer’ 如果在策略中进行定义,才能分流
我用的是golang开发的后端服务器,现在实例里面都是通过 curl 请求的测试是可以通过的,但是不知道怎么添加自定义的请求头?
有什么方法可以为网页添加自定义的请求头?
Hello, Due
我看了你们的项目,觉得非常的酷,新浪的技术确实闻名于业界;
我自己也有一个和灰度发布有关的项目(中间件)Regal,有时间的话,可以交流一下
请教下abtesting.utils.sema具有什么比较大的优势,我看abtest 使用大量的锁操作,以及需要读取redis数据,会不会对性能有比较大的影响,是否考虑到cache 就可以避免这样的问题?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.