twitter雪花算法|snowflake @ 胡巴 | 星期二,十月 19 日,2021 年 | 2 分钟阅读 | 更新于 星期二,十月 19 日,2021 年

本文主要介绍分布式唯一ID生成算法–雪花算法。

分布式唯一ID的要求

  • 全局唯一性(must)
  • 趋势递增(must)
  • 单调递增(should)
  • 安全(无规律可循)(should)

twitter雪花算法原理

雪花算法使用一个64位的整数来表示一个唯一ID

这64bits如图被分成了5个部分:

  • 1bit 作为符号位,总是为0
  • 41bits 用来存储毫秒时间戳,计算后可知约可用69年
  • 5bits 用来存储数据中心ID,最多可以表示32个数据中心
  • 5bits 用来存储工作机器ID,最多可以表示32台工作机器
  • 12bits 用来在同节点时间相同时作为自增ID标识唯一性,同1ms可以表示最多4096个ID,所以理论上1s内可以生成约409W个ID

注意:数据中心ID+工作机器ID可以唯一确定一个节点,最多可以表示1024个节点

twitter雪花算法的优缺点

根据雪花算法的原理,我们可以很清楚的看出雪花算法有哪些优缺点

优点:

  • 无依赖(Redis、DB等)
  • 秒级别生成百万级ID,速度够快
  • 生成的ID是趋势递增的,有利于提升MySQL数据库的插入效率

缺点:

  • 强依赖时间,时钟回拨会导致生成重复ID
  • 1024节点数不一定够用
  • 机器ID分配后无法自动回收,重新使用

非一成不变

雪花算法并不是一成不变的,业务可以根据自身需求,对雪花算法进行变种开发,进而定制出符合自身业务需求的雪花算法。

比如:5bits数据中心ID,5bits工作机器ID,你可以拆分成3bits数据中心ID,7bits工作机器ID,这样机器ID就可以多一些,数据中心ID就会少一些。

再比如:你觉得41bits的太多了,可能你们用不了那么些年,就可以分几bits出来用来干别的事情。

开源分布式ID框架

以下两个框架分别以不同方式在不同程度上解决了twitter雪花算法的缺点,感兴趣的小伙伴可自行到github中进行研习。

  1. 百度的UIDGenerator
  2. 美团的Leaf

公众号: 无限递归

欢迎扫码关注,共同学习进步

alt 搜索公众号:无限递归

Copyright © 2017 - 2024 boboidea.com All Rights Reserved 波波创意软件工作室 版权所有 【转载请注明出处】

avatar
基本信息
  • 姓名:bobo
  • 花名:胡巴
  • 性别:男
  • 血型:O型
  • 星座:白羊座

联系方式

  • 所在地:上海
  • QQ:279250819
  • 微信号:wanghuiwoshinideyou
  • 电子邮件:279250819@qq.com

博客地址

公众号

alt 无限递归

工作经历
  • 2022.5 - 至今

    • 公司:乐府互娱
    • 职位:高级SDK工程师
  • 2019.6 - 2022.4

    • 公司:萌推(上海突进网络科技有限公司)
    • 职位:中级PHP工程师 & 初级golang工程师
    • 荣誉:
      • 绩效A连续得主
      • 月度之星
      • 优秀个人奖
    • 所作所为:
      • 利用ES优化OMS、MMS管理系统商品列表查询
      • 利用消息队列、Redis、乐观锁优化商品审核流程
      • 利用Redis对商家端接口进行有效限流
      • 优化商品相关表索引,提升SQL查询速度
      • 商品中台构建,统一商品相关操作
      • 大表优化(数据分离、分表、大字段拆分)
      • 掌握所有商品核心流程
  • 2018.5 - 2019.5

    • 公司:DaDa英语(上海卓赞教育信息科技有限公司)
    • 职位:中级PHP开发工程师
    • 荣誉:无
    • 所作所为:
      • 利用ES优化教师CMS系统统计数据接口至500ms内
      • 工单系统开发及持续优化
      • 教师CMS系统的功能开发及持续优化
  • 2018.3 - 2018.5

    • 公司:波奇(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:同下
    • 所做作为:如下
  • 2016.7 - 2018.3

    • 公司:光橙(上海)信息科技有限公司
    • 职位:初级PHP开发工程师
    • 荣誉:
      • 年度最佳进步奖
    • 所作所为:
      • 利用Redis提升商详接口最佳响应速度至50ms内
      • 利用Redis提升双11活动页可承受QPS至500以上
      • 利用Redis对接口进行简单限流
      • 与小伙伴合作提升搜索质量(ES初识)
      • 其他C端接口的开发及优化
      • B端商城老页面的维护及优化
SKILLS

编程语言

  • PHP
  • Golang
  • Shell
  • JAVA
  • JS
  • HTML\CSS

数据库

  • MySQL
  • Redis
  • Clickhouse

消息中间件

  • RabbitMq
  • Kafka

文档撰写

  • Swagger
  • Markdown

技术框架

  • Laravel
  • gin

搜索引擎

  • ElasticSearch

抓包工具

  • Charles