快速:根据路径参数路由n%的流量

时间:2019-05-31 19:13:08

标签: routing load-balancing varnish-vcl fastly fastly-vcl

当我不想全面推出一项新功能时,要做一个有趣的任务。 我只想将流量百分比(基于路径参数)路由到新端点。

我想基于“ specialPathParam”来计算百分比: ourservice.com/one/'specialPathParam'/something。

因此,如果我们要将50%路由到新端点:

如果有2个请求 ourservice.com/one/'specialPathParamOne'/something ourservice.com/one/'specialPathParamTwo'/something,

一个带有“ specialPathParamOne”的请求应转到新端点 另一个带有“ specialPathParamTwo”的标记应转到旧的标记。

试图找到一种以某种方式在VCL中实现它的方法...

这里有任何提示和技巧吗? 非常感谢!

1 个答案:

答案 0 :(得分:1)

实际上,我在Fastly支持论坛上收到了答案: https://support.fastly.com/hc/en-us/community/posts/360045757132-Route-n-of-traffic-based-on-a-path-param

在这里写我的解决方案:

我只需要计算'$ {specialPathParam}'的百分比,这个'$ {specialPathParam}'可以是任何... 因此,我必须随机分配“ $ {specialPathParams}”周围的请求,该请求实际上看起来像是带有种子参数的randombool:

另一个函数randombool_seeded()需要一个附加的seed参数。 给定种子的结果将始终相同。 https://docs.fastly.com/vcl/randomness/

所以看起来我需要以下东西:

  

if(randombool_seeded(X,100,std.atoi('$ {specialPathParam}')))){
  设置req.backend = F_origin_0; } else {set req.backend = F_origin_1;   }

并且不需要标题。

因此,X%的流量将流向后端1,而具有相同“ $ {specialPathParam}”值的请求将流向相同的后端。