首页 > 其他分享 >分布式id生成

分布式id生成

时间:2024-02-28 22:24:24浏览次数:21  
标签:生成 毫秒 id 节点 序列号 ID 分布式

一 snowflake算法组成

snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。

最高位是符号位,始终为0,不可用。
41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。
10位的机器标识,10位的长度最多支持部署1024个节点。
12位的计数序列号,序列号即一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号。

总结: 雪花算法组成结构大致分为了无效位、时间位、机器位和序列号位。其特点是自增、有序、纯数字组成查询效率高且不依赖于数据库。适合在分布式的场景中应用,可根据需求调整具体实现细节。

 

二 衍生问题 - 分布式系统如何生成一个单据号

 一个订单号示例 - 20181024 0 4 099 021 00000000 21 00 12345678

20181024-日期

0 - 弹性标识为master

4 - 新平台

099 - 写死的系统标识

00000000 - 8位扩展码

21 分库分表位

00 - 弹性管控位

12345678 - 8位随机sequece

标签:生成,毫秒,id,节点,序列号,ID,分布式
From: https://www.cnblogs.com/balfish/p/18042102

相关文章

  • 为什么iOS包比Android包大 flutter
    由于Android系统已经内置了Skia,所以Flutter在打包APK(Android应用安装包)时,不需要再将Skia打入APK中,但iOS系统并未内置Skia,所以构建iPA时,也必须将Skia一起打包 安卓1.在debug模式下,so库打入了x86_64、x86、arm64-v8a,总共22.28M2.在release模式下,so库只有armeabi-v7a,总共3.4......
  • 置换群 / Polya 原理 / Burnside 引理 学习笔记
    置换群/Polya原理/Burnside引理学习笔记在GJOI上做手链强化,经过长达三小时的OEIS和手推无果后开摆,喜提rnk12,故开始学习置换群相关内容。笔记主要以Polya原理和Burnside引理的应用为主,所以会非常简单,很大一部分的群论概念和证明不会写,因为我不会。基础群论定......
  • Codeforces 264E Roadside Trees
    首先考虑时间增长的问题,设第\(i\)棵树的种植时间为\(t_i\)。那么第\(x\)棵树比第\(y\)棵树高就是\(h_x+(t_y-t_x)>h_y\),也就是\(h_x-t_x>h_y-t_y\)。所以可以直接用\(h_i-t_i\)当作第\(i\)棵树的高度,即\(h'_i\leftarrowh_i-t_i\)。对于增加,考虑......
  • 自由生成各种尺寸大小的占位图片:解决设计与开发中的图片占位问题
    在设计与开发的过程中,经常需要使用占位图片来填充暂时没有真实图片的位置。传统的占位图片往往只提供固定尺寸的模板,无法满足不同尺寸的需求。为了解决这一问题,自由生成各种尺寸大小的占位图片的工具应运而生。占位图片|一个覆盖广泛主题工具的高效在线平台(amd794.com)......
  • 高通Android平台上,与regulator相关的几个概念和属性解释
    bypass_count      用于记录硬件是否绕过了电压调节器直接从电池或其他电源获取电力。consumers: 消费者指的是依赖于某个regulator提供电源的硬件模块或驱动程序。每一个使用regulator来调节电压的设备都是一个消费者。enable:指对regulator......
  • delphi Byte 与 字符串(AnsiString、WideString) 相互转换
    Byte与字符串(AnsiString、WideString)相互转换代码String转ByteprocedureTForm1.Button1Click(Sender:TObject);varbuf:TBytes;I:Integer;begin//ANSI编码buf:=BytesOf('测试内容');Memo1.Lines.Add('ANSI编码');forI:=0toLength(buf)......
  • 使用IDEA创建父子级项目
    我们这里采用IDEA创建springboot子父级项目演示,同时通过使用SpringInitializer快速搭建springboot工程。一、创建父工程1、使用SpringInitializer快速搭建新建项目删除没用的src文件夹2、修改工程配置信息将build删除,packing改为pom<?xmlversion="1.0"encoding=......
  • yield生成器
    在JavaScript中,yield是一个关键字,用于生成器函数(GeneratorFunction)中。生成器函数是一种特殊类型的函数,它可以在执行过程中暂停,并且可以多次从暂停的位置继续执行。yield关键字用于定义生成器函数中的一个暂停点,并返回一个生成器对象的值。每次调用生成器函数时,执行会从上次......
  • IDEA更新本地代码丢失,IDEA使用Update Project更新本地代码丢失
    问题原因提交代码前,IDEA更新Git本地代码丢失,IDEA使用UpdateProject更新Git本地代码丢失,更新代码时执行UpdateProject操作。执行完该操作会发现IDEA没有任何提示,默认覆盖了你本地还未提交的代码,本地呕心沥血写的代码瞬间人间蒸发解决办法LocalHistory(本地历史更改记录)当出现......
  • 实战1-params随机生成(难度初级)
    目标网站>aHR0cDovL3R6eG0uanh6d2Z3dy5nb3YuY24vaWNpdHkvaXByby9vcGVuL3B1YmxpY2l0eQ==1.先找到需要逆向的参数通过翻页找到这个数据包![这是图片](https://img2024.cnblogs.com/blog/2861542/202402/2861542-20240228165958593-1353453011.png)复制数据包的Curl,运用爬虫工......