美文网首页
生成全局唯一id的几种方式

生成全局唯一id的几种方式

作者: 田_9eea | 来源:发表于2020-02-09 16:05 被阅读0次

生成全局唯一id的几种方式:

1、uuid生成全球唯一id,生成方式简单粗暴,本地生成,没有网络开销,效率高;缺点长度较长,没有递增趋势性,不易维护,常用于生成token令牌。

2、mysql自带自增生成id,oracle可以用序列生成id,但在数据库集群环境下,扩展性不好。

3、基于redis单线程的特点生成全局唯一id,redis性能高。

生成id为当前日期(yyMMddHHmmss)+6位(从000000开始不足位数补0)

20200206164329000001

4、基于雪花算法snowflake 生成全局id,本地生成,没有网络开销,效率高

原理

Twitter的雪花算法SnowFlake。

SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔):

0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

1位标识部分,在java中由于long的最高位是符号位,正数是0,负数是1,一般生成的ID为正数,所以为0;

41位时间戳部分,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),

这样可以使产生的ID从更小值开始;41位的时间戳可以使用69年,(1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69年;

10位节点部分,Twitter实现中使用前5位作为数据中心标识,后5位作为机器标识,可以部署1024个节点;

12位序列号部分,支持同一毫秒内同一个节点可以生成4096个ID;

SnowFlake算法生成的ID大致上是按照时间递增的,用在分布式系统中时,需要注意数据中心标识和机器标识必须唯一,

这样就能保证每个节点生成的ID都是唯一的。或许我们不一定都需要像上面那样使用5位作为数据中心标识,5位作为机器标识,可以根据我们业务的需要,灵活分配节点部分,如:若不需要数据中心,完全可以使用全部10位作为机器标识;若数据中心不多,也可以只使用3位作为数据中心,7位作为机器标识。

snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。

5、 zookeeper通过创建顺序节点生成全局id,在高并发场景下,性能不能很好。(暂时未研究)

redis请参考

https://github.com/sentianhui/idglobal.git

相关文章

  • 生成全局唯一id的几种方式

    生成全局唯一id的几种方式: 1、uuid生成全球唯一id,生成方式简单粗暴,本地生成,没有网络开销,效率高;缺点...

  • Redis-全局唯一ID

    零、本文纲要 一、全局唯一ID 二、Redis生成全局唯一ID1、snowflake算法全局唯一ID策略2、Red...

  • 设计分布式唯一id生成

    1. 生成全局唯一id 什么时候需要生成全局唯一id db不帮你自动生成的时候。比如: db做了分库分表,没帮你自...

  • 分布式系统中生成全局唯一ID方案

    本文主要介绍在一个分布式系统中, 如何去生成全局唯一的 ID。 前言 单纯的生成全局ID并不是什么难题,生成全局的...

  • 全局唯一ID

    生成全局唯一ID 通过MySQL的自增主键,作为唯一id; 通过内存中变量AtomicLong的自增来得到唯一id...

  • 04.分布式系统的id生成方式

    分布式ID需要满足那些条件? 全局唯一:必须保证ID是全局性唯一的,基本要求高性能:高可用低延时,ID生成响应要块...

  • 分布式唯一ID生成方式与优化

    说到分布式ID大家都不陌生 一般来说有以下几种生成唯一ID的方式 1. UUID,最常见,实现方式是形式为8-4-...

  • 全局唯一ID生成策略

    Entrance 数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。 单纯的生成全局ID并不是什么难题,...

  • 分布式唯一Id(雪花算法),原理+对比+方案

    集群高并发情况下如何保证分布式唯一全局Id生成 为什么需要分布式全局唯一Id,以及分布式Id的业务需求 在复杂分布...

  • 如何生成全局唯一id

    为什么需要全局唯一id 在分布式架构下,经常有需求需要生成全局唯一id,比如优惠券等券码,或者分库分表,每个表都用...

网友评论

      本文标题:生成全局唯一id的几种方式

      本文链接:https://www.haomeiwen.com/subject/clqnxhtx.html