分布式id生成器 设计实现

一、概述

项目是分布式的架构,需要设计一款分布式全局ID,参照了多种方案,博主最后基于snowflake的算法设计了一款自用ID生成器。具有以下优势:

  1. 保证分布式场景下生成的ID是全局唯一的
  2. 生成的全局ID整体上是呈自增趋势的
  3. 高性能,能快速产生ID
  4. 高可用,有一定的容错机制

二、基于数据库生成全局ID方案

  • 结合数据库维护一个Sequence表,每当需要为某个表的新纪录生成ID时就从Sequence表中取出对应的nextid,将其+1后更新到数据库中以备下次使用。 适合于低并发的场景,因为在高并发下所有的插入都要访问该表,很容易造成性能瓶颈

基于数据库生成全局ID方案,我们的实现思路为:

     Id生成流程介绍:

        

通过dubbo传入对应的业务标示的字符串,根据传入的业务标示找到从Sequence表找到对应已生成的id键值,自增后更新原表的数据后,返回生成的id结果

 键值更新的sql为 insert into t3(xx,xx) on duplicate key update `xx`='XX'; 

根据字段值查询(有索引),如果不存在,则插入;否则更新。 不会出现死锁问题是 因为insert语句对于主键来说,插入的行不管有没有存在,都会只有行锁。行锁,仅会锁住一行或者正在被线程访问的任何几行,因此同一个表中的其他行可以并发线程访问;

Id使用流程介绍:

通过jar包提供接口,spring扫描注解

改进方案

三、基于snowflake生成全局ID方案

todo

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值