在集群高并发环境下,要保证分布式唯一全局ID的生成,是一个很重要的问题。传统的方式如自增、UUID 等方法在分布式环境下容易出现问题,因此需要采用特殊的方案来解决。
一般来说,分布式唯一全局 ID 生成常常使用的三种方案是:雪花算法、Twitter 的 snowflake 算法和 MongoDB 的 objectId 算法。
雪花算法是由 Twitter 开源的一种 ID 生成算法,其主要思想是将一个 64 位的二进制数划分为不同的部分,再从不同部分中获取信息,最终组合成一个唯一的 ID。雪花算法的具体实现方式如下:
雪花算法通过机器节点编号和序列号两部分保证了分布式环境下的唯一性,同时也解决了自增等方式在分布式环境中产生冲突的问题。

Twitter Snowflake 算法是基于雪花算法改进而来的一种 ID 生成算法,也是目前应用最为广泛的一种方案。Snowflake 的主要思路就是将一个 64 位的整数分为三个部分:时间戳、机器标识和序列号。各部分的位数如下:
这种方法相比雪花算法还增加了数据中心标识,让标识更加完备,并且解决了单点故障的问题,提高了系统的可用性。
MongoDB objectId 算法是 MongoDB 数据库生成的一种 ID 生成算法。它是一种基于时间的 UUID 实现,也就是说它由时间信息、机器编号以及随机数构成。
mongoDB objectId 算法采用了一种随机方式,同时采用基于时间的策略保证ID的顺序性。使用简单,每台 MongoDB 服务器都能通过自己的 IP 地址获得唯一性。
在实际应用中,以上方法都能够很好地解决分布式环境下唯一全局 ID 的生成问题。无论选择哪种方式,都需要在实际应用过程中根据业务需求定制化开发,比如加入机器号、数据中心等信息,以便于做唯一性校验。