谈谈常用分布式ID的设计方案

  需要明确通常的分布式 ID 的定义,基本包括:

  • 全局唯一,区别于单点系统的唯一,全局是要求分布式系统内唯一。
  • 有序性,通常要保证生成的 ID 是有序递增的。

 
  目前业界的的方案主要是:

  • 基于数据库自增序列的实现。这种方式优点和缺点都非常明显,好处是简单易用,但是在扩展性和可靠性等方面存在局限性。
  • 基于 Twitter 早期开源的Snowflake的实现,以及相关改动方案。其结构定义可以参考下面的示意图。

分布式id结构图

其中 10 位的WorkerID,标准定义是 5 位数据中心 + 5 位机器编码,以区分不同的集群节点。
最后的 12 位就是单位毫秒内可生成的序列号数目的理论极限。

  在明确的业务场景中,我们到底需要一个什么样的分布式ID呢,除了唯一性和有序,通常还希望分布式ID:

  • 有意义,也就是说包含更多的信息,比如时间和业务信息。
  • 高可用性,取决于我们业务对扩展性,性能方面的要求。
  • 紧凑性,ID 的大小可能受实际应用的制约,例如太长的ID会降低 MYSQL 等数据库索引的性能。

分享一个很好的分布式ID的实现 westid.

Reference: 极客时间-Java核心技术36讲 

-------------本文结束感谢您的阅读-------------
Thank you for your encouragement