分布式id生成器 设计实现

一、概述

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

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

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

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

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

     Id生成流程介绍:

        分布式id生成器 设计实现_第1张图片

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

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

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

Id使用流程介绍:

分布式id生成器 设计实现_第2张图片

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

改进方案

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

todo

 

你可能感兴趣的:(分布式id生成器 设计实现)