游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

说起分布式自增ID只知道UUID?SnowFlake了解一下

  但凡说起分布式系统,我们肯定会对一些海量级的业务进行分拆,比如:用户表,订单表。因为数据量巨大一张表完全无法支撑,就会对其进行分库分表。但是一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题,当我们使用mysql的自增长主键(autoincrement)时,充分感受到了它的好处:整个系统ID唯一,ID是数字类型,而且是趋势递增的,ID简短,查询效率快,在分布式系统中显然由于单点问题无法使用mysql自增长了,此时需要别的解决方案来支撑分布式业务。
  首先映入脑海的一定是uuidimportuuidprint(uuid。uuid1())d13a0096abca11ea8997acbc32785ec1
  客观地说,如果一定要用uuid生成订单号这类东西也能凑合用,但是它有着罄竹难书的罪行:肉眼可见,它是无序的;长度是64位数字字母随机组合的字符串,占用空间巨大;完全不具备业务属性,也就是说使用uuid你完全无法推算出它到底是干嘛的;因为无序,所以趋势递增就更不用指望了;所以用uuid生成订单号就是自杀行为,适合它的是类似生成token令牌的场景。
  那么我们就要说起业界鼎鼎有名的SnowFlake(雪花算法)发号器了。TwitterSnowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序,让twitter可以通过一定的索引来进行检索,而在Twitter庞大的分布式系统中不同机器产生的id必须又必须不同。
  它的好处显而易见,不仅全局唯一,并且有序按时间递增,同时占用空间少,生成的id仅仅是19位的整形数字,正好契合mysql的bigint数据类型,简直完美。
  为啥它叫做Snowflake(雪花)算法?因为每个人都知道没有两片一样的雪花,这一事实源于晶体在天空中形成的方式。雪是一团冰晶,在大气中形成,并在它们下落时保持其形状。雪花形成于大气冷到能阻止它们融化变成雨或雨夹雪的时候。尽管云中的温度和湿度是不均匀的,但是在雪花大小的范围内,这些变量大约都是常数,这就是雪花的生长通常是对称的原因。另一方面,塔夫茨大学(TuftsUniversity)化学家玛丽简舒尔茨(MaryJaneShultz)指出:每片雪花都受到风,日光和其他变量变化的影响。她解释说,由于每个雪晶都到云层紊乱的影响,它们的形式都略有不同。
  而Snowflake的逻辑也非常简单,雪花算法生成64位的二进制正整数,然后转换成10进制的数。64位二进制数由如下部分组成:
  1位标识符:始终是0
  41位时间戳:41位时间戳不是存储当前时间的时间戳,而是存储时间截的差值(当前时间截开始时间截)得到的值,这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的
  10位机器标识码:可以部署在1024个节点,如果机器分机房(IDC)部署,这10位可以由5位机房ID5位机器ID组成
  12位序列:毫秒内的计数,12位的计数顺序号支持每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号
  看到时间戳,就可以联想到它的缺陷,也就是它依赖机器的时钟,如果服务器时钟回拨,可能会导致重复ID生成。
  这里我们用Python3。0来生成SnowFlake生成的唯一id
  首先安装库pip3installpysnowflake
  安装完成后,就可以在本地命令行启动snowflake服务snowflakestartserverworker1
  这里的worker就是当前节点的标识,此时编写代码就可以打印出当前客户端使用的snowflake的服务信息importsnowflake。clientprint(snowflake。client。getstats()){dc:0,worker:1,timestamp:1591871273195,lasttimestamp:550281600000,sequence:0,sequenceoverload:0,errors:0}
  当然了,如果一台服务器上起了很多节点服务,也可以指定相关的节点进行装载host127。0。0。1port30001snowflake。client。setup(host,port)
  随后我们究竟可以根据该服务生成唯一id了importsnowflake。clientprint(snowflake。client。getguid())4368750411956359169
  可以看到这些id很明显带有递增的连续性,有的人会问了,假设我搭建了上千个节点的分布式系统,此时接口接到参数id,我怎么判断该id的订单信息存储在那个节点中呢?
  其实很容易就可以判断,从SnowFlake的算法结构入手,本身就是二进制转换十进制的整形,现在我们反着进行解析即可,这里以这个19位的id为例子:4368750411956359169
  首先将其转换为二进制print(bin(4368750411956359169))0b11110010100000111010110101101001100001000000000001000000000001
  可以看到上文所述的第一位是标识符,此后是41位的时间戳,紧接着10位的节点标识码,最后12位的递增序列,从后面数12位是:000000000001,再数5位是:00001这5位就是某个节点的存储标识,但是它目前是二进制,我们再将它转换为十进制print(int(00001,2))1
  可以看到,转换结果显示该id存储在节点1的数据库中,如此就具备了相当强的业务属性,通过反推逻辑我们可以快速准确的定位到数据的具体存储位置从而进行查询。
  结语:
  其实关于分布式唯一id的解决方案,也不仅仅只有uuid或者snowflake,像redis的incr原子性操作自增,亦或者Mongodb极具特色的objectid的生成方式,专为分布式而设计的ID生成方案。都是可以参考的解决方案,但是方案总归是方案,总有其自身的特点和缺陷,这就需要根据实际应用场景而具体问题进行具体分析了。

