Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/qichengzx/seqsvr
High performance unique number generator powered by Go
https://github.com/qichengzx/seqsvr
sequence
Last synced: 2 months ago
JSON representation
High performance unique number generator powered by Go
- Host: GitHub
- URL: https://github.com/qichengzx/seqsvr
- Owner: qichengzx
- License: mit
- Created: 2018-06-29T09:10:12.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-01-29T03:22:34.000Z (almost 6 years ago)
- Last Synced: 2024-08-03T17:19:00.439Z (5 months ago)
- Topics: sequence
- Language: Go
- Homepage:
- Size: 12.7 KB
- Stars: 61
- Watchers: 4
- Forks: 15
- Open Issues: 0
-
Metadata Files:
- Readme: README-zh_CN.md
- License: LICENSE
Awesome Lists containing this project
- go-awesome - SEQSVR - Distributed ID generation service implemented by Go + MySQL (Open source library / UUID)
README
SEQSVR
---------#### Go实现的全局唯一序列号生成服务
[English](README.md)
### 特性
* 分布式:可任意横向扩展
* 高性能:分配 ID 只访问内存(到达上限会请求数据库一次)
* 易用性:对外提供 HTTP 服务
* 唯一性:MySQL 自增 ID,永不重复
* 高可靠:MySQL 持久化### 依赖项
本项目使用下列优秀的项目作为必要组件。
* gopkg.in/yaml.v2
* github.com/go-sql-driver/mysql
* github.com/satori/go.uuid### 安装
**注意:需要在启动之前创建数据库并修改配置文件中数据库的配置。**
go get 方式:
需保证 $GOPATH/bin 在系统 PATH 中。
```shell
go get github.com/qichengzx/seqsvr
seqsvr
```
单独编译:```shell
git clone [email protected]:qichengzx/seqsvr.git
cd seqsvr
go build .
./seqsvr
```
Docker 方式:Dockerfile 使用了 Docker 多阶段构建功能,需保证 Docker 版本在 17.05 及以上。详见:[Use multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/)
```shell
git clone [email protected]:qichengzx/seqsvr.git
cd seqsvr
docker build -t seqsvr:latest .
docker run -p 8000:8000 seqsvr:latest
```### 初始化数据库
数据库名称可以自定义,修改 config.yml 即可。
然后导入以下 SQL 生成数据表。
```mysql
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;
```### 修改配置
配置文件使用 [YAML](http://yaml.org/) 格式。
```yaml
#app
port: ':8000'#service
step: 100#db
mysql:
user: 'root'
password: ''
host: 'tcp(localhost:3306)'
database: 'sequence'
```可修改端口号及 MySQL 的配置。
### 使用
```shell
curl http://localhost:8000/new{"code":0,"msg":"ok","data":{"id":101}}
```### 原理
本项目设计原理来自 携程技术中心 的[干货 | 分布式架构系统生成全局唯一序列号的一个思路](https://mp.weixin.qq.com/s/F7WTNeC3OUr76sZARtqRjw)。
服务初始化后第一次请求会在 MySQL 数据库中插入一条数据,以生成初始 ID。
后续的请求,都会在内存中进行自增返回,并且保证返回的 ID 不会超过设置的上限,到达上限后会再次从 MySQL 中更新数据,返回新的初始 ID 。
##### 核心SQL
```mysql
REPLACE INTO `generator_table` (uuid) VALUES ("54f5a3e2-e04c-4664-81db-d7f6a1259d01");
```