SEQSVR Go + MySQL 实现的 ID 生成服务特性依赖项安装初始化数据库修改配置使用原理 介绍
SEQSVR
Go + MysqL 实现的 ID 生成服务
特性
依赖项
本项目使用下列优秀的项目作为必要组件。
-
gopkg.in/yaml.v2
-
github.com/go-sql-driver/MysqL
-
github.com/satori/go.uuid
安装
注意:需要在启动之前创建数据库并修改配置文件中数据库的配置。
go get 方式:
需保证 $GOPATH/bin 在系统 PATH 中。
go get github.com/qichengzx/seqsvr seqsvr
单独编译:
git clone [email protected]:qichengzx/seqsvr.git cd seqsvr go build . ./seqsvr
Docker 方式:
Dockerfile 使用了 Docker 多阶段构建功能,需保证 Docker 版本在 17.05 及以上。详见:Use multi-stage
builds
git clone [email protected]:qichengzx/seqsvr.git cd seqsvr docker build seqsvr:latest . docker run -p 8000:8000 seqsvr:latest
初始化数据库
CREATE TABLE `generator_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uuid` char(36) NOT NULL COMMENT '机器识别码', PRIMARY KEY (`id`), UNIQUE KEY `id_UNIQUE` (`id`), UNIQUE KEY `stub_UNIQUE` (`uuid`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
修改配置
#app port: ':8000' #service step: 100 #db MysqL: user: 'root' password: '' host: 'tcp(localhost:3306)' database: 'sequence'
使用
curl http://localhost:8000/new{"code":0,"msg":"ok","data":{"id":101}}
原理
本项目设计原理来自 携程技术中心 的干货 |
分布式架构系统生成全局唯一序列号的一个思路。
服务初始化后第一次请求会在 MysqL 数据库中插入一条数据,以生成初始 ID。
后续的请求,都会在内存中进行自增返回,并且保证返回的 ID 不会超过设置的上限,到达上限后会再次从 MysqL 中更新数据,返回新的初始 ID 。
核心sql
REPLACE INTO `generator_table` (uuid) VALUES ("54f5a3e2-e04c-4664-81db-d7f6a1259d01");
SEQSVR Go + MySQL 实现的 ID 生成服务特性依赖项安装初始化数据库修改配置使用原理 官网
https://gitee.com/qichengzx/seqsvr
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。