alias软件下载百度云(百度云怎么安装软件)

   抖音SEO    

现在我们开发的系统都越来越复杂,以前那种单一的系统已经不再适合如今业务快速增长的今日。现在的系统基本上都是采用分布式架构,将业务都拆分在不同应用中。那么就有一个问题,如何使用唯一不重复的ID呢?

今天给大家介绍这款开源软件就能很好解决分布式系统的唯一ID问题

一、UidGenerator简介

UidGenerator是百度开源的Java语言实现,基于Snowflake算法的唯一ID生成器。

它是分布式的,并克服了雪花算法的并发限制。

单个实例的QPS能超过6000000。

需要的环境:JDK8+,MySQL(用于分配WorkerId)

二、雪花算法snowflake

由下图可知,雪花算法的几个核心组成部分:

1为sign标识位;

41位时间戳;

10位workId(数据中心+工作机器,可以其他组成方式);

12位自增序列;

但是百度对这些组成部分稍微调整了一下:

由上图可知,UidGenerator的时间部分只有28位,这就意味着UidGenerator默认只能承受8.5年(2^28-1/86400/365)

也可以根据你业务的需求,UidGenerator可以适当调整delta seconds、worker node id和sequence占用位数。

三、如何使用UidGenerator 生成全局唯一ID

开发环境: springboot,mybatis

由于UidGenerator没有上传jar包到maven仓库上,需要从GitHub上上面下载源码,自己打成jar包安装到maven本地库中。

官方文档

UidGenerator源码地址(https://github.com/baidu/uid-generator)

UidGenerator官方中文文档(https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md)

1.新建springboot项目

如果不会springboot,请参考springboot教程。

pom.xml

2.添加数据库和mybatis依赖

3.最后添加uid-generator 依赖

4. 新建表结构

在数据库中创建uid-generator 依赖的表结构

sql语句如下:

5.复制WorkerNodeDAO

从uid-generator 源码中复制WorkerNodeDAO到自己项目,改名WorkerNodeMapper,并去掉@Repository注解,添加@Mapper

6.复制WORKER_NODE.xml文件

把WORKER_NODE.xml文件拷贝到resource的目录下,改名为WorkerNodeMapper.xml,并把里面的namespace="com.baidu.fsg.uid.worker.dao.WorkerNodeDAO"改为自己项目中的WorkerNodeMapper。

7.复制DisposableWorkerIdAssigner类

复制DisposableWorkerIdAssigner类到自己的工程中,并把里面依赖的WorkerNodeDAO 改为本地新增的WorkerNodeMapper,并添加@Component 注解

8.修改mybatis配置

在application.yml配置文件中修改mybatis的配置,添加com.baidu.fsg.uid.worker.entity 扫描

9.添加UidGenerator配置,并添加扫描路径

10.添加单元测试类

只需引入cachedUidGenerator bean实例,直接调用cachedUidGenerator.getUID()方法即可生成uid

每生成一个uid都会往WORKER_NODE表中插入一条记录

四、UidGenerator的说明

UidGenerator提供两种方式实现:DefaultUidGenerator和CachedUidGenerator。

DefaultUidGenerator

DefaultUidGenerator是UidGenerator 默认的实现方式

参数

说明

timeBits

相对于时间基点"2016-05-20"的增量值,单位:秒,可使用的时间为2^timeBis 秒例如:timeBits=30,则可使用230秒,约34年,timeBits=31,则可使用231秒,约68年

workerBits

机器id,最多可支持2^22约420w次机器启动。内置实现为在启动时由数据库分配,默认分配策略为用后即弃,每次启动都会重新生成一批ID,因此重启次数也是会有限制的,后续可提供复用策略。

seqBits

每秒下的并发序列,9 bits可支持每台服务器每秒512个并发。


epochStr

指集成UidGenerator生成分布式ID服务第一次上线的时间,可配置,也一定要根据你的上线时间进行配置,因为默认的epoch时间可是2016-09-20,不配置的话,会浪费好几年的可用时间。


CachedUidGenerator

CachedUidGenerator是UidGenerator的重要改进实现

参数

说明

boostPower

RingBuffer size扩容参数, 可提高UID生成的吞吐量默认:3, 原bufferSize=8192, 扩容后bufferSize= 8192 << 3 = 65536

paddingFactor

指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50举例: bufferSize=1024, paddingFactor=50 -> threshold=1024 * 50 / 100 = 512.当环上可用UID数量 < 512时, 将自动对RingBuffer进行填充补全

scheduleInterval

另外一种RingBuffer填充时机, 在Schedule线程中, 周期性检查填充默认:不配置此项, 即不实用Schedule线程. 如需使用, 请指定Schedule线程时间间隔, 单位:秒

欢迎大家留言讨论

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。