跳到主要内容

Snowflake

配置项说明

示例:configs/config_snowflake.json

字段必填说明
mysqlHostYmysql服务器地址,比如localhost:3306
userNameYmysql用户名
passwordYmysql密码
databaseNameYmysql数据库名
tableNameNmysql表名
timeBitsN时间戳所占位数大小。默认为28
workerBitsN机器id所占位数大小。默认为22
seqBitsN序列号所占位数大小。默认为13
startTimeN时间基点。默认为“2022-01-01”
reqTimeoutN请求id超时时间。默认为500毫秒
keyTimeoutNkey命名空间超时时间。默认为24小时

整体设计

雪花算法生成id的整体设计如下图:

img.jpg

怎么启动 mysql

如果想启动snowflake的demo,需要先用Docker启动一个mysql命令:

如果3306端口被其他服务占用,需要先退出其他服务

docker pull mysql:latest
docker run --name snowflake -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
docker exec -it snowflake bash
mysql -uroot -p123456

需要在mysql中新建一个数据库:

CREATE DATABASE layotto_sequencer;

启动 layotto

cd ${project_path}/cmd/layotto
go build

如果 build 报错,可以在项目根目录执行 go mod vendor

编译成功后执行:

./layotto start -c ../../configs/config_snowflake.json

运行 Demo

cd ${project_path}/demo/sequencer/common/
go build -o client
./client -s "sequencer_demo"