一.分布式ID
在单体应用中,我们可以通过数据库的主键ID来生成唯一的ID,但是如果数据量变大,就需要进行分库分表,在分库分表之后,如何生成一个全局唯一的ID,就是一个关键的问题。
通常情况下,对于分布式ID来说,我们一般希望他具有以下几个特点:
·全局唯一:必须保证全局唯一性,这个是最基本的要求。
·高性能&高可用:需要保证ID的生成是稳定且高效的。
·递增:根据不同的业务情况,有的会要求生成的ID呈递增趋势,也有的要求必须单调递增(后一个ID必须比前一个大),也有的没有严格要求。
通常,在分布式ID的生成方案主要有以4下种:
. UUID
·数据库自增ID·号段模式
·基于Redis 实现·雪花算法
·第三方ID生成工具
二.每种方式的具体原理
i.UUID
UUID(Universally Unique ldentifier)全局唯一标识符,是指在一台机器上生成的数字。标准的UUID格式为: xXXXXX-xXXX-XXXX-XXX-xXXXXXXXXXxx(8-4-4-4-12),共36个字符,通常由以下几部分的组合而成:当前日期和时间,时钟序列,全局唯一的IEEE机器识别号,通常有32位16进制数字
优点:
1.它保证对在同一时空中的所有机器都是唯一的。
2.性能比较高,不依赖网络,本地就可以生成,使用起来也比较简单。
缺点:
1.长度过长和没有任何含义。
2.用UUID当做分布式ID,存在着不适合范围查询、不方便展示以及查询效率低等问题。
ii.数据库自增
分布式ID也可以使用数据库的自增ID。
优点:一个单库单表能保证ID自增且不重复
缺点:一旦这个数据库挂了,那整个分布式ID的生成服务