Snowflake
(雪花)是Twitter
开源的高性能ID
生成算法(服务)。
上图是Snowflake
的Github
仓库,master
分支中的REAEMDE
文件中提示:初始版本于2010
年发布,基于Apache Thrift
,早于Finagle
(这里的Finagle
是Twitter
上用于RPC
服务的构建模块)发布,而Twitter
内部使用的Snowflake
是一个完全重写的程序,在很大程度上依靠Twitter
上的现有基础架构来运行。
而2010
年发布的初版Snowflake
源码是使用Scala
语言编写的,归档于scala_28
分支。换言之,大家目前使用的Snowflake
算法原版或者改良版已经是十年前(当前是2020
年)的产物,不得不说这个算法确实比较厉害。scala_28
分支中有介绍该算法的动机和要求,这里简单摘录一下:
动机:
Cassandra
中没有生成顺序ID
的工具,Twitter
由使用MySQL
转向使用Cassandra
的时候需要一种新的方式来生成ID
(印证了架构不是设计出来,而是基于业务场景迭代出来)。要求:
10K
个ID
,加上网络延迟响应速度要在2ms
内。ID
的长度在64 bit
或更短。ID
生成方案需要和存储服务一样高可用。下面就Snowflake
的源码分析一下他的实现原理。