什么是雪花算法:
SnowFlake是Twitter公司采用的一种算法,目的是在分布式系统中产生全局唯一且趋势递增的ID
具有的特点:
雪花算法在分布式架构很常见,他的分布式id具有的特点:
1.全局唯一性:不能出现有重复的ID标识
2.递增性:确保生成ID对于用户或业务是递增的
3.高可用性:确保任何时候都能生成正确的ID
4.高性能性:在高并发的环境下依然表现良好
原理:
雪花算法是将一个64位的整数分成三个部分:
1.41个比特位表示生成ID时的时间戳(精确到毫秒),所以理论上可以使用69年。
2.10个比特位表示当前机器的编号,所以理论上可以支持1024台机器。
3.12个比特位表示当前时间戳下已生成的雪花ID数量,所以理论上一毫秒内可以产生4096个不同的ID。

php实现代码
public static function createID(){
//假设一个机器id
$machineId = 1234567890;
//41bit timestamp(毫秒)
$time = floor(microtime(true) * 1000);
//0bit 未使用
$suffix = 0;
//datacenterId 添加数据的时间
$base = decbin(pow(2,40) - 1 + $time);
//workerId 机器ID
$machineid = decbin(pow(2,9) - 1 + $machineId);
//毫秒类的计数
$random = mt_rand(1, pow(2,11)-1);
$random = decbin(pow(2,11)-1 + $random);
//拼装所有数据
$base64 = $suffix.$base.$machineid.$random;
//将二进制转换int
$base64 = bindec($base64);
$id = sprintf('%.0f', $base64);
return $id;
}