面试中关于分布式的问题很多.(分布式事务, 基本理论 CAP,BASE, 分布式锁) 先来一个简单的.
简单说一下分布式 ID 的设计方案?
首先要明确在分布式环境下, 分布式 id 的基本要求.
1, 全局唯一, 在分布式集群下, 不同的节点并发生成的分布式 id 要唯一;
2, 顺序性, 分布式 id 是有序生成
然后给出分布式 id 的设计方案.
1, 基于数据的自增 id 生成分布式 ID, 使用比较简单, 缺点是扩展性和可靠性有限; 基于数据库表的自增 id
2, 基于 算法生成;
snowflake 生成的分布式 id 是一个 64 位整数; 位数标识如下:
1 标识正负
41 位, 一般使用 System.currentTimeMilles() 得到;
5 数据中心标识
5 机器 ip 标识
12 单位毫秒内可以生成的序数极限
snowflake 的生成跟时间相关的使用的是 System.currentTimeMilles(), 跟冬令时没有关系.
分布式 id 的进一步要求
可靠性: 即高可用
紧凑性: 64 位的整数比较长, 不太紧凑, 作为索引, 存储不占优势.
有意义: 可以放入业务标识或者时间
snowflake 的缺点
受时间影响: 需要保证分布式集群的时间同步, 即 NTP ;
可以预测到: 容易按照时间规律预测到, 进而影响安全性;
小结
回答了分布式 id 的基本要求, 已经常用方案.
来源: https://www.cnblogs.com/snidget/p/12649844.html