前不久接到一个需求,新接入一个保险公司,一开始只需要切入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$
这样业务方就可以根据返回的数值进行后续操作了。