文档章节

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

Raymond
 Raymond
发布于 2017/07/22 10:30
字数 358
阅读 71
收藏 1
点赞 0
评论 0

          为了解决分布式 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

 

© 著作权归作者所有

共有 人打赏支持
Raymond
粉丝 0
博文 11
码字总数 3228
作品 0
浦东
程序员
php UUID &分布式生成用不重复的随机数方法

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

SibylY ⋅ 04/26 ⋅ 0

分布式系统唯一ID生成方案

系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结。生成ID的方法有很多,适应不同的场景、需求以及性能要求。所以有些比较复杂的系统会有多个ID生成的策略。下...

1045917067 ⋅ 2017/11/16 ⋅ 0

分享一段生成分布式全局唯一ID的代码

首先,说一下为什么要自己生成去全局唯一ID: 在分布式系统中,很难依赖数据库生成ID(性能上的瓶颈、不想绑定在某个数据库的实现方法,比如MongoDB的ObjectId) 需要一个可以根据时间粗略排...

浪客Dandy ⋅ 2017/08/28 ⋅ 2

【死磕Sharding-jdbc】—–分布式ID

原文作者:阿飞Javaer 原文链接:https://www.jianshu.com/p/7f0661ddd6dd 实现动机 传统数据库软件开发中,主键自动生成技术是基本需求。而各大数据库对于该需求也提供了相应的支持,比如M...

飞哥-Javaer ⋅ 05/05 ⋅ 0

分布式自增 ID 算法--Snowflake

Twitter在把存储系统从MySQL迁移到Cassandra的过程中,由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。优点是:高性能,低延迟;独立的应用;按时间有...

匿名 ⋅ 2016/06/16 ⋅ 5

扯扯ID

🙂🙂🙂关注微信公众号:【芋艿的后端小屋】有福利: RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表 RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址 您对于源码...

芋道源码掘金Java群217878901 ⋅ 2017/06/11 ⋅ 0

snowflake——Twitter 开源的分布式自增 ID 算法

Twitter在把存储系统从MySQL迁移到Cassandra的过程中,由于Cassandra没有顺序ID生成机制,于是自己开发了一套全局唯一ID生成服务:Snowflake。优点是:高性能,低延迟;独立的应用;按时间有...

oschina ⋅ 2016/07/04 ⋅ 0

分布式系统中唯一 ID 的生成方法

原文出处:darktea 本文主要介绍在一个分布式系统中, 怎么样生成全局唯一的 ID 一, 问题描述 在分布式系统存在多个 Shard 的场景中, 同时在各个 Shard 插入数据时, 怎么给这些数据生成全局的...

darktea ⋅ 2017/02/05 ⋅ 0

MySQL分库分表环境下全局ID生成方案

在大型互联网应用中,随着用户数的增加,为了提高应用的性能,我们经常需要对数据库进行分库分表操作。在单表时代,我们可以完全依赖于数据库的自增ID来唯一标识一个用户或数据对象。但是当我...

豌豆 ⋅ 2013/11/06 ⋅ 32

coderush/id-generator

分布式ID生成器(雪花算法SpringBoot版) 介绍 分布式ID生成器: 全局唯一ID作为一种唯一标识来区分数据,可用作订单号、用户ID等。ID生成器是生成全局唯一ID的工具,可封装为一种基础服务为其...

coderush ⋅ 2017/09/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mavne settings.xml

<?xml version="1.0" encoding="UTF-8"?> <settings> <localRepository>C:/Users/tuozq/.m2/repository</localRepository> <mirrors> <mirror> <id>a......

Jay丶 ⋅ 4分钟前 ⋅ 0

xuchen-mvc相关类

package org.mvc.framework.utils; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ContextPathUtil { public static List<String> splitConte......

徐志 ⋅ 18分钟前 ⋅ 0

JVM CMS和G1 有什么区别

1.CMS适用于要求:不能忍受长时间停顿要求快速响应的应用。 2.当新生代占用达到一定比例的时候,开始出发收集。不区分年轻代和年老代空间。它把堆空间划分为多个大小相等的区域。当进行垃圾收...

qimh ⋅ 20分钟前 ⋅ 0

重入(reentrant或re-entrancy)攻击

可重入 若一个程序或子程序可以「在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错」,则称其为可重入(reentrant或re-entrancy)的。 例子如下: funct...

王坤charlie ⋅ 21分钟前 ⋅ 0

HTTP协议(超文本传送协议)详解

引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTT...

一个成都的小点点 ⋅ 22分钟前 ⋅ 0

bootstrap easyui

bootstrap easyui

霜叶情 ⋅ 23分钟前 ⋅ 0

数据结构与算法之双向循环链表实践

一、双向循环链表实践 1.题目1,要求实现用户输入一个数,使得26个字母的排列发生变化 例如用户输入3,输出结果:DEFGHIJKLMNOPQRSTUVWXYZABC 例如用户输入-3,输出结果:XYZABCDEFGHIJKLMN...

aibinxiao ⋅ 26分钟前 ⋅ 0

架构设计之初体验,送给准备进阶架构的朋友(个人总结)

1 基本概念和目的 架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出实际业务实际情况的复杂点,然后有有...

James- ⋅ 26分钟前 ⋅ 0

获取jar中的资源文件途径

如果资源文件处于jar中而非当前项目中,可以通过如下方式加载 String path = Thread.currentThread().getConctextClassLoader().getResource("资源文件路径").getFile();...

最佳的时间就是现在 ⋅ 30分钟前 ⋅ 0

从方法论到零售客户实践 解码阿里巴巴数据中台——2018上海云栖大会

摘要: 一、数据中台之道 6月8日,上海云栖大会进入了第二天的议程,数据中台专场论坛座无虚席,数据中台总架构师邓中华女士向在场的观众介绍了数据中台的衍生发展之道。 基于OneID、OneData...

阿里云云栖社区 ⋅ 33分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部