分布式ID方案有哪些以及各自的优势

 1.    背景

在分布式系统中,经常需要对大量的数据、消息、http请求等进行唯一标识。例如:在分布式系统之间http请求需要唯一标识,调用链路分析的时候需要使用这个唯一标识。这个时候数据自增主键已经不能满足需求,需要一个能够生成全局唯一ID的系统,这个系统需要满足两个需求:

----全局唯一:不能出现重复ID

----高可用:ID生成系统是基础系统,被许多关键系统调用,一旦宕机,会造成严重影响

2.    经典方案介绍

1).    UUID

UUID是Universally Unique Identifier的缩写,它是在一定的范围内唯一的机器生成的标识符,UUID是16字节128位长的数字,通常以36字节的字符串表示,比如:3F2504E0-4F89-11D3-9A0C-0305E82C3301。

UUID通过一定的算法机器生成,为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间、随机或者伪随机数、时序等元素,以及这些元素生成UUID的算法。UUID的复杂特性保证了其唯一性。

优点:本地生成ID,不需要进行远程调用,时延低,性能高。

缺点:

1))    UUID过长,很多场景不适用,比如用UUID做数据库索引字段。

2))    没有排序,无法保证趋势递增

2).    Flicker方案

只要思路采用了MySQL自增长ID的机制,

#数据表
CREATE TABLE Tickets64(
id bigint(20) unsigned NOT NULL auto_increment,
stub char(1) NOT NULL default '',
PRIMARY KEY(id),
UNIQUE KEY stub(stub)
)ENGINE=MyISAM;


#使用下列SQL读写得到ID号
REPLACE INTO Tickets64 (stub) VALUES('a');
SELECT LAST_INSERT_ID();

 replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键或者唯-索引判断)则先删除此行数据,然后插入新的数据, 否则直接插入新数据。

3).    类snowflake方案

4).    TDDL序列生成方式

学习并转载自:https://blog.csdn.net/hl_java/article/details/78462283

猜你喜欢

转载自www.cnblogs.com/baxianhua/p/9888433.html
今日推荐