1、简介

1.1、开源项目

  • kylin-id:麒麟分布式id生成器,支持号段模式、雪花算法
  • 并未发布jar到中央仓库,需要自己本地构建

1.2、介绍

  1. 参考滴滴【tinyid】
  2. 整合百度【UID】
  3. 麒麟发号器支持号段模式、百度uid
  4. uid的workerId生成方式:
    a. 支持根据bizType生成,每次重启服务自增
    b. 支持使用百度提供的方式生成workerId

2、使用说明

2.1、引入依赖

<dependency><groupId>com.wjk.kylin</groupId><artifactId>kylin-id-spring-boot-starter</artifactId><version>1.0.0</version></dependency>

2.2、application.yml

kylin:id:server: localhost:9988read-timeout: 60write-timeout: 60connect-timeout: 60kid:enable: truetoken: 110load-id-threshold: 0.7uid:enable: truebiz-type: kylin_id_exampleepoch-str: 2022-09-10time-bits: 31worker-bits: 22seq-bits: 10cached-uid-generator:boost-power: 3padding-factor: 50

2.3、表结构

2.3.1、号段模式表结构

CREATE TABLE `kylin_id_info`  (`id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',`biz_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '业务类型,唯一',`max_id` bigint(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '当前最大id',`step` int(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '步长,值越大,服务端缓存就会越多',`delta` int(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '每次id增量,增长量',`version` bigint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '版本号',`create_time` datetime(0) NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '创建时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uniq_biz_type`(`biz_type`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'id信息表' ROW_FORMAT = Dynamic;CREATE TABLE `kylin_id_token`  (`id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增id',`token` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'token,用于安全校验用,建议用不同的token来验证区分',`biz_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '此token可访问的业务类型标识',`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '备注',`create_time` datetime(0) NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '创建时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uniq_token_biz_type`(`token`, `biz_type`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'token信息表' ROW_FORMAT = Dynamic;

2.3.2、uid表结构

uid表结构根据选择模式创建表就可以

 CREATE TABLE `worker_node` (`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'auto increment id',`host_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'host name',`port` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'port',`type` int NOT NULL COMMENT 'node type: ACTUAL or CONTAINER',`launch_date` date NOT NULL COMMENT 'launch date',`modified` datetime NOT NULL COMMENT 'modified time',`created` datetime NOT NULL COMMENT 'created time',PRIMARY KEY (`id`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='DB WorkerID Assigner for UID Generator';CREATE TABLE `kylin_uid_info`  (`id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '自增主键',`biz_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '业务类型,唯一',`worker_id` bigint(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '工作id',`version` bigint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '版本号',`create_time` datetime(0) NOT NULL DEFAULT '2022-01-01 00:00:00' COMMENT '创建时间',PRIMARY KEY (`id`) USING BTREE,UNIQUE INDEX `uniq_biz_type`(`biz_type`) USING BTREE) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = 'id信息表' ROW_FORMAT = Dynamic;

2.4、使用

2.4.1、启动kylin-id-server

2.4.2、号段模式


@GetMapping("/nextId")
public Long getId(@RequestParam("bizType") String bizType) {return IdUtil.nextId(bizType);
}@GetMapping("/nextIdBatchSize")
public Long getIdBatchSize(@RequestParam("bizType") String bizType, @RequestParam("batchSize") Integer batchSize) {List<Long> idList = IdUtil.nextId(bizType, batchSize);for (Long id : idList) {log.info("{}", id);}return 0L;
}

2.4.3、UID模式

@Autowired
@Qualifier("cachedUidGenerator")
private UidGenerator uidGenerator;@GetMapping("/uid")
public Long getUId(@RequestParam("batchSize") Integer batchSize) {for (int i = 0; i < batchSize; i++) {log.info("{}", uidGenerator.getUID());}return 0L;
}

基于号段模式、百度UID实现的分布式ID生成器kylin-id相关推荐

  1. 分布式系统概念 | 分布式ID:数据库、号段模式、雪花算法(Snowflake)、Redis实现方案

    文章目录 分布式ID 数据库 自增ID 多主模式 号段模式 雪花算法 Redis 总结 分布式ID ID是数据的唯一标识,传统的做法是使用数据库的自增ID,但是随着业务规模的不断发展,数据量将越来越大 ...

  2. 序列号及序列号生成器(号段模式,数据库模式)详细介绍(建议收藏)

    前言 现如今,数据的唯一性和可追溯性变得越来越重要.从简单的数据库主键到复杂的分布式系统,唯一标识符在各种场景中都发挥着关键作用.序列号,作为一种广泛应用的唯一标识符,为我们提供了确保数据完整性和一致 ...

  3. 美团Leaf源码——号段模式源码解析

    前言 分布式ID生成策略基本要求就是全局不重复,最好还能递增,长度较短,性能高,可用性强.关于相关的实现方案有很多,本文着重使用美团开源的分布式ID生成解决方案--Leaf. 关于Leaf,美团官方的 ...

  4. 深度解析leaf分布式id生成服务源码(号段模式)

    原创不易,转载请注明出处 文章目录 前言 1.实现原理推演 1.1 基于mysql最简单分布式ID实现 1.2 flickr分布式id解决方案 1.3 号段+mysql 2.源码剖析 2.1初始化 2 ...

  5. ID生成方案之号段模式

    号段模式ID生成器组件地址 https://github.com/15928587230/os-component-idworker 开箱即用, github上面有简洁的使用说明. 一 Leaf号段模 ...

  6. 美团开源分布式ID生成系统——Leaf源码阅读笔记(Leaf的号段模式)

    Leaf 最早期需求是各个业务线的订单ID生成需求.在美团早期,有的业务直接通过DB自增的方式生成ID,有的业务通过redis缓存来生成ID,也有的业务直接用UUID这种方式来生成ID.以上的方式各自 ...

  7. 音视频开发(11)---基于B/S模式的视频监控系统设计

    基于B/S模式的视频监控系统设计 http://hi.baidu.com/huqing7002/item/3f89f7109f22bee45f53b110 随着计算机和网络技术的迅猛发展,闭路电视监控 ...

  8. 微信hash ajax,基于vue hash模式微信分享#号的解决

    看代码吧~ // 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的"#"会被去掉并追加?fromTimeline之类的后缀参数,这就造成了分享出 ...

  9. sis最新ip地址2020_2020年12月版 最新IP数据库 号段归属地 省市区镇村行政区划

    IP地址数据库-最新 最新IP地址数据库(qqzeng-ip) 2020年12月版 743518 条数据 基于:国内基于省市区以及运营商 国外基于国家 主要大城市以及主要运营商 版本: 全球旗舰版   ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续4)
  2. TensorRT学习笔记(三)
  3. mysql 如何将一个库的一个表的数据复制到另一个库中的一个表
  4. Android NDK 内存泄露检测
  5. 【蓝桥杯】Python自带编辑器IDLE的使用教程
  6. python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】
  7. paip.chrome使用ACTIVX 的总结
  8. 小米这样做,我是拒绝的
  9. 全国计算机一级成绩分配,计算机一级ms分值分配
  10. 过程装备安装调试技术实训装置QY-GCKZ04
  11. 用腾讯云轻量搭建 TeamSpeak 服务器
  12. Java 嵌入数据处理引擎:SQLite 的挑战者
  13. Css动画效果旋转图片
  14. 在系统中增加各银行卡刷卡消费分析
  15. Trojan.Win32.Scar.cjdy分析
  16. 推荐系统实践(三)ICF和UCF
  17. 【JPress】Menu
  18. ArithmeticException算数异常
  19. 读书、学习、工作和生活中收集的20条经典语录:1-20
  20. U盘修复“系统找不到指定文件”问题记录

热门文章

  1. 客流统计设备 - 每人计
  2. Canal+Camus快速采集MySQL Binlog到数据仓库
  3. JDK1.8HashMap会发生死循环吗?
  4. KEIL5软件安装步骤(全图文,全网最详细)
  5. 转 Applocale:非Unicode程序界面乱码解决方法笔记
  6. 举头望明月打计算机术语,月亮的谜语怎么说及答案
  7. 知识管理系统:从隐性知识到显性价值
  8. mc手游服务器明日之后无限法则,手游《明日之后》错误的定位错误的核心,上线没多久就开始凉了...
  9. 图像采集:机器视觉中图像采集优化方法介绍
  10. 【Linux for Hacker】————6、进程管理