58. 流量切分

前不久接到一个需求,新接入一个保险公司,一开始只需要切入20%的流量。一时半会还想不出来有什么好的办法。

其实每个学过编程的人都或多或少接触过这些东西,最常见的莫过于nginx负载均衡了。切分流量也是类似的道理,就跟分库分表一样,就是一种计算规则,将一个用户定位到一个区间上。当让要考虑到正态分布,使其尽可能平均,不要造成一个区间数量过于太大即可。

这次我们采取的方式就是,由于产品是在一个域中,就考虑到用用户的标识COOKIE来处理,当用户未登陆时随机分配一个权值即可。用PHP的方式如下:

function flow()
{
    // 假如当前登陆用户的COOKIE为该值
    $_COOKIE['id'] = 'vW8ySjnxAeLF5cV5-bo4NeL94Mu1SzDMm3myEIdQktiHtW0G';
    if (isset($_COOKIE['id'])) {
        $length = strlen($_COOKIE['id']);
        $num = 0;
        for ($i = 0; $i < $length; $i++) {
            $num += ord($_COOKIE['id'][$i]);
        }
        return $num % 100;
    }
    return rand(1, 100);
}

echo "当前权重\n";
echo flow();
echo "\n";

计算结果为:

zhgxun-pro:php zhgxun$ php flow.php 
当前权重
2
zhgxun-pro:php zhgxun$

这样业务方就可以根据返回的数值进行后续操作了。