本項目使用下列優秀的項目做爲必要組件。mysql
注意:須要在啓動以前建立數據庫並修改配置文件中數據庫的配置。git
go get 方式:github
需保證 $GOPATH/bin 在系統 PATH 中。sql
go get github.com/qichengzx/seqsvr
seqsvr
複製代碼
單獨編譯:docker
git clone git@github.com:qichengzx/seqsvr.git
cd seqsvr
go build .
./seqsvr
複製代碼
Docker 方式:shell
Dockerfile 使用了 Docker 多階段構建功能,需保證 Docker 版本在 17.05 及以上。詳見:Use multi-stage builds數據庫
git clone git@github.com:qichengzx/seqsvr.git
cd seqsvr
docker build seqsvr:latest .
docker run -p 8000:8000 seqsvr:latest
複製代碼
數據庫名稱能夠自定義,修改 config.yml 便可。架構
而後導入如下 SQL 生成數據表。app
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 格式。curl
#app
port: ':8000'
#service
step: 100
#db
mysql:
user: 'root'
password: ''
host: 'tcp(localhost:3306)'
database: 'sequence'
複製代碼
可修改端口號及 MySQL 的配置。
curl http://localhost:8000/new
{"code":0,"msg":"ok","data":{"id":101}}
複製代碼
本項目設計原理來自 攜程技術中心 的乾貨 | 分佈式架構系統生成全局惟一序列號的一個思路。
服務初始化後第一次請求會在 MySQL 數據庫中插入一條數據,以生成初始 ID。
後續的請求,都會在內存中進行自增返回,而且保證返回的 ID 不會超過設置的上限,到達上限後會再次從 MySQL 中更新數據,返回新的初始 ID 。
REPLACE INTO `generator_table` (uuid) VALUES ("54f5a3e2-e04c-4664-81db-d7f6a1259d01");
複製代碼
歡迎star。