首页 > 编程语言 >雪花算法

雪花算法

时间:2023-03-31 17:47:06浏览次数:24  
标签:10 机器 雪花 回拨 算法 ID

目录

Python 实现雪花算法

雪花算法:雪花算法是一种分布式全局唯一ID,一般不需要过多的深入了解,一般个人项目用不到分布式之类的大型架构,另一方面,则是因为,就算用到市面上很多 ID 生成器帮我们完成了这项工作。

介绍:Twitter 于 2010 年开源了内部团队在用的一款全局唯一 ID 生成算法 Snowflake,翻译过来叫做雪花算法。Snowflake 不借助数据库,可直接由编程语言生成,它通过巧妙的位设计使得 ID 能够满足递增属性,且生成的 ID 并不是依次连续的。

1.原理及介绍

Snowflake 是 Twitter 提出的一个算法,其目的是生成一个64位的整数;

64位的分布图如下图所示:

雪花算法

雪花算法

1 bit:一般是符号位,不做处理。
41bit : 用来记录时间戳,这里可以记录69年,如果设置好起始时间,比如今年是 2022 ,那么可以用到 2091 年,到时候怎么办,这个系统要是能够使用 69 年,估计系统早已经优化过很多次了。
10bit : 用来记录机器ID,总共可以记录1024台机器,一般用前5位代表数据中心,后面5位是某个数据中心的机器ID。(注:位数可以根据情况进行设定。)
12bit:循环用来对同一个毫秒内产生的不同的 ID,12位可以最多记录4095(212-1)次,多余的需要在下一毫秒进行处理。

上面是一个将64bit划分标准,当然也不一定这么做,可以根据不同的业务的具体场景进行行划分,例如:

    服务目前QPS10万,预计几年之内会发展到百万。

    当前机器三地部署,上海,北京,深圳都有。

    当前机器10台左右,预计未来会增加至百台。

这个时候我们根据上面的场景可以再次合理的划分62 bit,QPS 几年之内会发展到百万,那么每毫秒就是千级的请求,目前 10 台机器那么每台机器承担百级的请求,为了保证扩展,后面的循环位可以限制到 1024,也就是2^10,那么循环位10位就足够了

机器三地部署我们可以用3bit总共8来表示机房位置,当前的机器10台,为了保证扩展到百台那么可以用7bit 128来表示,时间位依然是41bit,那么还剩下64-10-3-7-41-1 = 2bit,还剩下2bit可以用来进行扩展。

复制

时钟回拨:因为机器的原因会发生时间回拨,雪花算法是强依赖时间的,如果发生时间回拨,有可能会发生重复ID,在我们上面的nextId中我们用当前时间和上一次时间进行判断,如果当前时间小于上一次的时间,那么肯定是发生了回拨,算法会直接抛出异常。

2.第三方包的使用

pip install pysnowflake下载包
snowflake_start_server --worker=1 启动服务
编写程序
from snowflake import client
client.get_guid()

image

标签:10,机器,雪花,回拨,算法,ID
From: https://www.cnblogs.com/bnmm/p/17276995.html

相关文章

  • 资料-算法篇
      逆波兰表达式  https://zhuanlan.zhihu.com/p/357982040                                    ......
  • 第8章 数据结构算法专题二
    线索二叉树与哈夫曼树线索二叉树线索二叉树的概念采用某种方法遍历二叉树的结果是一个结点的线性序列。修改空链域改为存放指向结点的前驱和后继结点的地址。这样的指向该线性序列中的”前驱“和”后继“的指针,称作线索(thread)。创建线索的过程称为线索化。线索化的二叉......
  • 功率型锂离子电池双无迹卡尔曼滤波算法(DUKF)soc和soh联合估计,估计欧姆内阻,内阻表征SOH
    功率型锂离子电池双无迹卡尔曼滤波算法(DUKF)soc和soh联合估计,估计欧姆内阻,内阻表征SOHmatlab代码DST和US06工况多篇参考文献支持YID:32249655598283937......
  • 数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病|附代码
    全文链接:http://tecdat.cn/?p=23061最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。这个数据集可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标"字段是指病人是否有心脏病。它的数值为整数,0=无病,1=有病数据集信息:目标:主......
  • 算法设计与分析 Assignment 1(第一章)
    什么是算法?它有什么特点?算法是一组规则或过程,用于解决特定问题或完成特定任务。算法通常包括一系列的步骤和操作,可以将输入数据转换为输出数据。算法可以应用于各种领域,如计算机科学、数学、工程等,用于解决计算、优化、搜索、排序、加密等问题。算法有以下几个特点:精确性:算法......
  • 密码学SAT入门003——关于流密码入门算法A5-1的学习
      电子科技大学《现代密码学》慕课截图——感谢聂旭云、廖永建、熊虎等几位老师的讲解                                         算法code A5_1.algprogramdescribe......
  • m基于FC全卷积网络和kalman的遮挡车辆跟踪算法matlab仿真,用matconvnet-1.0-beta20工
    1.算法描述1.1全卷积神经网络全卷积神经网络(FullyConvolutionalNetworks,FCN)是JonathanLong等人于2015年在FullyConvolutionalNetworksforSemanticSegmentation一文中提出的用于图像语义分割的一种框架,是深度学习用于语义分割领域的开山之作。我们知道,对于一个各层参数结......
  • 如何使用 MegEngine 生态落地一个算法
    在当今人工智能领域,深度学习算法已经广泛应用于图像处理、自然语言处理、语音识别等各种领域。然而,实现一个高效的深度学习算法需要运用大量的技术和工具,并要面临着许多挑战,如训练计算资源消耗大,模型转换难,高效快捷的推理部署等问题。MegEngine作为一个训推一体的深度学习框架,其......
  • 交易簿和报价算法
    #定义交易簿类classOrderBook:def__init__(self):self.bids={}#买方委托,按价格从高到低排序self.asks={}#卖方委托,按价格从低到高......
  • MATLAB代码:基于遗传算法的储能优化配置(可加入风光机组)
    MATLAB代码:基于遗传算法的储能优化配置(可加入风光机组)关键词:储能优化配置遗传算法 储能充放电优化参考文档:无明显参考文档,仅有几篇文献可以适当参考仿真平台:MATLAB......