设计一款永不重复的高性能分布式发号器(全局唯一id)

分布式系统中,产生唯一流水号的服务系统俗称发号器。对于这个全局唯一id的要求,有如下几条

1、全局唯一

2、粗略有序

3、可反解(如果id有时间,且可反解,可以省略很多timestamp的字段)

4、可制造(如果出了问题,手工处理,如果数据污染,洗数据,如果想要回复到问题的时间节点,需要发号器可复制可恢复可制造)

5、高性能

6、高可用

7、可伸缩

因此

我们不使用uuid,因为他比较长,占用空间大,不满足【高性能】,它不是【有序的】,会导致b+树索引有过多随机写操作。

我们也不使用基于数据库的解决方案。例如通过调整自增字段或者数据库的sequence步长。虽然可以解决问题,但是,服务节点固定,sequence步长也固定,对于水平扩展,增加服务节点不友好【可伸缩】,依赖数据库,对数据库造成压力【高性能】。疏散管理sequence,提高了维护成本。

snowflake是一种流行的发号器,但是很难直接使用。

推荐的发号器是vesta。

发布模式:嵌入发布,中心服务器发布,rest发布

id类型:最大峰值,最小粒度

猜你喜欢

转载自www.cnblogs.com/hekiraku/p/12048917.html