比雪花算法更好用的ID生成算法(单机或分布式唯一ID)

转载及版权声明

本人从未在博客园之外的网站,发表过本算法长文,其它网站所现文章,均属他人拷贝之作。

所有拷贝之作,均须保留项目开源链接,否则禁止转载。

拷贝之作,内容难免过期,当前页面才有最新内容。

算法介绍

一个全新的雪花漂移算法,生成的ID更短、速度更快。

核心在于缩短ID长度的同时,具有极高瞬时并发处理量(保守值 50W/0.1s)。

原生支持 C#/Java/Go/Rust/C 等语言,并由 Rust 提供 PHP、Python、Node.js、Ruby 等语言多线程安全调用库(FFI)。如果你的应用有语言开发,基于本算法提供的逻辑实现,集成会更简单,逻辑会更一致。

支持 k8s 等容器化部署,自动注册 WorkerId。

可在单机或分布式环境中生成唯一ID。

技术支持

开源地址1:https://gitee.com/yitter/idgenerator

开源地址2:https://github.com/yitter/idgenerator

QQ群:646049993

需求来源

作为架构设计的你,想要解决数据库主键唯一的问题,特别是在分布式系统多数据库的时候。

你希望这个主键是用最少的存储空间,索引速度更快,Select、Insert 和 Update 更迅速。

你要考虑在分库分表(合库合表)时,主键值可直接使用,并能反映业务时序。

如果这样的主键值太长,超过前端 JS Number 类型最大值,须把 Long 型转换为 String 型,你会觉得有点沮丧。

尽管 Guid 能自增,但占用空间大,索引速度慢,你也不想用它。

应用实例可能超过50个,每个并发请求可达10W/s。

在容器环境部署应用(水平扩展、自动伸缩)。

不想依赖 redis 的自增操作。

你希望系统运行 100 年以上。

传统算法问题

生成的ID太长。

瞬时并发量不够。

不能解决时间回拨问题。

不支持后补生成前序ID。

依赖外部存储系统。

新算法特点

整形数字,随时间单调递增(不一定连续),长度更短,用50年都不会超过 js Number类型最大值。(默认配置 WorkerId 是6bit,自增数是6bit)

速度更快,是传统雪花算法的2-5倍,0.1秒可生成50万个。(i7笔记本,默认算法配置6bit+6bit)

支持时间回拨处理。比如服务器时间回拨1秒,本算法能自动适应生成临界时间的唯一ID。

支持手工插入新ID。当业务需要在历史时间生成新ID时,用本算法的预留位能生成5000个每秒。

漂移时能外发通知事件。让调用方确切知道算法漂移记录,Log并发调用量。

不依赖任何外部缓存和数据库。(k8s环境下自动注册 WorkerId 的动态库依赖 redis)

基础功能,开箱即用,无需配置文件、数据库连接等。

性能数据

(参数:10位自增序列,1000次漂移最大值)

连续请求量 5K 5W 50W
传统雪花算法 0.0045s 0.053s 0.556s
雪花漂移算法 0.0015s 0.012s 0.113s

效果

开源一个比雪花算法更好用的ID生成算法(雪花漂移)的更多相关文章

  1. 分布式唯一ID生成算法-雪花算法

    在我们的工作中,数据库某些表的字段会用到唯一的,趋势递增的订单编号,我们将介绍两种方法,一种是传统的采用随机数生成的方式,另外一种是采用当前比较流行的“分布式唯一ID生成算法-雪花算法”来实现. 一. ...

  2. 数据库分表分区后的ID生成之雪花生成

    转自https://www.cnblogs.com/jajian/p/11101213.html 传统的单体架构的时候,我们基本是单库然后业务单表的结构.每个业务表的ID一般我们都是从1增,通过AUT ...

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

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

  4. 分布式系统的唯一id生成算法你了解吗?

    在分库分表之后你必然要面对的一个问题,就是id咋生成? 因为要是一个表分成多个表之后,每个表的id都是从1开始累加自增长,那肯定不对啊. 举个例子,你的订单表拆分为了1024张订单表,每个表的id都从 ...

  5. 理解分布式id生成算法SnowFlake

    理解分布式id生成算法SnowFlake https://segmentfault.com/a/1190000011282426#articleHeader2 分布式id生成算法的有很多种,Twitt ...

  6. 分布式全局不重复ID生成算法

    分布式全局不重复ID生成算法 算法全局id唯一id  在分布式系统中经常会使用到生成全局唯一不重复ID的情况.本篇博客介绍生成的一些方法. 常见的一些方式: 1.通过DB做全局自增操作 优点:简单.高 ...

  7. 分布式 ID 生成算法 — SnowFlake

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

  8. 唯一ID生成算法剖析

    https://mp.weixin.qq.com/s/E3PGP6FDBFUcghYfpe6vsg 唯一ID生成算法剖析 原创 cloudoxou 腾讯技术工程 2019-10-08    

  9. java 分布式id生成算法

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

随机推荐

  1. React render twice bug

    React render twice bug React bug constructor render twice bug update render twice bug StrictMode htt ...

  2. npx & yarn & npm

    npx & yarn & npm React Redux App https://reactjs.org/ https://github.com/facebook/create-rea ...

  3. push notifications

    push notifications https://developers.google.com/web/fundamentals/push-notifications/ Push API https ...

  4. 教你玩转CSS Position(定位)

    CSS Position(定位) position 属性指定了元素的定位类型. position 属性的五个值: static relative fixed absolute sticky 元素可以使 ...

  5. servlet内置对象(传递数据)

    一个servlet向另一个servlet发送数据,可以将数据放置在一个容器中(io.数据库.servlet的内置对象),servlet的内置对象成本最小. 一共有三个内置对象. 名字 类型 reque ...

  6. 图文详解:Kafka到底有哪些秘密让我对它情有独钟呢?

  7. 谈一下HashMap的底层原理是什么?

    底层原理:Map + 无序 + 键唯一 + 哈希表 (数组+Entry)+ 存取值 1.HashMap是Map接口的实现类.实现HashMap对数据的操作,允许有一个null键,多个null值. Co ...

  8. Mysql训练:where后不可以进行聚合函数的判断,而having可以进行聚合函数的判断

    力扣题目:查找重复的电子邮箱 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. +----+---------+ | Id | Email | +----+---------+ | ...

  9. Guava - LoadingCache实现Java本地缓存

    前言 Guava是Google开源出来的一套工具库.其中提供的cache模块非常方便,是一种与ConcurrentMap相似的缓存Map. 官方地址:https://github.com/google ...

  10. XSS跨站脚本攻击(1)

    将跨站脚本攻击缩写为XSS,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面的时候,嵌入其中的Web里面的Script代码就会被执行,从而达到恶意攻击用户的目的. 反射型XSS 反射 ...