Java 面试题
目录

Java 中如何实现一个分布式 ID 生成器?

· 约 7 分钟读完 · 第 242 / 274 章

推荐答案

在 Java 中实现一个分布式 ID 生成器,可以使用以下几种常见的方法:

1. 使用 Snowflake 算法

Snowflake 是 Twitter 开源的一种分布式 ID 生成算法,生成的 ID 是一个 64 位的长整型数字,结构如下:

  • 1 位符号位(始终为 0)
  • 41 位时间戳(毫秒级)
  • 10 位机器 ID(可以配置)
  • 12 位序列号(每毫秒生成 4096 个 ID)

2. 使用 UUID

UUID 是一种通用唯一标识符,可以生成一个 128 位的唯一 ID。Java 中可以使用 java.util.UUID 类来生成 UUID。

3. 使用数据库自增 ID

可以通过数据库的自增 ID 功能来生成分布式 ID。每个应用实例在插入数据时,数据库会自动生成一个唯一的 ID。

本题详细解读

1. Snowflake 算法

Snowflake 算法是一种基于时间戳的分布式 ID 生成算法,适用于高并发场景。它的优点是生成的 ID 是趋势递增的,且不依赖于数据库等外部系统。缺点是如果系统时钟回拨,可能会导致 ID 重复。

2. UUID

UUID 是一种通用唯一标识符,生成的 ID 是全局唯一的。优点是生成简单,不依赖于任何外部系统。缺点是生成的 ID 较长,且无序,不适合作为数据库主键。

3. 数据库自增 ID

通过数据库的自增 ID 功能生成分布式 ID,优点是实现简单,且生成的 ID 是有序的。缺点是依赖于数据库,可能会成为系统的瓶颈。

在实际应用中,可以根据具体需求选择合适的分布式 ID 生成方案。