[[433936]]
今天跟大家介绍一个开源项目: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 那就太好了。
项目地址:
本文转载自微信公众号「AlwaysBeta」,可以通过以下二维码关注。转载本文请联系AlwaysBeta公众号。
责任编辑:武晓燕 来源: AlwaysBeta Go生成系统
(责任编辑:热点)
天津证监局召开2022年辖区期货监管工作会议 结合实际提出监管要求
永利度假村(WYNN.US)与工会达成劳资协议 拉斯维加斯大罢工得以避免
休闲模拟《Calico》11.28登陆PS4/5 获特别好评
*ST康得(002450.SZ)2020年度实现归母净亏损32.05亿元 公司总资产81.01亿元
OpenStack Object Storage(Swift)架构简介
*ST海航(600221.SH):2月客运量同比升419.17% 货邮载运率32.77%
苹果官网闹乌龙,新款 14/16 寸 MacBook Pro 充电连接线位置“P 反了”