| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 分布式唯一ID生成企业级方案(含时钟回拨生产级解决) -> 正文阅读 |
|
[大数据]分布式唯一ID生成企业级方案(含时钟回拨生产级解决) |
目录 分布式唯一ID要求① 唯一性:生成的ID全局唯一,在特定范围内冲突概率极小。 ② 有序性:生成的ID按某种规则有序,便于数据库插入及排序递增 ③ 可用性:可保证高并发下的可用性, 确保任何时候都能正确的生成ID。 ④ 自主性:分布式环境下不依赖中心认证即可自行生成ID。 ⑤ 安全性:不暴露系统和业务的信息, 如:订单数,用户数等。 常见的几种方案一. 数据库自增主键
二. UUID
三. SnowFlow算法
四. Redis自增机制
五. flickr 雅虎公司方案该方案和方案一有点像,都是基于自增id实现的唯一优化就是用replace into替代了insert into,避免表数据量过大,缺点也在于数据库并发能力不高,所以适用场景,就是分库分表的时候,低并发,用这个方案生成唯一id,低并发场景下可以用于生产。
replace into语法替代insert into,避免表行数过大,一张表就一行数据,然后再select获取这个表的最新id,last_insert_id()函数是connection级别的,就你这个连接的最近insert生成的id,多个客户端之间没影响。 六. flickr方案的高并发优化优化点:每次调用replace into获取到的id做成一个号段,比如1 代表1-10000,2代表10000-200000,号段维护到jvm内存里,每次获取直接内存加1。当超过最大号段时,再调用replace into进行号段的刷新。这样做就解决了高并发的问题。 缺点:
适用场景:大部分生产是可以使用的,对与瞬时量不是特别特别大的还是可以使用 时钟回拨解决方案
Leaf——美团点评分布式ID生成系统GitHub - Meituan-Dianping/Leaf: Distributed ID Generate Service Leaf-segment数据库方案该方案就类似于flickr,只是在原来的基础上做了优化。 优化点:双buffer优化 Leaf服务内部有两个号段缓存区segment。当前号段已下发10%时,如果下一个号段未更新,则另启一个更新线程去更新下一个号段。当前号段全部下发完后,如果下个号段准备好了则切换到下个号段为当前segment接着下发,循环往复。 Leaf-snowflake方案Leaf-snowflake方案完全沿用snowflake方案的bit位设计,即是“1+41+10+12”的方式组装ID号。对于workerID的分配,当服务集群数量较小的情况下,完全可以手动配置。Leaf服务规模较大,动手配置成本太高。所以使用Zookeeper持久顺序节点的特性自动对snowflake节点配置wokerID。Leaf-snowflake是按照下面几个步骤启动的:
解决时钟问题: 参见上图整个启动流程图,服务启动时首先检查自己是否写过ZooKeeper leaf_forever节点:
由于强依赖时钟,对时间的要求比较敏感,在机器工作时NTP同步也会造成秒级别的回退,建议可以直接关闭NTP同步。要么在时钟回拨的时候直接不提供服务直接返回ERROR_CODE,等时钟追上即可。或者做一层重试,然后上报报警系统,更或者是发现有时钟回拨之后自动摘除本身节点并报警 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 0:41:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |