唯一标识UUID

概述

UUID的出现,是为了让分布式系统可以不借助中心节点,就可以生成唯一标识来识别一些信息;

GUID跟UUID是同一个东西,只是来源于微软。


版本

UUID经过了多个版本的演化,每个版本的算法都不同。


版本1:基于时间的UUID

通过高精度时间戳、机器MAC地址生成;由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,它暴露了电脑的MAC地址和生成这个UUID的时间,而且可以被推测,这也是这个版本的UUID被诟病的地方。

注意:使用这个版本生成UUID时,不能在同一台机器上同一时间使用多个线程或进程生成,否则可能会重复。同时由于虚拟机、容器等虚拟环境的出现,也使得机器MAC地址不再唯一,导致这个版本UUID重复的概率大量激增。


版本2:DCE安全的UUID

DCE安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。

不过,在UUID的规范里面没有明确地指定,所以基本上所有的UUID实现都不会实现这个版本。


版本3:基于名字空间的UUID(MD5)

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。


版本4:基于随机数的UUID

根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的(百万分之一),这个版本是被应用最多的版本;


版本5:基于名字的UUID(SHA1)

和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。


推荐使用版本1版本4,对于暴露MAC地址不敏感的场景可以使用版本1



PHP UUID库:https://github.com/ramsey/uuid

Node.js UUID库:https://github.com/uuidjs/uuid


常见的UUID库:https://github.com/search?o=desc&q=uuid&s=stars&type=Repositories




举报

© 著作权归作者所有


1