雪花算法

港控/mmm° 2022-12-16 06:19 226阅读 0赞

雪花算法生成的ID可用于做分布式系统ID

生成的ID格式 1位标识符(始终是0)+41位时间戳 + 10位机器标识符(5位datacenterId+5位WorkId) +12位序列

41位时间戳=当前时间截 - 开始时间截,这里的的开始时间截,是我们的id生成器开始使用的时间,由程序指定的

机器标识符就是分布式系统中每台机的标识ID

优点:64位二进制转成十进制是19位 长度短 且根据算法生成,可以反推

缺点:因为算法中有时间戳,所以如果机器时钟回拨,有可能ID重复

反推:我可以在10位机器标识符那里,用5位做机房ID,5位做机器ID

比如说生成的ID中那10位机器标识符是这样:0010100001 我取前5位(00101),转成10进制得到5,那我就知道对应的机房ID为5

再取后5位(00001),转成10进制得到1,那我就知道对应的机器 ID是1

雪花算法拥有两个变量datacenterId和workerId

snowflake通过这两个变量来实现分布式系统下每个服务生成不重复的ID, 但是这两个变量取值必须在 1 - 31之间(包括)

也就是snowflake最多只能支持31*31=961个节点同时使用,且每个节点的datacenterId和workerId不能重复

5位(bit)可以表示的最大正整数是 2^{5}-1 = 31 ,即可以用 0、1、2、3、….31 这 32 个数字,来表示不同的 datecenterId 或 workerId

这就是它比UUID好的地方 长度短而且可以反推

SnowFlake可以保证:

  1. 同一台服务器所有生成的id按时间趋势递增
  2. 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分)

雪花算法主键重复有两个可能(总结)

1.时钟回拨,解决方案,停止服务器的时钟自动同步

2.datecenterId和workdId在各服务中都是一样的值,导致主键重复,各服务的这两个变量不要重复

发表评论

表情:
评论列表 (有 0 条评论,226人围观)

还没有评论,来说两句吧...

相关阅读

    相关 雪花算法Snowflake

    Snowflake ,雪花算法是由Twitter开源的分布式ID生成算法 ,以划分命名空间的方式将 64-bit位分割成多个部分 ,每个部分代表不同的含义。而 Java中64b

    相关 算法------雪花算法简介

    算法------雪花算法 数据库扩展的主要方式:业务分库,主从复制(实现读写分离)、数据库分表 数据库分表: 将不同业务数据分散存储到不同的数据库服务器,能够支撑

    相关 雪花算法详解

    1. 雪花算法概念 雪花算法(Snowflake)是一种生成唯一ID的算法,主要应用于分布式系统中。它可以在不依赖于数据库等其他存储设施的情况下,生成全局唯一的ID。

    相关 雪花算法问题

    时间回拨问题 我们在部署服务器的时候是集群的,集群的时候有一个时间同步服务器,也就是说ABCD这几台服务器同步同一台 叫做E的服务器,E服务器会与网络的时间同步。简单的说,

    相关 雪花算法

    雪花算法生成的ID可用于做分布式系统ID 生成的ID格式 1位标识符(始终是0)+41位时间戳 + 10位机器标识符(5位datacenterId+5位WorkId) +12

    相关 雪花算法

    我们都知道在一个分布式系统中生成一个无重复的标识是非常重要的,业界也有很多算法。 雪花(snowflake)在自然界中,是极具独特美丽,又变幻莫测的东西: 1. 雪花属于

    相关 雪花算法

    雪花算法 `雪花算法`的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。 结构: ![在这里插入图片描述][watermark_type