Skip to content
/ bbbid Public

high-performance distributed ID generator | 高性能分布式ID生成器

License

Notifications You must be signed in to change notification settings

imsoul/bbbid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3bc0cb7 · May 1, 2022

History

12 Commits
Mar 29, 2022
May 1, 2022
May 1, 2022
May 1, 2022
May 1, 2022
May 1, 2022
Mar 29, 2022
Mar 29, 2022
Mar 29, 2022
Mar 29, 2022
Mar 29, 2022
May 1, 2022
Mar 29, 2022
May 1, 2022
May 1, 2022

Repository files navigation

bbbid简介

bbbid是一个高性能的分布式ID生成器,使用微服务框架kratos开发; 实现 美团Leaf segment算法,可分布式部署,保证高可用;

Leaf Server

bbbid-cn

环境准备

安装Kratos

详情请参考:https://go-kratos.dev/docs/getting-started/start

更新依赖包:

go get -u github.com/google/subcommands
go get -u golang.org/x/tools/go/ast/astutil
go get -u golang.org/x/tools/go/types/typeutil
go get -u golang.org/x/mod/semver
go get -u golang.org/x/tools/go/packages

生成所有proto源码、wire等等

go generate ./...

导入数据库

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for segment
-- ----------------------------
DROP TABLE IF EXISTS `segment`;
CREATE TABLE `segment`  (
  `ckey` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '业务key',
  `type` tinyint(0) UNSIGNED NOT NULL DEFAULT 1 COMMENT '类型:1-自增,2-随机',
  `step` int(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '步长',
  `maxid` bigint(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '最大ID',
  `intro` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '备注说明',
  `addtime` int(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '添加时间',
  `uptime` int(0) UNSIGNED NOT NULL DEFAULT 0 COMMENT '更新时间',
  PRIMARY KEY (`ckey`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of segment
-- ----------------------------
INSERT INTO `segment` VALUES ('rand', 2, 1000, 14000, '随机ID', 1647680509, 1647680509);
INSERT INTO `segment` VALUES ('test', 1, 1000, 29248000, '自增ID', 1591706686, 1620815148);

SET FOREIGN_KEY_CHECKS = 1;

修改配置文件:mysql和redis配置

server:
  http:
    addr: 0.0.0.0:8810
    timeout: 1s
  grpc:
    addr: 0.0.0.0:8811
    timeout: 1s
data:
  database:
    driver: mysql
    dsn: test:123456@tcp(192.168.0.250:3306)/bbbid?charset=utf8mb4&parseTime=True&loc=Local
    max_conns: 100
    idle_conns: 10
    life_time: 1800s
    idle_time: 600s
  redis:
    db: 0
    addr: 192.168.0.250:6379
    read_timeout: 0.5s
    write_timeout: 0.5s
    pool_size: 100
    min_idle: 10
    sentinel:
      master_name: mymaster
      addrs: []
    cluster:
      addrs: ["192.168.0.250:6379", "192.168.0.250:6380", "192.168.0.251:6379", "192.168.0.251:6380", "192.168.0.252:6379", "192.168.0.252:6380"]

运行项目

kratos run

添加业务

http://127.0.0.1:8810/v1/addBiz?ckey=demo1&type=2&step=1000&maxid=10000&intro=新业务ID

参数说明

参数名 类型 说明
ckey string 业务唯一KEY
type int 生成ID类型:1-有序递增,2-范围随机
step int 步长
maxid int 起始最大ID
intro string 业务说明

压测

wrk -t12 -c400 -d10s http://127.0.0.1:8810/v1/getId/test

wrk

benchmark

go test -bench=. -benchmem

bench

About

high-performance distributed ID generator | 高性能分布式ID生成器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published