专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

说起分布式自增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生成方案。都是可以参考的解决方案,但是方案总归是方案,总有其自身的特点和缺陷,这就需要根据实际应用场景而具体问题进行具体分析了。

科莫多巨蜥的毒液到底有多可怕?2009年,一名31岁的渔民安瓦尔,在印尼科莫多岛上采摘水果,结果不小心从水果树上掉了下来,刚好踩到了一只巨型蜥蜴,蜥蜴瞬间就朝他扑了过去,咬住了他的腿,之后又咬住了他的手臂,身体武汉未来的房价会涨到100000元平米吗?这个问题的答案是肯定的!以目前的趋势,未来武汉房价必然达到10万的水平,只是时间长短的问题。2010年至2017年,短短七年间,武汉的房价已经翻了3番,目前,武汉部分高端楼盘如洞庭兰州青白石片区,中央公园怎么样?兰州北拓的黄金区域,目前基础交通还跟不上建设需要,交通滞后可能会成为十四五期间兰州青白石片区发展的的最大障碍!不过就兰州地理位置和城区格局而言,青白石片区是离主城区最近的待开发区域农民为什么不在国家统计失业范围之内?中国有四个儿子,大儿子叫工人,二儿子叫子弟兵,三儿子叫公务员,四儿子叫农民,所以四儿子就没有纳入统计失业包括养老金范围,因为四儿子有金山银山还有三分地。农民有土地,这是农民可以赖以农村成立社区是什么意思?很多农村驻有村委会办公室,同时也驻有社区管理委员会办公室,特别是在城市郊区的农村和街道的农村都同时设立了村委会和社区管理委员会,很多人弄不明白是怎么回事。那农村成立社区是什么意思呢农村里的剩男,为何一剩再剩呢?到底是什么原因?男女比例失调。计划生育只要一个孩子时,受封建思想影响,都拚命要男孩,等他们长大了,很难找到媳妇。一,农村姑娘远嫁,二,女孩见少,三,彩礼高,四,剩男挣钱少。我就一大龄剩男!个人亲身抖音付费直播试水,看直播要给钱了?我们应该如何思考?使劲收,最好是家人们看的话,一分钟100块钱。毕竟粉丝听话的很。毕竟人设都设计好了打PK,卖货摆错价格,怒亏2个亿回馈粉丝。没事就怼工厂,怼员工反正就是赔钱回馈粉丝。赔完还得补交税马上就要退休了,退休工资才3650元太少了,怎么办?3600不少了。我企业工龄32年,退休时退休金只有2200,涨了这么多年还不到3000。知足常乐吧!如果身体不好,这些钱也够生活了,如果身体还可以,就找一些力所能及的工作,打打工补南宁五象新区未来的发展潜力很大吗?五象新区无法成为国家级新区!!!目前看来,五象新区的潜力也就这样了。我们对比一下贵阳的贵安新区,贵安新区的面积是1700平方公里,由贵阳市的郊区和安顺市合并得来。是全国第8个国家级如果把三峡大坝加高10米,截留更多的洪水,可行吗?我国的三峡大坝,作为当今世界上最大的水利枢纽工程,位于湖北省宜昌市上游,距下游葛洲坝水电站38公里,三峡大坝全长2309米高185米,呈梯形形状,集发电旅游航运调控洪水于一身。三峡大家有经历过亲人去世吗?是怎样走出痛苦和想念的?2018年9月1日下午3点8分,我的妻子在医院里停止了呼吸。她的眼睛没有闭上,我流着泪,帮她合上了双眼。我永远失去了我最亲近的爱人,孩子永远的失去了妈妈。一位好妻子,好女儿,好姑妈
被他保护下来的九寨沟有些著名景点,要不是有人加以保护,早不知什么时候从世界上消失了。九寨沟就属此类。九寨沟是位于四川省阿坝藏族羌族自治州九寨沟县漳扎镇白水沟上游白河的一条支沟。海拔在二千米以上,纵深五落地不到20万!8AT后驱空间大品质好这几款中型轿车真香原本教授打算做一期关于2025万预算性价比最高的轿车推荐,但没想到特斯拉这条大鲶鱼直接不讲武德,来个大降价,其中特斯拉Model3起售价降至22。99万元,刚好在教授所推荐车型的价显微镜下的大自然矿物篇夏威夷毛伊岛海滩上的沙粒,放大400倍电子显微镜下矿物黄铁矿的晶体,也被称为傻瓜金。在6000倍放大倍数下的氧化铁晶体(铁锈)磷酸盐矿物pyromorphite的晶体近距离锆放大1十年累计新增退减缓免税费超13万亿元视频加载中在昨天(17日)国家税务总局召开的全国税务工作会议上,有关负责人介绍,十年来,税务部门组织税收收入140万亿元,为国家治理提供了坚实财力保障。数据显示,2013年到2027年跌去71,被股民称ampampquot阿斗ampampquot,机器人为何被抛弃?文杨万里如果一只股票把你套牢7年,心会不会伤透?A股有一家明星公司,叫机器人。它的业务涉足高端制造领域,但近几年股价就是涨不动,有股民甚至给它标签上阿斗的称号。机器人过去发生了什么追寻生命里那道光,它一直陪你成长对年轻人而言,成长是一个绕不过去的关键词。它蕴含着无限的希望,让人斗志昂扬,但细细品咂起来,又有一丝青春酸涩的滋味在其中回荡。所有人都要经历成长,在领悟与学习中进步,接受挑战与挫折教给孩子的阅读批注策略以一本打开的童话书为例现在孩子看的书并不少,老师会布置,家长会安排,同学间也会有流行的书互相换着看。可看了那么多书,看完什么都说不出来,作文也写不好。作为家长真的很无奈。为了探究书到底该怎么读,最近学习为什么说啤酒和野餐更配?消费者开始追求零食的情绪价值近日,小红书在广州启动食品饮料行业营销中国行活动恰好计划,并发布灵感补给站小红书零食行业用户洞察报告(下称报告),报告显示,Z年轻群体是关注零食和购买零售的主要群体,除了满足口腹之世界国家玻利维亚篇今天来和大家浅聊一下南美的内陆国家玻利维亚。玻利维亚全称多民族玻利维亚国。位于南美洲的中部,大致在南纬9和南回归线(2326S)之间。北部和东部与巴西接壤,东南部和南部与巴拉圭和阿两会盘点两会时间,精彩瞬间民生发展引热议代表委员绘蓝图2023山西省两会顺利闭幕在近一周的两会时间里山西云媒体推出互动长图弹幕海报微视频等一系列形式新颖内容创新的融媒产品对省两会进行了全方位立体式的融合报道技术揭秘蓝宝石表壳生产全过程!有什么过人之处?最近这几年国内外众多品牌都在积极使用蓝宝石表壳,蓝宝石表壳晶莹剔透质感非常好,并且可以很方便欣赏机械结构,而且硬度高耐刮,但是也有缺点容易碎掉,今天带大家了解一下蓝宝石表壳是如何制
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网