分布式ID的特点
全局唯一性
不能出现有重复的ID标识,这是基本要求。
递增性
确保生成ID对于用户或业务是递增的。
高可用性
确保任何时候都能生成正确的ID。
高性能性
在高并发的环境下依然表现良好。
分布式ID方案
唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID的方案有很多,常见的方式大概有以下三种:
依赖数据库,使用如MySQL自增列或Oracle序列等。对于数据敏感场景不宜使用,且不适合于分布式场景。读写分离时,只有主节点可以进行写操作,可能有单点故障的风险。分表分库,数据迁移合并等比较麻烦。
UUID随机数。采用无意义字符串,数据量增大时造成访问过慢,且不宜排序。
snowflake雪花算法,下面我们详细介绍。
雪花算法
SnowFlake是Twitter公司采用的一种算法,目的是在分布式系统中产生全局唯一且趋势递增的ID。
有这么一种说法,自然界中并不存在两片完全一样的雪花的。每一片雪花都拥有自己漂亮独特的形状、独一无二。雪花算法也表示生成的ID如雪花般独一无二。
SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图:
