Twitter Snowflake

2024-02-18 00:38
文章标签 snowflake twitter

本文主要是介绍Twitter Snowflake,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

http://blog.yxwang.me/2012/08/twitter-snowflake/


这是一篇两年前 Twitter 开发团队写的文章,今天挖出来研究了一下。原文地址 http://engineering.twitter.com/2010/06/announcing-snowflake.html

Twitter 早期用 MySQL 存储数据,随着用户的增长,单一的 MySQL 实例没法承受海量的数据,开发团队就开始用 Cassandra 和 sharded MySQL 替代原有的系统。然而和 MySQL 不同的是,Cassandra 没有内置为每一条数据生成唯一 ID 的功能,因为在一个分布式环境下,很难有完美的 ID 生成方案。

对于 Twitter 而言,这样的 ID 生成方案要满足两个基本的要求,一是每秒能生成几十万条 ID 用于标识不同的 tweet;二是这些 ID 应该可以有个大致的顺序,也就是说发布时间相近的两条 tweet,它们的 ID 也应当相近,这样才能方便各种客户端对 tweet 进行排序。

第一个要求意味着 ID 生成要以一种非协作的(uncoordinated)的方式进行,例如不能有一个全局的原子变量。

第二个要求使得 tweet 按 ID 排序后满足 k-sorted 条件。如果序列 A 要满足 k-sorted,当且仅当对于任意的 p, q,如果 1 <= p <= q - k (1 <= p <= q <= n),则有 A[p] <= A[q]。换句话说,如果元素 p 排在 q 前面,且相差至少 k 个位置,那么 p 必然小于或等于 q。如果 tweet 序列满足这个条件,要获取第 r 条 tweet 之后的消息,只要从第 r - k 条开始查找即可。

Twitter 解决这两个问题的方案非常简单高效:每一个 ID 都是 64 位数字,由时间戳、节点号和序列编号组成。其中序列编号是每个节点本地生成的序号,而节点号则由 ZooKeeper 维护。

具体的参数可以在这个 IdWorker.scala 中看到。序列编号有 12 位,意味着每个节点在每毫秒可以产生 4096 个 ID。节点号在源码中被分成两部分,数据中心的 ID 和节点 ID,各自占 5 位。时间戳则是记录了从 1288834974657 (Thu, 04 Nov 2010 01:42:54 GMT) 这一时刻到当前时间所经过的毫秒数,占 41 位(还有一位是符号位,永远为 0)。


这篇关于Twitter Snowflake的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719496

相关文章

哈希—— POJ 3349 Snowflake Snow Snowflakes

对应POJ题目:点击打开链接 Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536KTotal Submissions: 33595 Accepted: 8811 Description You may have heard that no two snowflakes are alike. Y

分布式系统中的Dapper与Twitter Zipkin:链路追踪技术的实现与应用

目录 一、什么是链路追踪? 二、核心思想Dapper (一)Dapper链路追踪基本概念概要 (二)Trace、Span、Annotations Trace Span Annotation 案例说明 (三)带内数据与带外数据 带外数据 带内数据 数据的传递与集中 (四)采样 采样的目的 采样率的调整 采样机制的实现 (五)存储 为什么选择 BigTable 存

《前端攻城狮 · Snowflake 雪花算法》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍 文章目录 写在前面的话利用现有库自定义实现雪花ID和UUID总结陈词 写在前面的话 雪花 ID 是一种分布式唯一 ID 生成算法,通常由 Twitter 提出的。它的

Bootstrap tutorial: A responsive design tutorial with Twitter Bootstrap 3

原文:http://www.revillweb.com/tutorials/bootstrap-tutorial/ Introduction This bootstrap tutorial will show you how to create a responsive template using twitter bootstrap 3. We will create a res

Twitter的分布式自增ID算法snowflake - C#版

概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序I

图解 Twitter 架构图

写在前面 两年前,马老板收购了twitter,并且做了一系列的大动作。那么今天我们来看一下这个全球最火的软件之一的架构。 Twitter解析 开始之前,我先提前说明一下,我之前不是做搜推广的,所以对这些了解不是很深,如果有搜推广大佬看到有错的地方,欢迎指出来,感谢! 大体框架 各个部分拆解来看 1. 前端请求部分 这部分是 twitter 的前端页面请求,twitter

poj3349 Snowflake Snow Snowflakes

大致题意: 在n (n<100000)个雪花中判断是否存在两片完全相同的雪花,每片雪花有6个角,每个角的长度限制为1000000  两片雪花相等的条件: 雪花6个角的长度按顺序相等(这个顺序即可以是顺时针的也可以是逆时针的) 大概思路: 用连加求余法求key值(用同余定理简化),链地址法解决冲突 写好左旋转模块和右旋转模块,进行地址冲突之后的比较 边插入边比较

利用医学Twitter进行病理图像分析的视觉-语言基础模型| 文献速递-视觉通用模型与疾病诊断

Title 题目 A visual–language foundation model for pathology image analysis using medical Twitter 利用医学Twitter进行病理图像分析的视觉-语言基础模型 01 文献速递介绍 缺乏公开可用的医学图像标注是计算研究和教育创新的一个重要障碍。同时,许多医生在公共论坛上(如医学Twi

twitter 的一些运营经验

http://assets.en.oreilly.com/1/event/29/Fixing%20Twitter_%20Improving%20the%20Performance%20and%20Scalability%20of%20the%20World's%20Most%20Popular%20Micro-blogging%20Site%20Presentation.pdf   Key p

全局唯一ID生成常见的几种方式和twitter/snowflake(雪花算法)解析

全局唯一ID生成常见的几种方式和twitter/snowflake(雪花算法)解析  全局唯一ID生成常见的几种方式: 1,(twitter/snowflake)雪花算法 2,利用数据库的auto_increment特性 3,UUID 4,其他(如redis也有incr,redis加lua脚本实现twitter/snowflake算法)   一、 (twitter/snowflake