| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 分布式主键生成设计策略 -> 正文阅读 |
|
[大数据]分布式主键生成设计策略 |
1 写作目的这几天被虾皮裁员的消息刷屏了,实话实说互联网的行情确实很差,各处都在裁员。而且最近在忙试用期转正答辩,还不错,光荣的成为了一个大厂的正式员工,很庆幸在这么不稳定的情况下还能有自己的一寸方土。还扯别的干什么呢?开卷吧。 注意:本文只讲分布式主键的设计实现原理,不讲具体代码的实现细节。默认都不是单节点。 2 为什么要用分布式主键在我们业务量不大的时候,单库单表完全可以支持现在的业务,数据再大一点读写分离也算OK。但是随着数据量的增长,单库单表终究是抗不住的。那就需要分库分表。分库分表后肯定不能依赖分表中的自增主键。因此需要一个 生成全局唯一ID的 主键生成策略。 3 分布式主键的基本要求全局唯一:不管什么主键,都需要全局唯一。 4 常见的分布式主键生成策略4.1 UUID在Java中自带的UUID就具有唯一性。如下面代码所示。生成的结果不是数字,是字符串。那
优点
缺点
4.2 MySQL4.2.1 自增主键4.2.1.1单点MySQL(单Master)基于数据库的自增主键充当分布式ID服务器。 优点
缺点
4.2.1.2集群MySQL(多Master)集群也是基于数据库的自增实现分布式ID服务器。
MySQL_2 配置:
设计方式如下图所示。那么整体还是有序的。不过每一个DB承担的流量就是1/2。
缺点
4.2.2 区间号段(☆☆☆☆☆)我们以单节点为例,在数据库中维护一个SEQUENCE_ID表。表中定义的是一个order主键生成规则和user主键生成规则。简单对表做一下解释,biz_code表示一种主键,max_id表示已经分配的最大ID,step表示步长,用于每次生成一批主键。
在上面数据库的原始数据之上,此时上线了3个节点的订单服务。
[max_id + 1 , max_id + step]这批主键会返回给Order_Node1,即[11001,12000],此时会更新表的数据为
每个节点的内存中存的是一批主键ID,当时候完毕后再去申请一批数据,效率极高。 优点
缺点
双Buffer优化针对 区间号段 中出现尖刺的情况,使用双Buffer进行优化。如下图所示,我首先申请一批主键,当使用到该批次的10%时,后台起一个线程申请下一批主键,这样一种预加载的情况可以时主键串联起来,有效解决上面的请求RT抖动情况。 4.3 Redis原理就是利用redis的 incr命令实现ID的原子性自增。
优点
缺点
4.4 SnowFlake雪花算法算法简介雪花算法(Snowflake)是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器,不过设计思路还是相同和想通的。
核心思想多种唯一的值 进行拼接,使其更唯一。
其中这种思想还挺常见的。 优点
缺点
时钟回拨问题常见的解决方案其实很多大厂基于雪花算法开源的分布式ID解决方案一方面偏重于64的设计,另一方面偏重于时钟回拨出现后的解决方案优化。
5 总结阿里的TDDL和美团的Leaf 有一部分是基于MySQL的区间号段实现的。目前主流的分布式主键方案主要有两种:
6 参考一口气说出9种分布式ID生成方式,面试官有点懵了 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/16 0:08:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |