Node.js工程师养成计划完整无密内置文档资料

139 阅读2分钟

download:Node.js工程师养成计划完整无密内置文档资料

雪花算法Snowflake 百度uid-generator 美团Leaf 滴滴Tinyid 雪花算法 主要分为 4 个局部: 是 1 个 bit:0,这个是无意义的。 是 41 个 bit:表示的是时间戳。 是 10 个 bit:表示的是机房 id,0000000000,由于我传进去的就是0。 是 12 个 bit:表示的序号,就是某个机房某台机器上这一毫秒内同时生成的 id 的序号,0000 0000 0000。 1 bit,是无意义的:   由于二进制里第一个 bit 为假如是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。 41 bit:表示的是时间戳,单位是毫秒。   41 bit 能够表示的数字多达 2^41 - 1,也就是能够标识 2 ^ 41 - 1 个毫秒值,换算成>年就是表示 69 年的时间。 10 bit:记载工作机器 id,代表的是这个效劳最多能够部署在 2^10 台机器上,也就是 1024 台机器。   但是 10 bit 里 5 个 bit 代表机房 id,5 个 bit 代表机器 id。意义就是最多代表 2 ^ 5 个机房(32 个机房),每个机房里能够代表 2 ^ 5 个机器(32 台机器),这里能够随意拆分,比方拿出4位标识业务号,其他6位作为机器号。能够随意组合。 12 bit:这个是用来记载同一个毫秒内产生的不同 id。   12 bit 能够代表的最大正整数是 2 ^ 12 - 1 = 4096,也就是说能够用这个 12 bit 代表的数字来辨别同一个毫秒内的 4096 个不同的 id。也就是同一毫秒内同一台机器所生成的最大ID数量为4096 简单来说,你的某个效劳假定要生成一个全局独一 id,那么就能够发送一个恳求给部署了 SnowFlake 算法的系统,由这个 SnowFlake 算法系统来生成独一 id。这个 SnowFlake 算法系统首先肯定是晓得本人所在的机器号,(这里权且讲10bit全部作为工作机器ID)接着 SnowFlake 算法系统接纳到这个恳求之后,首先就会用二进制位运算的方式生成一个 64 bit 的 long 型 id,64 个 bit 中的第一个 bit 是无意义的。接着用当前时间戳(单位到毫秒)占用41 个 bit,然后接着 10 个 bit 设置机器 id。最后再判别一下,当前这台机房的这台机器上这一毫秒内,这是第几个恳求,给这次生成 id 的恳求累加一个序号,作为最后的 12 个 bit。