文档章节

全局唯一ID生成方式之twitter/snowflake(雪花算法)

Raymond
 Raymond
发布于 2017/07/22 10:30
字数 358
阅读 154
收藏 1

          为了解决分布式 ID 唯一不重复性,twitter 开源了 snowflake 算法,并被众多的企业作为参照,实现自己的一套 ID 生成器。SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和工作机器ID作区分)

          先来一张 twitter 的一张算法图。

       接下来大概讲一下雪花算法,主要有以下几部分组成

        1,  首位代表符号位。0 为正,1位负,而在生成的 ID 中, 要求基本都是正数, 所以首位基本是0.

        2,41位的时间戳。用来记录当前时间与标记时间twepoch的毫秒数的差值,JAVA 应用中是长度13的 Long 型时间戳, 一共41位。计算下来大可以使用69年(T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69。在这里设置twepoch=1485882061743L ,(时间为2017-01-01 01:01:01)。

        3,5位数据中心 ID, 及5位工作机器 ID。 这里可以解决分布式 标志性问题。支持2的10次方台机器。数据中心和工作机器 ID 取值均为(0~31)

        4,  12位序列号。每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号(1L << 12)

      

      代码连接 > https://gitee.com/nforgo/moth-sequence

 

© 著作权归作者所有

共有 人打赏支持
上一篇: Redis 集群搭建
Raymond
粉丝 0
博文 11
码字总数 3228
作品 0
浦东
程序员
私信 提问
Twitter的分布式雪花算法 SnowFlake

原理 Twitter的雪花算法SnowFlake,使用Java语言实现。 SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔): 1位标识部分,在java中由于long的最高位是符号位,正...

asdf08442a
03/14
0
0
php UUID &分布式生成用不重复的随机数方法

UUID(Universally Unique Identifier),通用唯一识别码。 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的 UUID 由以下几个部分组成: 1)当前日期和时间 2)时钟...

SibylY
04/26
0
0
短网址服务(TinyURL)生成算法

前不久做了一个优惠劵的分享功能,其中一个功能就是生成一个优惠劵分享短链接。生成的短链接要求每个链接都是唯一的,并且长度尽可能短。在网上查了一下相关的思路,发现了一个不错的算法。这...

浮云骑士LIN
08/23
0
0
【迁移2018-05-08 14:14:27】全局唯一ID生成

唯一ID生成 全局唯一ID 《高并发分布式系统中生成全局唯一Id汇总》 Twitter 方案(Snowflake 算法):41位时间戳+10位机器标识(比如IP,服务器名称等)+12位序列号(本地计数器) Flicker 方案...

twentwo
08/10
0
0
Twitter的分布式自增ID算法snowflake(Java版)

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。 有些时候我们希望能使用一...

月下狼
08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

系统维护和tcp连接

查看系统负载 1 w 命令 w命令用于显示系统当前负载 和系统已登录的用户. 查看系统CPU 和核数: cat /proc/cpuinfo| grep 'cpu cores' 第一行显示 :04:41:16 up 8:56, 1 user, load average: 0...

Fc丶
35分钟前
1
0
Mac Pro 下安装 Snappy 压缩工具

snappy 我这里就不做介绍了,直接可以移步 https://github.com/google/snappy/tree/master 查看源码及说明信息。 我这里下载 :https://github.com/google/snappy/releases/download/1.1.4/...

Ryan-瑞恩
38分钟前
2
0
iframe里弹出的层显示在整个网页上

通过在iframe页面添加js脚本,动态给父窗体创建一个div,然后设置让其显示在最顶层这样就可以了 在文件夹中创建两个文件,一个iframe页面,一个父页面index。

少年已不再年少
53分钟前
2
0
聊聊storm trident spout的_maxTransactionActive

序 本文主要研究一下storm trident spout的_maxTransactionActive MasterBatchCoordinator storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/MasterBatchCoordinator.java ......

go4it
今天
1
0
js时间函数getTime() 在苹果手机上返回NaN的问题

一、出现问题 var newStartDate = new Date('2017-08-30');var newStartTime = newStartDate.getTime(); 获取到的时间戳,在Android手机正常,在IPhone中返回NaN。 问题说明: 在苹果手机...

tianma3798
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部