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

分布式id生成器方案详细介绍

  问题描述
  在物联网场景的解决方案中,通常需要将设备的信息转换为一个业务事件进行输出。在生成升级事件的过程往往需要多次的数据库操作,且伴随着异步的逻辑。依靠数据库的自增id作为事件的id容易造成脏数据且会占用大量的数据库资源,所以需要系统内置一个轻量级的id生成器。常见解决方案
  UUID
  UUID(universallyuniqueidentifier)是基于时间生成的128位随机标识符,算法保证了UUID重复的可能性接近于0,且UUID的生成不依赖中心注册单元,完全是分布式生成的。JAVA自带了生成UUID的类库。publicstaticvoidmain(String〔〕args){StringuuidUUID。randomUUID()。toString()。replaceAll(,);System。out。println(uuid);}
  优点:
  生成足够简单,本地生成无网络消耗,具有唯一性
  缺点:
  无序的字符串,不具备趋势自增特性
  没有具体的业务含义
  长度过长16字节128位,字符串36位,很难作为主键保存。数据库自增ID
  基于数据库的autoincrement自增ID完全可以充当分布式ID,具体实现:需要一个单独的MySQL实例用来生成ID,建表结构如下:CREATETABLESEQUENCEID(idbigint(20)unsignedNOTNULLautoincrement,tagchar(10)NOTNULLdefault,PRIMARYKEY(id),)ENGINEINNODB;
  当需要一个ID的时候,向表中插入一条记录返回主键ID。insertintoSEQUENCEID(value)VALUES(tag);数据库集群自增ID
  由于单个数据库有可能造成单点故障,所以数据库自增还可以基于数据库集群来提供。可以避免因为单点造成的不可用,ID重复的问题可以通过给每个数据库设置不同的起始id和步长进行控制。
  MySQL1配置:setautoincrementoffset1;起始值setautoincrementincrement2;步长
  MySQL2配置:setautoincrementoffset2;起始值setautoincrementincrement2;步长
  优点:
  实现简单,ID单调自增,数值类型查询速度快
  缺点:
  无法支持高并发场景,单机模式有不可用风险,集群模式后期无法扩容。号段模式
  号段模式可以理解为从数据库批量的获取自增ID,每次从数据库取出一个号段范围,例如(1,1000〕代表1000个ID,具体的业务服务将本号段,生成11000的自增ID并加载到内存。表结构如下:CREATETABLESEGAMENTID(idint(10)NOTNULL,maxidbigint(20)NOTNULLCOMMENT当前最大id,stepint(20)NOTNULLCOMMENT号段的步长,tagvarchar(8)NOTNULLCOMMENT业务标识,versionint(20)NOTNULLCOMMENT是一个乐观锁,每次都更新version,保证并发时数据的正确性,PRIMARYKEY(id))
  表里插入初始化的数据,确定步长和id初始值。insertintoSEGAMENTID(maxid,step,tag,version)values(1,1000,tag,1);
  将(1,1000〕放到内存里供系统使用。
  等这批号段ID用完,再次向数据库申请新号段,对maxid字段做一次update操作,maxidmaxidstep,update成功则说明新号段获取成功,新的号段范围是(maxid,maxidstep〕。updateSEGAMENTIDsetmaxid{maxidstep},versionversion1whereversion{version}andtagtag
  优点:
  高并发,不会占用大量数据库性能。
  缺点:
  当吞吐量上去后,依旧存在单点故障问题。redis自增
  基于用redis的incr命令实现ID的原子性自增,也可视实现uid快速生成。127。0。0。1:6379setseqid1初始化自增ID为1OK127。0。0。1:6379incrseqid增加1,并返回递增后的数值(integer)2
  优点:
  支持较大的吞吐量,不会占用大量数据库性能。
  缺点:
  高并发下占用较大的网络IO资源。id完全自增,有信息安全问题。snowflake算法
  Twitter公司开源的id生成算法,基于机器的时钟服务和节点信息生成id。
  Snowflake生成的是Long类型的ID,共占64个比特。
  其中:正数位(占1比特)时间戳(占41比特)机器ID(占5比特)数据中心(占5比特)自增值(占12比特)。
  第一个bit位(1bit):Java中long的最高位是符号位代表正负,正数是0,负数是1,一般生成ID都为正数,所以默认为0。
  时间戳部分(41bit):毫秒级的时间,不建议存当前时间戳,而是用(当前时间戳固定开始时间戳)的差值,可以使产生的ID从更小的值开始;41位的时间戳可以使用69年,(1L41)(1000L606024365)69年
  工作机器id(10bit):也被叫做workId,这个可以灵活配置,机房或者机器号组合都可以。
  序列号部分(12bit),自增值支持同一毫秒内同一个节点可以生成4096个ID。
  在使用中,可以根据实际情况对每个部分的占比进行调整。
  优点
  没有网络IO开销,ID不连续,没有安全问题。
  缺点
  依赖时钟服务,当时间回调后会出现id重复。混合使用
  以上5种生成方案都有不同的缺点,在实际使用过程中各厂倾向于混合使用几种策略来满足自身的需求。uidgenerator
  百度的uidgenerator基于snowflake算法。解决了时钟回拨和瞬时高并发的问题。
  uidgenerator默认workNodeId持久化在数据库中,但也提供了重新实现workNodeId的接口。当时间回拨后,会自动生成新的nodeId,保证uid整体的不重复。
  RingBuffer保存了当前可用的所有id序列,tail和cursor表示最新生成id和最新使用id,环状结构保证了序列的填充不用非得在正数时刻进行。由于不依赖时间服务,可以向未来借用时间生成id。解决了瞬时高并发的问题。
  Leaf
  美团团队根据业务场景提出了基于号段思想的LeafSegment方案和基于Snowflake的LeafSnowflake方案。出现两种方案的原因是LeafSegment并没有满足安全属性要求,容易被猜测。无法用在对外开放的场景(如订单)。LeafSnowflake通过文件系统缓存降低了对ZooKeeper的依赖,同时通过对时间的比对和警报来应对Snowflake的时间回拨问题。
  Seqsvr
  微信并没有全局id,但他会为每个用户创建一组id,单个用户的id是顺序且唯一的。由于单个用户的吞吐量有限,该方案没有依赖时间服务,而是基于自增数和号段解决。
  场景分析
  基于部署成本和运维成本的考虑,事件中心被设计成既可以被集成部署,也可以独立部署的模式。所以在实际的环境中,往往会存在多个事件中心的实例。
  这些情况对id生成器提出额外的要求:id的生成不能依赖单一中心组件,比如停车解决方案的数据库挂了,不能影响排水解决方案的id生成。且一个环境多个实例生成的id不能重复。
  此外,应用需要在专有云,共有云等多种环境中部署。id生成器不能依赖时间服务。
  最后,考虑到物联网的场景下,往往会产生事件风暴。所以id的生成还必须能够支持瞬时高并发。
  综上现有的方案并不能100的满足我们的需求,需要对其进行改造。最终方案id结构
  基于以上的需求,我们采用snowflak算法作为基础进行了优化。我们依旧把64位分成4部分,其中:1bit符号,30bit时间偏移量,20bit机器id,13bit序列。
  30bit的时间偏移量我们使用秒作为单位,可以支持34年使用。
  20bit的机器id,支持每秒近50w台机器。
  13bit的序列,可以支持8000qps的请求,对于单个解决方案来说足够了。时间回拨
  时间回拨通常有几个思路:
  1。缓存每毫秒的seq记录,当回拨时间时,使用之前没有用的seq创建新id,缺点是有可能会不够用。
  2。等待当前时间到lastTime,缺点是当回拨时间过长时,可用性无法保证。
  3。不再持续获取服务器最新时间,只在启动时获取一次时间,之后每个节点采取自增的方式维护自己的lastTime。当发现时间回拨时,更新一次nodeId。缺点是id中的时间戳delta并不代表实际生成的时间的偏移量。
  经过评估第三种实现可以比较好的避免时间回拨问题。我们将nodeId持久化保存。每当机器启动时,或发现时间回拨时,在数据库里注册一个新的node记录,将新的id作为nodeId使用。CREATETABLEcsaworknode(idbigintunsignedNOTNULLAUTOINCREMENTCOMMENT主键,hostnameVARCHAR(64)NOTNULLCOMMENThostname,portVARCHAR(64)NULLCOMMENTport,typeINTNOTNULLCOMMENTnodetype:ACTUALorCONTAINER,gmtmodifieddatetimeNOTNULLDEFAULTCURRENTTIMESTAMPCOMMENTmodifiedtime,gmtcreatedatetimeNOTNULLDEFAULTCURRENTTIMESTAMPonupdateCURRENTTIMESTAMPCOMMENTcreatedtime,isdeletedbigintunsignedNOTNULLDEFAULT0COMMENT是否删除0:未删除,1:删除,PRIMARYKEY(id))DEFAULTCHARACTERSETutf8mb4COMMENTWorkNodeId;
  由于需要持久化nodeId的信息,就需要考虑单点故障的问题。在这里我们将nodeId分为两部分,5bit的groupId和15bit的workId。groupId是由事件中心颁发给各解决方案的的分段标识,用以区分各解决方案产生的事件,workId用来标识每个id生成器实例的机器。
  每个解决方案维护自己的workId,互相之间不影响。最终的nodeId为groupIdworkId32768。这样可以保证每秒215次的重启和时间回拨。
  瞬时高并发
  由于在解决时间回拨问题时,我们去掉了对时间服务的依赖,由每个实例维护自己的lastTime,所以具备了借用未来时间生成id的可能,在参考了uidgenenrator的实现后,我们这里直接使用uidgenerator作为seqId的生成逻辑。总结
  通过上诉的设计,我们实现了不依赖时间服务的id生成器。且在多个实例同时存在的情况下,可以做到互相之间不影响,生成的id不重复。

报告明年苹果新一代MacBookAir和11英寸iPadPrIT之家10月22日消息,据DigiTimes报道,苹果下一代MacBookAir将配备miniLED显示屏,并于2022年推出。现在,最新报告显示,预计新的miniLE……苹果MacBookAir最新爆料M2芯片非楔形设计,多彩颜色IT之家10月20日消息,据MacRumors报道,针对苹果可能在明年发布的新一代MacBookAir,现在有了最新的高精度爆料。放弃楔形设计爆料消息称,苹果将在会……曝苹果iPadPro2022拥有全新设计,支持无线充电,iP据MacRumors报道,彭博社记者MarkGurman最新爆料称,苹果正准备在2022年更新其三款iPad,包括入门级iPad、iPadAir和iPadPro。在Mar……美联储或数次拒绝德国运回黄金后,中国发出黄金信号,事情有新变世界黄金协会WGC在10月18日发布的最新报告中指出,9月黄金交易量上升,全球黄金ETF增长32,总持仓为3548吨,受到美联储激进货币转向、欧美国家高通胀、全球市场风险与经济……彭博社古尔曼苹果Mac芯片变强,应用生态却一团糟,跨平台开发北京时间11月22日消息,彭博社的马克古尔曼(MarkGurman)在其最新一期《PowerOn》栏目中称,随着苹果公司重新焕发其计算机硬件产品线的活力,Mac应用策略已变得比……Hyper推出15接口三屏4K扩展坞模块化设计,兼容2016IT之家11月16日消息,据MacRumors报道,配件商Hyper近期推出了一款全新的笔记本拓展坞,该拓展坞为长条设计,在作为拓展坞的同时还可以为用户的笔记本充当尾部垫高底座……腾讯QQ内测版8。8。90发布更稳定流畅,支持自定义状态感谢IT之家网友skyrocketing的线索投递!IT之家5月14日消息,腾讯QQ迎来v8。8。90内测版,官方日志显示,优化若干细节体验,更稳定流畅。另外据网友……爱马仕2022年销售额116亿欧元创新高营业利润率达40。5观点网讯:2月17日,爱马仕发布财报称,第四季度有机销售额增长23,至29。9亿欧元,2022年全年销售额达到创纪录的116亿欧元,较2021年的89。8亿欧元大幅增长。……曝苹果iPhone14Pro仍会采用10年历史的LightnIT之家4月18日消息,idropnews报道称,苹果今年仍将继续在其旗舰手机iPhone14Pro系列中Lightning接口,直到由MagSafe无线传输数据的无接口iPh……神州趣闻丨开摆啦,一只小僵尸的孤单日常在神州大陆之上有这么一只奇装异服的小僵尸,活跃在仙闻以及玩家社群中。她是来自君临天下区服的一只小僵尸。喜欢cos可爱的兔兔,拍摄一些有意思的视频花絮。据说,一只很勤勉的小僵尸最……苹果增强型屏下TouchID指纹识别专利曝光最早iPhoneIT之家3月19日消息根据新公布的专利申请显示,苹果正在完善尚未使用的显示屏下TouchID指纹扫描技术,此前消息称TouchID将重回iPhone。该专利申请已被提交给……5个技巧轻松吃够膳食纤维《中国居民膳食指南》推荐成人每天膳食纤维的摄入量为30克,但摄入不足成为普遍问题。日常推荐这样吃能更好补足:1。按公式摄入30克膳食纤维13两全谷杂豆1斤蔬菜半斤水果10克坚果……
苹果iPadOS15。4macOS12。3正式版发布Mac和IT之家3月15日消息,据MacRumors报道,在macOS12。3和iPadOS15。4面向公众发布之前,许多Beta测试者尝试使用通用控制功能,如果他们已经在Sideca……热记热火对交易得到克劳德持开放态度此前他曾助队闯入总决直播吧8月9日讯据《迈阿密先驱报》记者AnthonyChiang和BarryJackson联合报道,消息人士透露,热火对交易得到前锋克劳德持开放态度,但目前受限于球队工资帽,这……苹果LogicProXmacOS版10。7。3发布适配M1MIT之家3月15日消息,据AppleInsider报道,苹果公司为旗下LogicProX、GarageBand和MainStage音乐应用程序发布了更新,带来了新的功能、稳定性……依然火爆!苹果新款iPhoneSE35G手机预购交付时间已推IT之家3月15日消息,据MacRumors报道,苹果公司上周五通过其网站和AppleStore开放了iPhoneSE35G手机的预购,此后,美国地区该手机的部分配置预计交付时……InstagramCEO称苹果iPad人气不足,不值得开发A北京时间2月28日消息,社交媒体爱好者想必对Instagram并不陌生,但这款深受照片分享谜们喜爱的社交应用却并未推出iPad版本。据InstagramCEO亚当莫塞里(Ada……苹果与Skydance签约,将制作一系列AppleTV独占电IT之家1月24日消息,根据外媒appleinsider报道,SkydanceMedia公司已经与苹果AppleTV签署了一份多年合作协议,打算制作一系列原创、独占电影。……比特币维持在2万美元以下震荡,为何分析师预测熊市即将结束?最近,加密货币行情处于横盘震荡,下行趋势表现较为明显:比特币连续10天维持在2万美元以下震荡,最低价格为18155美元,最高价格为19954美元,而最近三天震荡幅度明显收……苹果MacBookPro14用户体验定制的M1Max64GB前言Hi各位IT之家家友,大家好啊。时间已经转眼到了2022年。回首2021,由于忙于实习及毕业相关等个人原因,撰写文案的时间也越来越少了,还请以前就关注我的朋友们谅解。……北京今年一季度消费者信心指数为115。1比上季度高8。8央广网北京4月11日消息(记者庞婷)记者从北京市统计局获悉,2023年一季度,全市消费者信心指数为115。1,比上季度高8。8点。其中,消费者满意指数为110。8,比上季度高6……时隔三年,Netflix网飞再次允许iOS用户通过App直接IT之家11月15日消息,众所周知,苹果会通过AppStore支付系统进行1530的抽成,Spotify和Netflix等一些公司则通过取消iOSApp订阅的选项来避免支付抽成……苹果iOS平台限制,报告称Netflix网飞将通过AppStIT之家11月8日消息,Netflix近日宣布推出其NetflixGames功能,该功能将允许Netflix用户在他们的移动设备上玩游戏,已支持Android平台。Net……苹果Shazam再次向用户免费提供多达5个月的AppleMuIT之家12月23日消息,据9to5Mac报道,自从苹果在2018年收购Shazam以来,该公司一直利用该应用来推广AppleMusic,尤其是在假日季节。现在,该公司又推出了……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网