Go 开发的一款分布式唯一 ID 生成系统

今天跟大家介绍一个开源项目:id-maker,分布主要功能是式唯生成用来在分布式环境下生成唯一 ID。上周停更了一周,系统也是分布用来开发和测试这个项目的相关代码。
美团有一个开源项目叫 Leaf,式唯生成使用 Java 开发。系统本项目就是分布在此思路的基础上,使用 Go 开发实现的式唯生成。
项目整体代码量并不多,系统不管是分布想要在实际生产环境中使用,还是式唯生成想找个项目练手,我觉得都是系统一个不错的选择。
项目背景
在大部分系统中,分布全局唯一 ID 都是式唯生成一个强需求。比如快递,系统外卖,电影等,都需要生成唯一 ID 来保证单号唯一。
那业务系统对 ID 号的要求有哪些呢?
全局唯一性:不能出现重复的 ID 号,既然是唯一标识,服务器租用这是最基本的要求。 趋势递增:在 MySQL InnoDB 引擎中使用的是聚集索引,由于多数 RDBMS 使用 B-tree 的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 单调递增:保证下一个 ID 一定大于上一个 ID,例如事务版本号、IM 增量消息、排序等特殊需求。 信息安全:如果 ID 是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定 URL 即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要 ID 无规则、不规则。在此背景下,有一个高可用的唯一 ID 生成系统就很重要了。
项目使用
生成 ID 分两种方式:
根据数据库生成 ID。 根据雪花算法生成 ID。使用上提供两种方式来调用接口:
HTTP 方式 gRPC 方式HTTP 方式
1、b2b供应网健康检查:
curl http://127.0.0.1:8080/ping2、获取 ID:
获取 tag 是 test 的 ID:
curl http://127.0.0.1:8080/v1/id/test3、获取雪花 ID:
curl http://127.0.0.1:8080/v1/snowidgRPC 方式
1、获取 ID:
grpcurl -plaintext -d {"tag":"test"} -import-path $HOME/src/id-maker/internal/controller/rpc/proto -proto segment.proto localhost:50051 proto.Gid/GetId2、获取雪花 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 架构模板开发,目录结构如下:

下面对各目录做一个简要说明:
cmd:程序入口 config:配置文件 docs:生成的项目文档 integration-test:整合测试 internal:业务代码 pkg:一些调用的包借用官方的两张图:

整体的层次关系是这样的,最里面是 models,定义我们的表结构,然后中间是业务逻辑层,业务逻辑层会提供接口,给最外层的 API 来调用,最外层就是一些工具和调用入口。
这样做的最大好处就是解耦,不管最外层如何变化,只要在业务逻辑层实现对应接口即可,核心代码可能根本不需要改变。
所以,它们之间的免费信息发布网调用关系看起来是这样的:

以上就是本项目的全部内容,如果大家感兴趣的话,欢迎给我留言交流,要是能给个 star 那就太好了。
项目地址:
https://github.com/yongxinz/id-maker本文转载自微信公众号「AlwaysBeta」,可以通过以下二维码关注。转载本文请联系AlwaysBeta公众号。

相关文章
解决电脑关机显示脚本页码错误的方法(修复脚本页码错误,让电脑正常关机)
摘要:在使用电脑过程中,有时会遇到电脑关机时出现脚本页码错误的情况。这个问题给用户带来了不便和困扰。本文将提供一些解决方法,帮助用户修复电脑关机显示脚本页码错误的问题,保障电脑正常关机。...2025-11-04
北京2022冬奥会刚刚结束,2月21日上午,来自北京冬奥组委、科技冬奥重点专项项目组及奇安信集团负责冬奥网络安保的相关专家在奇安信安全中心召开“北京2022年冬奥会网络安全‘零事故’经验总结研讨会”。2025-11-04- 复制declareglobaltemporarytablesession.tmp_hy ( dmvarchar(10), mcv2025-11-04
 - 复制select×from(selecta,b,cfromtable1orderbya)astab 1.2025-11-04
 新电脑到手硬盘检测错误的全面解决方案(确保您的新电脑硬盘正常运行,避免数据丢失和系统崩溃)
摘要:当我们购买一台新电脑时,最后一件事情就是确保硬盘的正常运行。然而,有时我们可能会遇到硬盘检测错误的问题,这给我们带来了很多困扰。本文将为您提供一份全面的解决方案,帮助您解决新电脑到...2025-11-04
与上个月QNAP NAS 设备被勒索攻击相类似,近日华硕旗下子公司华芸科技(Asustor)的网络附加存储(NAS)也遭遇了勒索攻击。此次勒索攻击波及全球众多用户,并在ASUST2025-11-04

最新评论