分布式系统中,有一些须要使用全局惟一ID的场景,这种时候为了防止ID冲突可使用36位的UUID,可是UUID有一些缺点,首先他相对比较长,另外UUID通常是无序的。分布式
有些时候咱们但愿能使用一种简单一些的ID,而且但愿ID可以按照时间有序生成。测试
而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,由于Cassandra没有顺序ID生成机制,因此开发了这样一套全局惟一ID生成服务。spa
snowflake的结构以下(每部分用-分开):blog
一共加起来恰好64位,为一个Long型。(转换成字符串后长度最多19)排序
snowflake生成的ID总体上按照时间自增排序,而且整个分布式系统内不会产生ID碰撞(由datacenter和workerId做区分),而且效率较高。经测试snowflake每秒可以产生26万个ID。ip