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

分佈式

相關文章
相關標籤/搜索