Snowflake ID 算法
背景
假设我们有一个分布式系统,系统中需要维护全局 id
字段,我们可以把它认为是唯一的标识,不能够重复出现,那么问题来了,我们应该如何生成这样的 id
呢?
其实很容易想到的一种解决方式就是使用 Redis
的键值对了,每次更新的时候直接调用 incr
,生成的 id 也是唯一的,还有一种方式就是使用 MySQL
或者其他的数据库,因为我们知道 MySQL
中可以生成自增主键,使用这个主键作为一个分布式 id
也是可行的。
但是上面的这两种方式效率不会特别高,并且依赖于第三方,我们如果想要更高效的生成分布式 id
,那么最好的方式就是尽量本地生成,不需要和其他节点进行协商,但是有一个问题出现了,如何保证 id 不重复?,我们可以使用 Snowflake
算法来解决该问题。