第39讲 | 谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
专栏的绝大部分主题都侧重于Java语言和虚拟机,基本都是单机模式下的问题,今天我会补充一个分布式相关的问题。严格来说,分布式并不算是Java领域,而是一个单独的大主题,但确实也会在Java技术岗位面试中被涉及。在准备面试时,如果有丰富的分布式系统经验当然好;如果没有,你可以选择典型问题和基础技术进行适当准备。关于分布式,我自身的实战经验也非常有限,专栏里就谈谈从理论出发的一些思考。
今天我要问你的问题是,谈谈常用的分布式ID的设计方案?Snowflake是否受冬令时切换影响?
典型回答
首先,我们需要明确通常的分布式ID定义,基本的要求包括:
-
全局唯一,区别于单点系统的唯一,全局是要求分布式系统内唯一。
-
有序性,通常都需要保证生成的ID是有序递增的。例如,在数据库存储等场景中,有序ID便于确定数据位置,往往更加高效。
目前业界的方案很多,典型方案包括:
-
基于数据库自增序列的实现。这种方式优缺点都非常明显,好处是简单易用,但是在扩展性和可靠性等方面存在局限性。
-
基于Twitter早期开源的 Snowflake 的实现,以及相关改动方案。这是目前应用相对比较广泛的一种方式,其结构定义你可以参考下面的示意图。
Java核心技术面试精讲
附上资源MP4下载地址
我用夸克网盘分享了「1001-Java核心技术面试精讲(更新完毕)」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。
链接:https://pan.quark.cn/s/9b6c06b216fd
失效访问