上面的三种方法总的来说是基于自增思想的,而接下来就介绍比较著名的雪花算法-snowflake。

我们可以换个角度来对分布式ID进行思考,只要能让负责生成分布式ID的每台机器在每毫秒内生成不一样的ID就行了。
snowflake是twitter开源的分布式ID生成算法,是一种算法,所以它和上面的三种生成分布式ID机制不太一样,它不依赖数据库。

核心思想是:分布式ID固定是一个long型的数字,一个long型占8个字节,也就是64个bit,原始snowflake算法中对于bit的分配如下图:

第一个bit位是标识部分,在java中由于long的最高位是符号位,正数是0,负数是1,一般生成的ID为正数,所以固定为0。
时间戳部分占41bit,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),这样可以使产生的ID从更小值开始;41位的时间戳可以使用69年,(1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69年
工作机器id占10bit,这里比较灵活,比如,可以使用前5位作为数据中心机房标识,后5位作为单机房机器标识,可以部署1024个节点。
序列号部分占12bit,支持同一毫秒内同一个节点可以生成4096个ID
根据这个算法的逻辑,只需要将这个算法用Java语言实现出来,封装为一个工具方法,那么各个业务应用可以直接使用该工具方法来获取分布式ID,只需保证每个业务应用有自己的工作机器id即可,而不需要单独去搭建一个获取分布式ID的应用。

snowflake算法实现起来并不难,提供一个github上用java实现的:链接GitHub - beyondfengyu/SnowFlake: Twitter的雪花算法SnowFlake,使用Java语言实现。

在大厂里,其实并没有直接使用snowflake,而是进行了改造,因为snowflake算法中最难实践的就是工作机器id,原始的snowflake算法需要人工去为每台机器去指定一个机器id,并配置在某个地方从而让snowflake从此处获取机器id。

分布式ID-雪花算法相关推荐

  1. 分布式ID——雪花算法

    背景 随着现在业务量的越来越大,数据库的划分也变的越来越细,分库分表的理念也渐渐的落地,自增主键或者序列之类的主键id生成方式已经不再满足需求,所以分布式ID的生成就应运而生,总的来说就是生成规则更加 ...

  2. 分布式ID雪花算法-解析

    SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用.二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所以这个最高位固定是0 41位,用来记录时 ...

  3. 理解分布式id生成算法--雪花算法(SnowFlake)

    分布式ID生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 注: 1B就是1个字节. Byte.KB.B.MB.GB之间的关系是: Bit--比特 : B --字节:KB-- ...

  4. python雪花算法生成id_理解分布式id生成算法SnowFlake

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 概述 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用.二进制中最高位 ...

  5. 分布式ID生成算法——leaf算法

    leaf是美团在雪花算法的基础上提出的一种分布式ID生成算法,它具有全局唯一.高可用.高并发.低延迟.接入简单(http或公司内rpc)的优点. Twitter:世界上不存在两片一样的雪花. 美团:世 ...

  6. 美团技术分享:深度解密美团的分布式ID生成算法

    本文来自美团技术团队"照东"的分享,原题<Leaf--美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息I ...

  7. java怎样生成32位全是整形的主键_你肯定会需要的分布式Id生成算法雪花算法(Java)...

    最近公司正好在做数据库迁移从oracle到mysql,因为之前oracle主键是使用的 SYS_GUID() 这个oracle提供的函数来生成全球唯一的标识符(原始值)由16个字节组成. 不过由于my ...

  8. 存数据返回他的序列号id_雪花般的分布式唯一ID雪花算法

    点击上方 Java老铁,并选择 设为星标 优质文章和资料会及时送达 导读:唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID的方案有很多,常见的方式大概有以下三种 依赖数据库,使用如MySQL自 ...

  9. 【分布式ID】键高并发 分布式 全局唯一 ID 雪花算法 snowflake

    文章目录 1.概述 2.为什么 3.要求 3.1 软件要求 3.2 机器要求 4.区别 4.1 UUID 4.2 MySQL数据库自增ID 4.3 Redis数据库自增ID 5. 雪花算法 5.1 核 ...

  10. java不规则算法_分布式id生成算法 snowflake 详解

    背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在支付流水号.订单号等,随者业务数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足需 ...

最新文章

  1. C#内容分页简单实现代码及祥解
  2. Shadow of Survival
  3. 数组shift方法_数组shift()方法以及JavaScript中的示例
  4. aws emr 大数据分析_DataOps —使用AWS Lambda和Amazon EMR的全自动,低成本数据管道
  5. 写完程序 看 蜡笔小新 的有木有
  6. 字节回应阿里涉侵犯男员工曾面试并通过一面;HarmonyOS 2.0用户数升至5000万|极客头条...
  7. oracle sql 字段行转列
  8. 20145235李涛《网络对抗》Exp8 Web基础
  9. 百度文档免费下载+PDF转word
  10. html5广告拦截器识别代码做提示(本站内容无法显示)
  11. 亲爱的,别把上帝缩小了 ---- 读书笔记3
  12. 量化框架backtrader之一文读懂可视化
  13. S4不得不知道的SQL查询工具DB01
  14. 计算机科学与技术考研报名属于哪一类,计算机考研属于13大门类的哪一类
  15. SQL更改表名,数据库名,字段名
  16. 第三方登陆——QQ登陆详解
  17. 在Windows上配置Maven环境
  18. swift——一些有用的小Tips
  19. Maven 环境踩坑及完整配置
  20. 【经验分享】GPU 显存不足怎么办?

热门文章

  1. flash、div、iframe的层级
  2. Oracle有使用某个索引吗?(如何监控)
  3. 全局容器的创建和使用---单件模式和IOC的容器的应用
  4. 新媒体技术发展迅猛 手机将让生活产生巨变(转)
  5. Git学习笔记—Git Flow
  6. JDBC操作oracle
  7. POJ 3040 Allowance【贪心】
  8. 8758:2的幂次方表示
  9. UVa 11027 - Palindromic Permutation 回文串,组合加搜索
  10. sharepoint部件webparth关闭找回的方法