分布式id生成

jaxyoun jaxyoun     2023-03-19     682

关键词:

分布式唯一ID

一、逻辑要求

  1. 全局唯一:相同业务和不同业务id都要保证不重复,以满足分布式部署、弹性伸缩、数据治理、追溯等要求。

  2. 趋势递增:需要对BTree数据结构友好,保证查询性能。

  3. 单调递增:在相同业务内保证后生成的id一定比先生成的大,满足事务版本号、IM实时消息、排序等要求。

  4. 信息安全:增加猜测难度,防止恶意爬取和猜测,通过猜测获取订单量、篡改记录等安全问题。

  5. 包含时间特征:方便数据定位。

二、性能要求

高可用:对整个系统来说属于核心功能,必须满足99.999%的可用性。

低延迟:响应要快,满足极速要求。

高QPS:能应对高并发,和批量生成要求。

三、方案

uuid:满足条件1,太长对索引不友好,无序对索引不友好会导致BTree节点分裂问题降低索引性能,不能得出先后顺序。

自增主键 + replace-into:建立专门的sequence表,向各服务输出id,主键自增、模块key设唯一索引,能保证模块内id的唯一且自增,但是面对低延迟高并发能力不强。小分布式系统采用,集群部署mysql时需要分段处理,部署麻烦,安全性不高 。

Redis:利用Redis的单线程天生原子性,increase by,满足性能要求,要集群分段才能满足高可用,但是节点故障后会错乱,维护成本较高,安全性不高。

snowflake算法:

  1. 在时间上有序且单调递增。
  2. 生成64位的long型整数,转换为String后最大长度为19,对索引友好。
  3. 分布式系统内不会发生id碰撞(使用datacenterId+workerId区分),效率极高。
  4. 一般场景直接使用hutool的IdUtil就可生成,特殊要求可以使用百度、美团的封装。

分布式全局id生成器设计(代码片段)

项目是分布式的架构,需要设计一款分布式全局ID,参照了多种方案,博主最后基于snowflake的算法设计了一款自用ID生成器。具有以下优势:保证分布式场景下生成的ID是全局唯一的生成的全局ID整体上是呈自增趋势的,也就是说... 查看详情

分布式系统唯一id的生成方案讨论(代码片段)

在分布式系统下唯一id问题,就是id咋生成?比如分表分库,因为要是一个表分成多个表之后,每个表的id都是从1开始累加自增长,那是不对的。举个例子,一个表拆分为了2张表,每个表的id都从1开始累加,这个肯定有问题了!... 查看详情

分布式id生成

分布式唯一ID一、逻辑要求全局唯一:相同业务和不同业务id都要保证不重复,以满足分布式部署、弹性伸缩、数据治理、追溯等要求。趋势递增:需要对BTree数据结构友好,保证查询性能。单调递增:在相同业务内保证后生成的... 查看详情

图解各路分布式id生成算法(代码片段)

在分布式系统中,通常会用到分布式ID来标注数据的唯一性,而分布式ID的生成方式又多种多样,今天我们就来讨论一下主流的分布式ID生成策略。分布式ID基本需求全局唯一趋势递增信息安全全局唯一这是基本要求,不必解释趋... 查看详情

分布式id生成器实现(代码片段)

...#xff0c;分库是很多业务必不可少的操作,而分完库之后分布式id生成缺成了一个问题,需要分布式id服务生成。1.获取分布式id角色会有三个角色,分为:业务服务,分布式id节点服务,分布式id中心服务。2.请求流... 查看详情

分布式id生成

...时候遇到一个snowflake算法,查了一下发现是Twitter的一个分布式ID生成算法,能够在分布式环境中生成一个全局唯一的ID,然后上网找了一些业界的做法,目前看到了携程和美团的方案,做一下笔记。背景1在复杂分布式系统中,往... 查看详情

一线大厂的分布式唯一id生成方案是什么样的?(代码片段)

...Java、Redis、MongoDB、MySQL、Zookeeper、SpringCloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。传送门:https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ一、前言分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订单表... 查看详情

常见分布式id生成方案(代码片段)

文章目录一、为什么要用分布式ID1、什么是分布式ID2、那么分布式ID需要满足哪些条件二、分布式ID有哪些生成方式1、基于UUID2、基于数据库自增ID3、基于数据库集群模式4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法... 查看详情

常见分布式id生成方案(代码片段)

文章目录一、为什么要用分布式ID1、什么是分布式ID2、那么分布式ID需要满足哪些条件二、分布式ID有哪些生成方式1、基于UUID2、基于数据库自增ID3、基于数据库集群模式4、基于数据库的号段模式5、基于Redis模式6、基于雪花算法... 查看详情

分布式id生成方案-snowflake算法(代码片段)

...各种各样的ID,这些ID需要保证全局唯一。我们称之为分布式ID,分布式ID需要满足唯一性、趋势递增性、高可用性、高性能等特点。snowflake算法,也叫雪花算法,是其中的一种分布式ID生成方案。是twitter公司内部... 查看详情

分布式id生成方案-snowflake算法(代码片段)

...各种各样的ID,这些ID需要保证全局唯一。我们称之为分布式ID,分布式ID需要满足唯一性、趋势递增性、高可用性、高性能等特点。snowflake算法,也叫雪花算法,是其中的一种分布式ID生成方案。是twitter公司内部... 查看详情

分布式唯一id生成器的想法

...id,后来采用了hashid的方法。最近在网上读到了美团关于分布式唯一id生成器的解决方案,其中提到了三种生成法:(建议看一下这篇文章,写得很详细,分析到位)UUID数据库生成类snowflake方案0x02问题文中提到了如下几个问题1.... 查看详情

分布式id生成方案总结整理(代码片段)

文章目录1、为什么需要分布式ID?2、业务系统对分布式ID有什么要求?3、分布式ID生成方案3.1UUID3.2、数据库自增3.3、号段模式3.4、Redis实现3.4、雪花算法(SnowFlake)3.5、百度Uidgenerator3.6、美团Leaf3.7、滴滴TinyID1、... 查看详情

分布式高并发下全局id生成策略

数据在分片时,典型的是分库分表,就有一个全局ID生成的问题。单纯的生成全局ID并不是什么难题,但是生成的ID通常要满足分片的一些要求:  1不能有单点故障。  2以时间为序,或者ID里包含时间。这样一是可... 查看详情

图解分布式id生成算法snowflake(代码片段)

分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种。概述SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用。二进制中最高位为1的都是负数,但是我们生成的id一般都使用整数,所... 查看详情

id号生成雪花算法

...生成2、SnowFlake算法生成id的结果是一个64bit大小的整数3、分布式系统内不会产生重复id(用有datacenterId和machineId来做区分)datacenterId(分布式)(服务ID1,2,3.....)每个服务中写死machineId(用于集群)机器ID读取机器的环境变量M... 查看详情

分布式系统唯一id生成方案汇总(代码片段)

目录1.数据库自增长序列或字段2.UUID3.UUID的变种4.Redis生成ID5.Twitter的snowflake(雪花)算法6.利用zookeeper生成唯一ID7.MongoDB的ObjectId8.TiDB的主键更多相关文章点点这里系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常... 查看详情

分布式id生成器实现(代码片段)

...#xff0c;分库是很多业务必不可少的操作,而分完库之后分布式id生成缺成了一个问题,需要分布式id服务生成。1.获取分布式id角色会有三个角色,分为:业务服务,分布式id节点服务,分布式id中心服务。2.请求流... 查看详情