在分布式开发中,唯一主键的设计非常重要,我们今天来看看分布式ID的常用设计
首先我们先明确一下分布式ID的定义
1.全局唯一,不是单点系统的唯一,而是分布式系统的唯一
2.有序性,通常需要保证生成的ID是有序递增的,比如在数据库中,递增有助于做分区,提高查询效率
典型的方案有很多
-基于数据库自增序列的实现,这种方式优缺点都非常明显,好处是简单好用,但是在扩展性和可靠性方面存在局限性
-基于Twitter早期开源的Snowflake的实现以及相关改动方案,这是目前应用相对广泛的一种方式,整体长度通常是64位(1位标示位+41位时间戳+10位WorkerID+12位序列),通常使用java 的long类型存储
另外Redis、Zookeeper、MongoDB等中间件也都有各种唯一ID解决方案。