Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go分布式唯一ID生成系统

Go开源项目分布式唯一ID生成系统

作者:yongxinz

这篇文章主要为大家介绍了Go开源项目分布式唯一ID生成系统示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

今天跟大家介绍一个开源项目:id-maker,主要功能是用来在分布式环境下生成唯一 ID。上周停更了一周,也是用来开发和测试这个项目的相关代码。

美团有一个开源项目叫 Leaf,使用 Java 开发。本项目就是在此思路的基础上,使用 Go 开发实现的。

项目整体代码量并不多,不管是想要在实际生产环境中使用,还是想找个项目练手,我觉得都是一个不错的选择。

项目背景

在大部分系统中,全局唯一 ID 都是一个强需求。比如快递,外卖,电影等,都需要生成唯一 ID 来保证单号唯一。

那业务系统对 ID 号的要求有哪些呢?

在此背景下,有一个高可用的唯一 ID 生成系统就很重要了。

项目使用

生成 ID 分两种方式:

使用上提供两种方式来调用接口:

HTTP 方式

1、健康检查:

curl http://127.0.0.1:8080/ping

2、获取 ID:

获取 tag 是 test 的 ID:

curl http://127.0.0.1:8080/v1/id/test

3、获取雪花 ID:

curl http://127.0.0.1:8080/v1/snowid

gRPC 方式

1、获取 ID:

grpcurl -plaintext -d '{"tag":"test"}' -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetId

2、获取雪花 ID:

grpcurl -plaintext -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetSnowId

本地开发

# Run MySQL
$ make compose-up

# Run app with migrations
$ make run

项目架构

项目使用 go-clean-template 架构模板开发,目录结构如下:

下面对各目录做一个简要说明:

借用官方的两张图:

整体的层次关系是这样的,最里面是 models,定义我们的表结构,然后中间是业务逻辑层,业务逻辑层会提供接口,给最外层的 API 来调用,最外层就是一些工具和调用入口。

这样做的最大好处就是解耦,不管最外层如何变化,只要在业务逻辑层实现对应接口即可,核心代码可能根本不需要改变。

所以,它们之间的调用关系看起来是这样的:

HTTP > usecase
       usecase > repository (Postgres)
       usecase < repository (Postgres)
HTTP < usecase

以上就是本项目的全部内容,如果大家感兴趣的话,欢迎给我留言交流,要是能给个 star 那就太好了。

项目地址:https://github.com/yongxinz/id-maker

往期文章:

听说,99% 的 Go 程序员都被 defer 坑过

测试小姐姐问我 gRPC 怎么用,我直接把这篇文章甩给了她

gRPC,爆赞

使用 grpcurl 通过命令行访问 gRPC 服务

推荐三个实用的 Go 开发工具

推荐阅读:

https://github.com/evrone/go-clean-template

https://github.com/hwholiday/gid

Leaf——美团点评分布式ID生成系统

https://github.com/Meituan-Dianping/Leaf

以上就是Go开源项目分布式唯一ID生成系统的详细内容,更多关于Go分布式唯一ID生成系统的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文