分布式id 生成器实现

随着业务的扩展的需要,分库是很多业务必不可少的操作,而分完库之后分布式id 生成缺成了一个问题,需要分布式id 服务生成。

1.获取分布式id 角色会有三个角色,分为:业务服务,分布式id节点服务,分布式id 中心服务。

2. 请求流程两个流程:

业务服务 --> 分布式id节点服务获取号码(根据号码段和号码规则还有set 编号生成id)。

业务服务 --> 分布式id节点服务获取号码 ->分布式id 中心服务获取号码段及号码规则。

3.号码规则:

前缀+时间戳+唯一编号

4.数据库设计

4.1 tb_id_config  id  配置

Field nameTypeCommentRemark
idPK
table_nameString 表名
service_nameString服务名
colum_nameStringid,number
init_numberint初始值
add_numberint增值
create_timedateTime创建时间
update_timedateTime修改时间

4.2.tb_id_config_regular id 配置规则

Field nameTypeCommentRemark
idPK
type Integer1.前缀,2.时间戳,3.号码段
keywordsString关键词(前缀时)
create_timedateTime创建时间
update_timedateTime修改时间

4.3.tb_id_operator_log id 操作log 日志

Field nameTypeCommentRemark
idPK
config_idFKtb_id_config  id
unique_keyString唯一key
min_numberInteger号段最小值
max_numberInteger号段最大值
config_numberInteger配置号(获取号段的redis  分布式节点服务号)
create_timedateTime创建时间
update_timedateTime修改时间
versionInteger数据版本

4.4 插入log ,在通过unique_key 查询出来,这个是针对每个分布式id节点服务请求生成的唯一键


EXPLAIN
INSERT INTO `tb_id_operator_log` ( `config_id`, `unique_key`, `min_number`, `max_number`, create_time, update_time ) SELECT
1,
2,
min_number + 1000,
max_number + 1000,now(),now()
FROM
	tb_id_operator_log 
WHERE
	config_id = 1 
ORDER BY
	id DESC 
	LIMIT 1

4.5分布式id节点服务,会把号段信息以及号配置信息存放到redis 计数器中,业务来一个请求redis 计数器获取后+1,注意这里当号段使用号段到60%,需要缓存下一个号端,避免使用完了,或者是等待中心发号段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值