SEQSVR Go + MySQL 实现的 ID 生成服务开源项目

我要开发同款
匿名用户2018年07月02日
20阅读
开发技术GO语言
所属分类Google Go、分布式应用/网格、服务器软件
授权协议MIT

作品详情

SEQSVRGo+MySQL实现的ID生成服务特性

分布式:可任意横向扩展

高性能:分配ID只访问内存(到达上限会请求数据库一次)

易用性:对外提供HTTP服务

唯一性:MySQL自增ID,永不重复

高可靠:MySQL持久化

依赖项

本项目使用下列优秀的项目作为必要组件。

gopkg.in/yaml.v2

github.com/go-sql-driver/mysql

github.com/satori/go.uuid

安装

注意:需要在启动之前创建数据库并修改配置文件中数据库的配置。

goget方式:

需保证$GOPATH/bin在系统PATH中。

go get github.com/qichengzx/seqsvrseqsvr

单独编译:

git clone git@github.com:qichengzx/seqsvr.gitcd seqsvrgo build ../seqsvr

Docker方式:

Dockerfile使用了Docker多阶段构建功能,需保证Docker版本在17.05及以上。详见:Usemulti-stagebuilds

git clone git@github.com:qichengzx/seqsvr.gitcd seqsvrdocker build seqsvr:latest .docker run -p 8000:8000 seqsvr:latest初始化数据库

数据库名称可以自定义,修改config.yml即可。

然后导入以下SQL生成数据表。

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 格式。

#appport: ':8000'#servicestep: 100#dbmysql:  user: 'root'  password: ''  host: 'tcp(localhost:3306)'  database: 'sequence'

可修改端口号及MySQL的配置。

使用curl https://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");
查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论