我的2021第一次远游,我与父亲同行2021加油带头人每个人的旅行,各有不同。有独自一人去的;有和朋友同去的;也有和爱人同去的;还有和孩子同去的,而我却带着父亲去远行。那是今年三月底的一天,阳光明媚,春暖花……这3个缩毛孔的方法,我劝你们别信每次的护肤答疑小课堂,都会有小可爱留言:想知道毛孔粗大该怎么办。虽然这个问题看似没有痘印、法令纹那么严重,但如果放任不管,分分钟拉低我们的颜值不仅皮肤看起来很粗糙,……金价还在涨!2022年8月10日各大金店黄金价格多少钱一克?今天是8月10日,金店黄金价格继续上涨,涨幅最高为5元克,依旧是高金价。目前,金价第一的金店为老庙、六福、周大福、金至尊、潮宏基、周生生,报价505元克。而金价倒数第一的金店依……马斯克夺回世界富豪榜首位,还在嘲笑他裁掉的推特员工极目新闻记者宋清影经历过去一年财富暴跌后,马斯克重新夺回了世界首富的位置。根据彭博亿万富翁指数,他的净资产估计达到1871亿美元。马斯克似乎没有对此发表任何评论,不过,他……日常生活中,如何预防孩子便秘?孩子便秘会影响学习和生活,是令一些父母很头疼的事。其实,只要在生活中多注意,养成良好的生活习惯,就能有效预防便秘。1、饮食习惯避免经常吃油腻食物,饮食以适量、营养均衡为主……心居主演童瑶在伤害中成长,丈夫一句话让她下决心嫁点击关注,每天都有名人故事感动您!童瑶正在热播的都市家庭情感剧《心居》,因为接地气的剧情和演员精湛的表演,引发网友展开热议。当红女星童瑶在剧中饰演的女主角顾清……其实你刷的从来都不是文案,而是自己的影子1。见一面都很难的人,居然还想着有以后2。可惜生活不是电影,没人等你三五年3。请原谅我事到如今还是热衷于一些温热的谎言4。如果你也见到了这场雨,那就当我们见过……吃方便面到底是幸福还是不幸?有人觉得吃方便面很幸福,有人觉得吃方便面很不幸。世上大概就是这么两种人。幸与不幸不是取决于你吃什么而是你的心态问题。心态好的人日子不会过得差!生活质量并不完全取决于物质上是否富……胡歌在娱乐圈不红,是因为他正在其他的圈子里红得发紫娱乐圈明星要保持热度,无非两个办法,一个就是炒八卦,增加曝光;另外一个办法就是出作品,通过爆款作品,来吸引观众的眼球。但是娱乐圈就有这么一个异类,不炒八卦不说,还经常几年……这是逼我早些退役?羽生结弦罕见炮轰国际滑联评分改革9月12日,中日邦交正常化50周年纪念庆典组织委员会宣布,花样滑冰选手羽生结弦将作为特别嘉宾出席9月29日在日本东京都内举行的纪念仪式。7月19日,羽生结弦召开新闻发布会,官宣……防守者无法防守ampamp39的解决方案关于如何使用特伦特亚历山大阿诺德作为中场球员提出了意见。曾被评为世界最佳右后卫。基于让人想起大卫贝克汉姆的敏锐踢球力量,从右路尝试的传中非常出色。他与安德鲁罗伯逊建立的左……莫干亲子行,夏天的第一堂自然课夏日的莫干山,是一杯带着青柠的甜茶凉爽的风,万千的竹海,摇曳的稻田,整个世界仿佛自带文艺片的光晕,在繁华的都市里生活着,总忘不了莫干山那静得只听得见呼吸和鸟叫的日子……
中超新恒大悄然发力,又1大牌接近加盟,武汉三镇队剑指亚冠冠军文彬少侃球(首发)离中超新赛季开打还有至少一个月左右的时间,而在这期间,许多球队还不断进行阵容体系调整和人员补强,而备受外界关注的武汉三镇队方面,他们在前段时间巩固了外援阵容体……门头沟千军台,能保留传统的不多千军台,北京首批市级传统村落。村口这座桥身深埋河道里的桥,是京西古道从王平到大寒岭段十里八桥的最后一座千水桥,也称千军台老桥,河水早已干涸,但是古桥卧在那里,它唤醒人们告……北京中轴线之谜北京,从元朝建立后一直到今天都是中国的政治经济文化中心,一座令无数国人向往的城市!作为一座拥有三千多年历史的六朝古都,北京老城可谓是我国古代建筑最高水平的典型代表。北京古城是按……Shams詹姆斯没有前往德国求医,他的愈合速度超出常人今日,著名记者ShamsCharania在电视节目中报道了湖人前锋勒布朗詹姆斯此前从右脚肌腱撕裂伤病中康复的详情。勒布朗詹姆斯回归阵容的时间大大早于预期。他说他看过的两位……荣耀70系列官宣支持100W快充,5月30日发布感谢IT之家网友肖战割割的线索投递!IT之家5月25日消息,荣耀70系列新机将于5月30日19:30发布,今天下午官方再次对新机预热,证实荣耀70系列支持100W快充。……小米宣布部分机型推迟MIUI13发布,涉及Redmi10XP感谢IT之家网友WandKM的线索投递!IT之家5月31日消息,昨日,小米官方通报了MIUI13的最新发版计划,称Redmi10X、Redmi10XPro、RedmiK3……华硕Zenfone7Pro开始推送安卓12大版本更新IT之家5月17日消息,据GSMArena报道,华硕于去年12月开始为Zenfone8和Zenfone8Flip推送Android12更新,但是,这家公司在近五个月后才开始适配……自驾游的天堂,沿途美景让人惊叹随着人们自我规划意识和攻略水平的提升,很多人不会选择跟随旅游团去旅游。因为这样会有太多的限制和太多的束缚,而且时不时的也会被强行购物一波,对于游客来说身心俱疲,简直是太过悲催。……vivoXFold折叠屏适配官方指南发布应用大小可调不同分辨IT之家4月30日消息,前几天,vivo首款折叠屏手机正式官宣,为让开发者更好地适配新机型,vivo团队特推出了全新的适配指南。vivo折叠屏有展开态和折叠态,这两种状态……高德地图已适配支持华为MateXs2折叠屏手机3D精准室内定IT之家4月30日消息,近日,华为宣布HUAWEIMateXs2成为业界首发3D精准室内定位的手机,具有提升室内定位精度,实现楼层自动切换,室内路径规划等功能。HUAWEIMa……小米12Pro衍生版?神秘新机L2M通过核准认证感谢IT之家网友肖战割割的线索投递!IT之家5月6日消息,小米神秘新机2207122MC通过工信部无线电核准,据微博博主数码闲聊站称小米12Pro型号是L2,所以L2M估……涂眼霜的雷区千万要避开图片由Lancme兰蔻提供黑眼圈、眼睛浮肿、眼睑下垂、眼周细纹这些眼部肌肤问题简直不要太显老,千万别以为这仅是随着年纪增长而自然产生的,其实这些问题分别可能是睡眠不足、睡……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网