内容雪花算法介绍雪花算法优缺点雪花算法原理代码实现雪花算法介绍。自然界中雪花形成的过程中,会形成不同的结构分支,所以不会有两片完全相同的雪花,也就是说生成的id就像雪花一样独一无二。SnowflakeAlgorithm,最初是Twitter内部使用的分布式环境下唯一的分布式ID生成算法。Snowflake算法优缺点Snowflake算法至少有以下四个优点:1.系统环境ID不重复,满足高并发分布式系统环境ID不重复的要求,比如数据库表的ID生成众所周知的分布式场景。2、生成效率高在高并发和分布式环境下,除了生成唯一id外,每秒可生成百万个唯一id,生成效率极高。3.保证基本有序递增基于时间戳可以保证基本有序递增,这是很多业务场景的需求。4.不依赖第三方库。它不依赖于第三方库或中间件。算法简单,在内存中执行。雪花算法有一个比较大的缺点:它依赖于服务器时间,服务器时钟回调时可能会产生重复的id。Snowflake算法原理Snowflake算法的详细构造如下图所示:Snowflake算法的原理是生成一个唯一的64位long类型的id,主要分为以下四个部分:1)1位是reserved(基本不用)1位标识:由于long基本类型在Java中是带符号的,最高位是符号位,正数为0,负数为1,所以id一般为正数,并且最高位为0,所以第一位为0。2)41位时间戳后面的41位存放的是毫秒级别的时间戳,41位可以表示2^41-1毫秒的值,转换为换算成一个单位年:(2^41?1)/(1000*60*60*24*365)=69年。41位时间戳:也就是说这个时间戳可以使用69年不重复,大概可以使用69年。注意:41位时间间隔不是存储当前时间的时间间隔,而是存储时间间隔“当前时间间隔-起始时间间隔”之差得到的值。这里的开始时间一般是我们的id生成器开始使用的时间,由我们的程序指定。一般设置后不要更改,切记!!!因为,雪花算法有以下缺点:它依赖于服务器时间,服务器时钟回调时可能会产生重复的id。3)1024个节点可以部署10位机器和10位数据机器位,包括5位datacenterId和5位workerId,最多可以部署2^10=1024台机器。这里5位可以表示的最大正整数是2^5?1=31,即0,1,2,3,...31这32个数可以用来表示不同的datecenterId或workerId。4)12位序号用于记录同一毫秒内产生的不同ID,12位计数序号支持每个节点每毫秒产生4096个ID序号(同一台机器,同一时间切入)。理论上,雪花算法方案的QPS约为409.6w/s。这种分发方式可以保证任意一个IDC中任意一台机器产生的任意一个ID在任意毫秒内都不相同。作者简介陈睿|mikechen,10年+大厂架构经验,《mikechen的互联网架构》系列文章作者,专注于互联网架构技术。阅读更多关于mikechen的InternetArchitectureJavaConcurrency的技术文章|虚拟机|数据库|春天|雷迪斯|分布式|高并发
