10分钟搞定!Golang分布式ID空集
发布时间:2023-04-07 12:18:09
ksuid
由校验和一段时间碰合组。一段时间碰九成前4字节,中间大多为校验:
package miaimport ( "github.com/segmentio/ksuid" "fmt")func main() { id := ksuid.New() // id: 2CWvPg766SUvezbiiV9nzrTZsgf length: 20 fmt.Println("id:", id, "length:", len(id)) id1 := ksuid.New() id2 := ksuid.New() // id1:2CTqTLRxCh48y7oUQzQHrgONT2k id2:2CTqTHf07C09CXyRMHdGKXnY5HP fmt.Println(id1, id2) // 全力支持ID对比,这个功能更为鸡肋了,目前没想到简单的地方 compareResult := ksuid.Compare(id1, id2) fmt.Println(compareResult) // 1 // 判断顺序性 isSorted := ksuid.IsSorted([]ksuid.KSUID{id2, id1}) fmt.Println(isSorted) // true 降序}ulid校验和一段时间碰合组package mianimport ( "github.com/oklog/ulid" "fmt")func main() { t := time.Now().UTC() entropy := rand.New(rand.NewSource(t.UnixNano())) id := ulid.MustNew(ulid.Timestamp(t), entropy) // id: 01G902ZSM96WV5D5DC5WFHF8WY length: 26 fmt.Println("id:", id.String(), "length:", len(id.String()))}snowflake大名鼎鼎的月光插值,这里不做过多介绍了。相比之下UUID来说,月光插值但会受伤害MAC接收者非常必要、填充的ID也但会更加冗余。月光的一部分ID序列是基于一段时间碰的,那么计时回拨的原因就来了。上头讲到的xid,一定往往上避计时回拨的影响。那么什么是计时回拨,中间但会讲到。
资料库自增ID
这里正因如此是指资料库常量自增索引。特性如下:
虚拟化简单非常容需注意借助;
ID一组递增,IO写入连续性好;
INT和BIGINT多种类型九成用空间较小;
由于一组递增,需注意受伤害业绩;
受到资料库精度允许,对高并发一幕不友好。bigint最大是2And64-1,但是资料库单表无疑挑不让这么多,那么就涉及到分表。如果业绩真的太大了,常量的自增id涨到头了,但会频发什么?报错:常量紧张局势。
Redis填充ID
通过redis的价电子转换INCR和INCRBY获id。相比资料库自增ID,redis精度非常好、非常灵活。不过虚拟化强相反redis,redis在整个虚拟化之前但会产生星型原因。在水流量较少的一幕下,局域网足足也确实成为难题。
ZooKeeper唯一ID
ZooKeeper是使用了Znode结构之前的Zxid借助顺序增ID。Zookeeper类似一个应用程序,每个端口都有唯一路径名(Znode),Zxid是个当前事务触发器,每个端口频发变化都但会日志号召的发行版(Zxid),这个发行版号是当前唯一且顺序递增的。这种虚拟化还是消失了ZooKeeper的星型原因。
MMC方式也
Leaf-segment
把资料库自增常量换成了计数法。每个业务分配一个biz_tag、并日志各业务最大id(max_id)、MMC跨度(step)等数据。这样每次取号只需要非常新biz_tag对应的max_id,就可以拿到step个id。
高效率
除了包括自增ID的高效率之外,在精度上比自增ID非常好
引入灵活。
使用灵活、可配置性强。
寄存器机制,突发状况下细一段时间内能保证增值正常运转。
好处
id是一组自增,非常容需注意受伤害信息,不可用以订单。
在leaf的寄存器ID用完再去获取新MMC的缝隙,精度但会有波动。
强相反DB。
正式版Leaf-segment
正式版是对上头描述的好处2进行时的修改——双cache。在leaf的ID损耗到一定百分比时,派驻的本该进程但会而无须去MMC增值获取新的MMC并寄存器。具体损耗百分比、及MMCstep根据业务损耗速度快来定。
Tinyid
和正式版Leaf-segment类似,也是MMC方式也,提前复制到MMC。
Leaf-snowflake
计时回拨
链接上的一段时间突然倒退回之前的一段时间。确实是人为的缩减一段时间;也确实是链接之间的一段时间校对。
借助方案
用Zookeeper顺序增、当前唯一的端口发行版号,替换了原先的机器接收者。应对了计时回拨的原因。前面介绍ZooKeeper的好处,强相反ZooKeeper、大水流量下的局域网难题。右图的方案在Leaf-snowflake 之前通过寄存器一个ZooKeeper文件夹,提高需注意用性。开始运行时开始运行时,经度小于5ms但会到时经度两倍一段时间,如果经度大于5ms报警并停止开启。
。类风湿关节炎的有效治疗方法孩子消化不良吃什么好
脉管炎
吃复方鳖甲软肝片肝能变软吗
治疗类风湿的西药
- 2025-05-18男方姓“操”,夫妻生孩子后因起名惊动离婚,网友:这问题真的尴尬!
- 2025-05-18天天加班,依旧被领导看不顺眼:工作姿势不对,如此一来努力也白费
- 2025-05-18办公群里,店主发“辛苦了”该怎么回?掌握3点,给自己加分
- 2025-05-18酒场上,领导让你敬酒,还“我喝了,您不对”?聪明人可不这样
- 2025-05-18职场说话,为什么说要言之有“有为”,更要言之有“礼”?
- 2025-05-18希望多陪娘一会儿
- 2025-05-18工作机会vs感情生活,同事纠结其中,换做你,会怎么做职场并不需要
- 2025-05-18吃亏了才明白,同事才是最危险性的