分布式:可任意横向扩展
高性能:分配 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 中。
单独编译:
Docker 方式:
Dockerfile 使用了 Docker 多阶段构建功能,需保证 Docker 版本在 17.05 及以上。详见:[Use multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/)
数据库名称可以自定义,修改 config.yml 即可。
然后导入以下 SQL 生成数据表。
配置文件使用 [YAML](http://yaml.org/) 格式。
可修改端口号及 MySQL 的配置。
本项目设计原理来自 携程技术中心 的[干货 | 分布式架构系统生成全局唯一序列号的一个思路](https://mp.weixin.qq.com/s/F7WTNeC3OUr76sZARtqRjw)。
服务初始化后第一次请求会在 MySQL 数据库中插入一条数据,以生成初始 ID。
后续的请求,都会在内存中进行自增返回,并且保证返回的 ID 不会超过设置的上限,到达上限后会再次从 MySQL 中更新数据,返回新的初始 ID 。
核心SQL