分布式 ID 解决方案之美团 Leaf】的更多相关文章

分布式 ID 在庞大复杂的分布式系统中,通常需要对海量数据进行唯一标识,随着数据日渐增长,对数据分库分表以后需要有一个唯一 ID 来标识一条数据,而数据库的自增 ID 显然不能满足需求,此时就需要有一个能够生成全局唯一 ID 的系统,需要满足以下条件: 全局唯一性:最基本的要求就是不能出现重复的 ID. 递增:保证下一个 ID 一定大于上一个 ID. 信息安全:如果 ID 是连续的,用户就可以按照顺序进行恶意爬取数据,所以 ID 生成无规则. 上述的 2 和 3 点需求是互斥的,无法使用同一个方…
0-前言 分布式系统中,分布式ID是个必须解决的问题点: 雪花算法是个好方式,不过不能直接使用,因为如果直接使用的话,需要配置每个实例workerId和datacenterId,在微服务中,实例一般动态配置,直接指定具体实例的这两个参数是不现实的: 所以,一般采用雪花算法的变种,主要是将这两个参数由手动配置改为动态生成,美团leaf.百度uid-generator都属于改良的变种算法,可以适当采用: 不过这些算法都或多或少对其他存在一定依赖,不是非常方便,今天我们来说一种非常方便的分布式ID解决…
一.分布式ID概念 说起ID,特性就是唯一,在人的世界里,ID就是身份证,是每个人的唯一的身份标识.在复杂的分布式系统中,往往也需要对大量的数据和消息进行唯一标识.举个例子,数据库的ID字段在单体的情况下可以使用自增来作为ID,但是对数据分库分表后一定需要一个唯一的ID来标识一条数据,这个ID就是分布式ID.对于分布式ID而言,也需要具备分布式系统的特点:高并发,高可用,高性能等特点. 二.分布式ID实现方案 下表为一些常用方案对比: 描述 优点 缺点 UUID UUID是通用唯一标识码的缩写,…
开发十年,就只剩下这套Java开发体系了 >>>   在游戏开发中,我们使用分布式ID.有很多优点 便于合服 便于ID管理 等等 一.单服各自ID系统的弊端 1. 列如合服 在游戏上线后,合服是避免不了的事情.如果按照传统的数据库表自增来作为数据的唯一ID.或者每个游戏中是相同的自增.这样在合服的时候你就会相当的麻烦了. 比如上图我们要把GameServer_2的数据合并到GameServer_1中,它们都有一个Player ID = 1的玩家,这个时候你就必须要重建GameServer…
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 更多优选 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问分库分表怎么办?你可以这样怼他 3万字总结,Mysql优化之精髓 为了不复制粘贴,我被逼着学会了JAVA爬虫 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 Redis 5种数据结构及对应使用场景,全会面试要加分的 引言 前几天写过一篇<一口气说出 9种 分布式ID生成方式,面…
分布式 ID 需要满足的条件: 全局唯一:这是最基本的要求,必须保证 ID 是全局唯一的. 高性能:低延时,不能因为一个小小的 ID 生成,影响整个业务响应速度. 高可用:无限接近于100%的可用性. 好接入:遵循拿来主义原则,在系统设计和实现上要尽可能简单. 趋势递增:这个要看具体业务场景,最好要趋势递增,一般不严格要求. 让我来先捋一捋常见的分布式 ID 的解决方案有哪些? 1.数据库自增 ID 这是最常见的方式,利用数据库的 auto_increment 自增 ID,当我们需要一个ID的时…
大家好,我是树哥. 在复杂的分布式系统中,往往需要对大量的数据和消息进行唯一标识,例如:分库分表的 ID 主键.分布式追踪的请求 ID 等等.于是,设计「分布式 ID 发号器」就成为了一个非常常见的系统设计问题.今天我将带大家一起学习一下,如何设计一个分布式 ID 发号器. 系统诉求 对于业务系统而言,对于全局唯一 ID 一般有如下几个需求: 全局唯一. 生成的 ID 不能重复,这是最基本的要求,否则在分库分表的场景下就会造成主键冲突. 单调递增. 保证下一个 ID 大于上一个 ID,这样可以保…
整理了一些Java方面的架构.面试资料(微服务.集群.分布式.中间件等),有需要的小伙伴可以关注公众号[程序员内点事],无套路自行领取 一口气说出 9种 分布式ID生成方式,面试官有点懵了 面试总被问分库分表怎么办?你可以这样怼他 3万字总结,Mysql优化之精髓 技术部突然宣布:JAVA开发人员全部要会接口自动化测试框架 9种分布式ID生成之美团(Leaf)实战 引言 接着<一口气说出 9种 分布式ID生成方式,面试官有点懵了>来继续详细的介绍分布式ID生成器,大家比较感兴趣的美团(Leaf…
import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.CuratorFrameworkFactory; import org.apache.curator.retry.ExponentialBackoffRetry; import org.apache.zookeeper.CreateMode; import org.junit.Before; import org.ju…
本文主要是对美团的分布式ID框架Leaf的原理进行介绍,针对Leaf原项目中的一些issue,对Leaf项目进行功能增强,问题修复及优化改进,改进后的项目地址在这里: Leaf项目改进计划 https://github.com/NotFound9/Leaf Leaf原理分析 Snowflake生成ID的模式 7849276-4d1955394baa3c6d.png snowflake算法对于ID的位数是上图这样分配的: 1位的符号位+41位时间戳+10位workID+12位序列号 加起来一共是6…