[关闭]
@chris-ren 2016-07-08T05:50:42.000000Z 字数 851 阅读 1370

Twitter的分布式自增ID算法Snowflake

Snowflake Twitter 自增ID


摘要

Twitter把存储系统从MySQL迁移到Cassandra的过程中,由于Cassandra没有顺序ID生成机制,因此自己开发了一套全局唯一ID生成服务:Snowflake。

正文

Twitter早期使用MySQL存储数据,随着用户的增长,单一MySQL实例无法支持海量数据,Twitter开始把存储系统从MySQL迁移到Cassandra,但是Cassandra没有内置的顺序ID生成机制,因此Twitter开发了一套分布式系统全局唯一ID生成服务:Snowflake。

对于Twitter而言,必须满足每秒上万条消息的请求,并且每条消息能够分配一个全局唯一的ID,因此,ID生成服务要求必须满足高性能(>10K ids/s)、低延迟(<2ms)、高可用的特性,同时生成的ID还可以进行大致的排序,以方便客户端的排序。

Snowflake满足了以上的需求。Snowflake生成的每一个ID都是64位的整型数,它的核心算法也比较简单高效,结构如下:

Snowflake是一个高效方便的GUID生成算法,可用性强,速度快并且可以根据时间排序。但是,就目前来看部署Snowflake需要引入ZooKeeper和Snowflake专用服务器,Twitter也声明希望可以让Snowflake运行在Twitter以外更多的环境中,如果可以实现,Snowflake的使用就会更方便。

Snowflake是用Scala实现的,如果想要了解更多细节,请移步至Snowflake项目

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注