分布式惟一ID系列(2)——UUID适合作分布式ID吗

UUID的生成策略:

UUID的方式能生成一串惟一随机32位长度数据,它是无序的一串数据,按照开放软件基金会(OSF)制定的标准计算,UUID的生成用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。UUID的底层是由一组32位数的16进制数字构成,是故 UUID 理论上的总数为,约等于html

,也就是说若每纳秒产生1百万个 UUID,要花100亿年才会将全部 UUID 用完(100亿年啊,地球都没了),因此这足够咱们的使用了,也可以保证惟一性。java

UUID的格式:

UUID 的十六个八位字节被表示为 32个十六进制数字,以连字号分隔的五组来显示,形式为 8-4-4-4-12,总共有 36个字符(即三十二个英数字母和四个连字号)。例如:mysql

123e4567-e89b-12d3-a456-426655440000

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

上面的以数字 M开头的四位表示 UUID 版本,目前UUID的规范有5个版本,M可选值为1, 2, 3, 4, 5 ;各个版本的具体介绍以下所示:算法

version 1:0001。基于时间和 MAC 地址。因为使用了 MAC 地址,所以可以确保惟一性,可是同时也暴露了 MAC 地址,私密性不够好。
version 2:0010。DCE 安全的 UUID。该版本在规范中并无仔细说明,所以并无具体的实现。
version 3:0011。基于名字空间 (MD5)。用户指定一个名字空间和一个字符串,经过 MD5 散列,生成 UUID。字符串自己须要是惟一的。
version 4:0100。基于随机数。虽然是基于随机数,可是重复的可能性能够忽略不计,所以该版本也是被常用的版本。
version 5:0101。基于名字空间 (SHA1)。跟 Version 3 相似,可是散列函数编程了 SHA1。sql

上面以数字 N开头的四个位表示 UUID 变体( variant ),变体是为了能兼容过去的 UUID,以及应对将来的变化,目前已知的变体有以下几种,由于目前正在使用的 UUID 都是 variant1,因此取值只能是 8,9,a,b 中的一个(分别对应1000,1001,1010,1011)。数据库

variant 0:0xxx。为了向后兼容预留。
variant 1:10xx。当前正在使用的。
variant 2:11xx。为早期微软 GUID 预留。
variant 3:111x。为未来扩展预留。目前暂未使用。编程

Java实现UUID:

Java已经写好一个UUID类供咱们使用,以下所示segmentfault

package com.one.util;
import java.util.UUID;
public class Test {
    public static void main(String[] args) {
        String uuid= UUID.randomUUID().toString().replace("-", "").toLowerCase();
        System.out.println("UUID的值是:"+uuid);
    }
}

结果以下所示安全

UUID的值是:24e6f66b3dfb4aba8e3e3801d3327e08

UUID是否适合作分布式id:

若是需求是只保证惟一性,那么UUID也是可使用的,可是按照上面的分布式id的要求, UUID实际上是不能作成分布式id的,缘由以下:dom

  1. 首先分布式id通常都会做为主键,可是安装mysql官方推荐主键要尽可能越短越好,UUID每个都很长,因此不是很推荐
  2. 既然分布式id是主键,而后主键是包含索引的,而后mysql的索引是经过b+树来实现的,每一次新的UUID数据的插入,为了查询的优化,都会对索引底层的b+树进行修改,由于UUID数据是无序的,因此每一次UUID数据的插入都会对主键地城的b+树进行很大的修改,这一点很很差
  3. 信息不安全:基于MAC地址生成UUID的算法可能会形成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制做者位置。

那么UUID能够用到哪些方面呢

好比阿里云每一条短信发送的惟一id,这个是能够的,好比从阿里云官网截图所示:

看到这里的同窗,以为好的话就帮忙推荐下吧,Thanks♪(・ω・)ノ

原文连接

其余分布式ID系列快捷键:
分布式ID系列(1)——为何须要分布式ID以及分布式ID的业务需求
分布式ID系列(2)——UUID适合作分布式ID吗
分布式ID系列(3)——数据库自增ID机制适合作分布式ID吗
分布式ID系列(4)——Redis集群实现的分布式ID适合作分布式ID吗

大佬网址:

https://tech.meituan.com/2017/04/21/mt-leaf.html
http://www.javashuo.com/article/p-onzgjbbx-kr.html
https://www.jianshu.com/p/9d7ebe37215e
https://www.jianshu.com/p/da6dae36c290

相关文章
相关标签/搜索