Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Testing 是否可以在一个CNAME下的两个目标之间进行A/B测试?_Testing_Split_Cloudflare_Traffic_Cloudflare Workers - Fatal编程技术网

Testing 是否可以在一个CNAME下的两个目标之间进行A/B测试?

Testing 是否可以在一个CNAME下的两个目标之间进行A/B测试?,testing,split,cloudflare,traffic,cloudflare-workers,Testing,Split,Cloudflare,Traffic,Cloudflare Workers,是否可以在一个CNAME下的两个目标之间动态路由?我找不到Cloudflare workers或页面规则可以实现这一点的任何特定文档 在上下文中,我的团队正在尝试在两个部署的Heroku应用程序之间进行A/B测试,如“A-test.herokuapp.com”所示,这是控件,“B-test.herokuapp.com”是我们的B测试 我希望Cloudflare工作人员能够在封面下动态路由这两个目标,同时保持URL不变,例如app.domain.com 是否有人知道这是否可能,如果可能,是否有相

是否可以在一个CNAME下的两个目标之间动态路由?我找不到Cloudflare workers或页面规则可以实现这一点的任何特定文档

在上下文中,我的团队正在尝试在两个部署的Heroku应用程序之间进行A/B测试,如“A-test.herokuapp.com”所示,这是控件,“B-test.herokuapp.com”是我们的B测试

我希望Cloudflare工作人员能够在封面下动态路由这两个目标,同时保持URL不变,例如app.domain.com


是否有人知道这是否可能,如果可能,是否有相关文档?谢谢大家!

你可以和工人一起做。您的代码如下所示:

addEventListener(“获取”,事件=>{
event.respondWith(handleRequest(event.request))
})
异步函数handleRequest(请求){
让url=新url(request.url);
if(isInGroupA(请求)){
url.hostname=“a-test.herokuapp.com”;
}否则{
url.hostname=“b-test.herokuapp.com”;
}
返回获取(url、请求);
}
函数IsingGroupA(请求){
//在这里写下你在A和B之间选择的逻辑。。。
}

方法1:

因此,Cloudflare有一个使用工人的。此方法使用cookies实现您所需的功能。这将是大多数情况下的首选方法

函数handleRequest(请求){
const NAME=“实验-0”
//下面的响应是占位符。您可以为每个测试设置自定义路径(例如/control/somepath)。
const TEST_RESPONSE=new RESPONSE(“测试组”)//例如,wait fetch(“/TEST/sompath”,request)
const CONTROL_RESPONSE=new RESPONSE(“控制组”)//例如,wait fetch(“/CONTROL/sompath”,request)
//确定此请求者所在的组。
const cookie=request.headers.get(“cookie”)
if(cookie&&cookie.includes(`${NAME}=control`){
返回控制单元响应
}
else if(cookie&&cookie.includes(`${NAME}=test`){
返回测试响应
}
否则{
//如果没有cookie,这是一个新客户端。请选择一个组并设置cookie。
const group=Math.random()<0.5?“测试”:“控制”//50/50分割
常量响应=组==“控制”?控制响应:测试响应
append(“Set Cookie”,`${NAME}=${group};path=/`)
返回响应
}
}
addEventListener(“获取”,事件=>{
event.respondWith(handleRequest(event.request))
})
方法2:

另一种方法是使用。假设您有两个源服务器(A和B),并且在这两个服务器上都配置了一个域,则可以使用十进制百分比等效度量(0.1到1)将请求拆分到任一服务器。例如,您可能有40%的请求进入您的A环境,60%的流量进入您的B环境

方法3:


<>你也可以考虑,现在是免费的。同样,这取决于您的配置/设置,但隧道允许零ip设置。不需要在两个源服务器IP之间进行负载平衡,您只需要在使用隧道ID运行的隧道服务的一个或两个实例之间进行负载平衡。基本上,您可以使用负载平衡器设置进行隧道。

他们想检查以下答案是否令人满意,或者您是否还有其他问题。如果没有,请投票或标记为答案,以解决此问题。谢谢