一、分布式ID发号器
要求很明确:不同机器同一时间生成不同ip;同一机器不同时间生成不同IP;
所以根据需求,可选变量有: 机器(网卡、IP)+时间,随机数
二、Why not UUID?
UUID的实现:算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID。
优势:保证唯一性;本地调用,不需要rpc
UUID的缺陷:
1.UUID较长,占用内存空间;往往用字符串表示,作为主键建立索引查询效率低,常见优化方案为“转化为两个uint64整数存储”或者“折半存储”(折半后不能保证唯一性)
2.不具有有序性,无法保证趋势递增
三、依赖DB自增可行么?
实现:自增+设定步长;8个服务节点8个实例(类似取模);
缺陷:
1.不利于服务节点扩充;服务节点固定,步长固定,难以进行水平服务节点的扩展。
2.依赖DB,对数据库造成额外压力
四.全局唯一ID生成器如何设计?考量因素有哪些
1.全局唯一;有序性(不一定连续,但趋势递增);可反解信息;
2.业务性能要求:高性能、高可用
3.接入方式:嵌入式、中心服务发布、rest发布模式
设计一 :ID数据结构
64位
1.机器