分布式发号器——Vesta

1、基于时间戳 
比如流水号规则如下:XX-YYYYMMDD-N位随机数,这也是企业级应用开发常用的规则。此流水号对人比较友好,可识别性高,但容量受后面随机数的限制,且数据量越大,生成时难度越高。前三部分每天的流水号基本固定,后面的N位随机数生成后,需要校验此前不存在,可依赖redis的set机制,每天的随机数都写到一个set集合中[set容易达42亿之多,完全够用],重新生成后要与set集合作比对,以确保其唯一性。一天内不重复,再结合确定日期来保证其唯一性。

N位随机数生成时,可基于系统时间戳,再与一个大数取模生成。 
2、UUID 
不连续,占用空间大,不利于B+发挥作用,在写的操作的是不能进行append,只能进行insert,记录占用空间比较大 
3、Vesta 
通用ID产生器,统一发号器,具有全局唯一性,大概有序,可反解,可制造,支持4种发布方式。rest发布模式netty,rest发布模式tomcat,中心服务器发布模式,嵌入式发布模式 
4、snowflake 
发布模式比较单一,而且语言是Scala 
0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

第一位为未使用,接下来的41位为毫秒级时间(41位的长度可以使用69年),然后是5位datacenterId和5位workerId(10位的长度最多支持部署1024个节点) ,最后12位是毫秒内的计数(12位的计数顺序号支持每个节点每毫秒产生4096个ID序号)

一共加起来刚好64位,为一个Long型。(转换成字符串长度为18)

snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。据说:snowflake每秒能够产生26万个ID。 
5、redis分布式id生成器 
6、mongodb的objectId

公司情况,之前公司采用的是uuid,在业务发展的过程中,发现uuid相对于long类型来说更耗费性能,而且在范围查询的时候对索引的利用率效果不是很好。再加上公司有一些其他的语言,所以经过考虑公司采用Vesta发号器。
-

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值