UUID详解,uuid在线生成

 

看这篇文章前能够先直接在线生成一个uuid,预览一下,html

http://www.uuid.online/算法

 

 

UUID是什么?

UUID(Universally Unique Identifier)全局惟一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的全部机器都是惟一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由如下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,若是你在生成一个UUID以后,过几秒又生成一个UUID,则第一个部分不一样,其他相同),时钟序列,全局惟一的IEEE机器识别号(若是有网卡,从网卡得到,没有网卡以其余方式得到),UUID的惟一缺陷在于生成的结果串会比较长

A universally unique identifier (UUID) is an identifier standard used in software construction, standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE). The intent of UUIDs is to enable distributed systems to uniquely identify information without significant central coordination. In this context the word unique should be taken to mean "practically unique" rather than "guaranteed unique". Since the identifiers have a finite size it is possible for two differing items to share the same identifier. The identifier size and generation process need to be selected so as to make this sufficiently improbable in practice. Anyone can create a UUID and use it to identify something with reasonable confidence that the same identifier will never be unintentionally created by anyone to identify something else. Information labeled with UUIDs can therefore be later combined into a single database without needing to resolve name conflicts.

A UUID is 128 bits long, and can guarantee uniqueness across space and time.  UUIDs were originally used in the Apollo Network Computing System and later in the Open Software Foundation's (OSF) Distributed Computing Environment (DCE), and then in Microsoft Windows platforms.

 上面说的到在grub中写到的UUID的的好处是什么呢?

这样作和使用/dev/sda5这种直接引用分区的方法的一个优势就是,当硬盘中增长了新的分区,或者分区的顺序改变后,仍然可以保证系统加载分区到正确的加载点。

这对于swap分区尤其重要,若是硬盘分区顺序改变,而fstab对swap分区编号作响应的调整,是否是会把其余分区给做为swap哪?结果是很可怕的,这个分区上的数据恐怕就要不保了。经过在/dev/disk/uuid,这里的uuid列表其实是一些symbol link文件,系统能够保证针对每个分区生成一个惟一的编码,增长了系统的稳定性。


UUID具备如下涵义:

    经由必定的算法机器生成
为了保证UUID的惟一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUID的算法。UUID的复杂特性在保证了其惟一性的同时,意味着只能由计算机生成。

    非人工指定,非人工识别
UUID是不能人工指定的,除非你冒着UUID重复的风险。UUID的复杂性决定了“通常人“不能直接从一个UUID知道哪一个对象和它关联。

    在特定的范围内重复的可能性极小
UUID的生成规范定义的算法主要目的就是要保证其惟一性。但这个惟一性是有限的,只在特定的范围内才能获得保证,这和UUID的类型有关(参见UUID的版本)。

UUID是16字节128位长的数字,一般以36字节的字符串表示,示例以下:

3F2504E0-4F89-11D3-9A0C-0305E82C3301

其中的字母是16进制表示,大小写无关
GUID(Globally Unique Identifier)是UUID的别名;但在实际应用中,GUID一般是指微软实现的UUID。

UUID的版本

UUID具备多个版本,每一个版本的算法不一样,应用范围也不一样。
首先是一个特例--Nil UUID--一般咱们不会用到它,它是由全为0的数字组成,以下:
00000000-0000-0000-0000-000000000000

UUID Version 1:基于时间的UUID
基于时间的UUID经过计算当前时间戳、随机数和机器MAC地址获得。因为在算法中使用了MAC地址,这个版本的UUID能够保证在全球范围的惟一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。若是应用只是在局域网中使用,也可使用退化的算法,以IP地址来代替MAC地址--Java的UUID每每是这样实现的(固然也考虑了获取MAC的难度)。

UUID Version 2:DCE安全的UUID
DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

UUID Version 3:基于名字的UUID(MD5)
基于名字的UUID经过计算名字和名字空间的MD5散列值获得。这个版本的UUID保证了:相同名字空间中不一样名字生成的UUID的惟一性;不一样名字空间中的UUID的惟一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID
根据随机数,或者伪随机数生成UUID。这种UUID产生重复的几率是能够计算出来的,但随机的东西就像是买彩票:你期望它发财是不可能的,但狗屎运一般会在不经意中到来。

UUID Version 5:基于名字的UUID(SHA1)
和版本3的UUID算法相似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法。

UUID的应用

从UUID的不一样版本能够看出,Version 1/2适合应用于分布式计算环境下,具备高度的惟一性;Version 3/5适合于必定范围内名字惟一,且须要或可能会重复生成UUID的环境下;至于Version 4,我我的的建议是最好不用(虽然它是最简单最方便的)。
一般咱们建议使用UUID来标识对象或持久化数据,但如下状况最好不使用UUID:
    映射类型的对象。好比只有代码及名称的代码表。
    人工维护的非系统生成对象。好比系统中的部分基础数据。
对于具备名称不可重复的天然特性的对象,最好使用Version 3/5的UUID。好比系统中的用户。若是用户的UUID是Version 1的,若是你不当心删除了再重建用户,你会发现人仍是那我的,用户已经不是那个用户了。(虽然标记为删除状态也是一种解决方案,但会带来实现上的复杂性。)安全

转载http://blog.chinaunix.net/uid-26495963-id-3150576.html

分布式

相关文章
相关标签/搜索