掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
作者: yongxinz 2021-11-08 19:25:37
開發(fā)
后端
分布式 項目整體代碼量并不多,不管是想要在實際生產(chǎn)環(huán)境中使用,還是想找個項目練手,我覺得都是一個不錯的選擇。

今天跟大家介紹一個開源項目:id-maker,主要功能是用來在分布式環(huán)境下生成唯一 ID。上周停更了一周,也是用來開發(fā)和測試這個項目的相關(guān)代碼。
美團有一個開源項目叫 Leaf,使用 Java 開發(fā)。本項目就是在此思路的基礎(chǔ)上,使用 Go 開發(fā)實現(xiàn)的。
項目整體代碼量并不多,不管是想要在實際生產(chǎn)環(huán)境中使用,還是想找個項目練手,我覺得都是一個不錯的選擇。
在大部分系統(tǒng)中,全局唯一 ID 都是一個強需求。比如快遞,外賣,電影等,都需要生成唯一 ID 來保證單號唯一。
那業(yè)務(wù)系統(tǒng)對 ID 號的要求有哪些呢?
在此背景下,有一個高可用的唯一 ID 生成系統(tǒng)就很重要了。
生成 ID 分兩種方式:
使用上提供兩種方式來調(diào)用接口:
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
本地開發(fā)
- # Run MySQL
- $ make compose-up
- # Run app with migrations
- $ make run
項目使用 go-clean-template 架構(gòu)模板開發(fā),目錄結(jié)構(gòu)如下:
下面對各目錄做一個簡要說明:
借用官方的兩張圖:
整體的層次關(guān)系是這樣的,最里面是 models,定義我們的表結(jié)構(gòu),然后中間是業(yè)務(wù)邏輯層,業(yè)務(wù)邏輯層會提供接口,給最外層的 API 來調(diào)用,最外層就是一些工具和調(diào)用入口。
這樣做的最大好處就是解耦,不管最外層如何變化,只要在業(yè)務(wù)邏輯層實現(xiàn)對應(yīng)接口即可,核心代碼可能根本不需要改變。
所以,它們之間的調(diào)用關(guān)系看起來是這樣的:
- HTTP > usecase
- usecase > repository (Postgres)
- usecase < repository (Postgres)
- HTTP < usecase
以上就是本項目的全部內(nèi)容,如果大家感興趣的話,歡迎給我留言交流,要是能給個 star 那就太好了。
項目地址:
本文轉(zhuǎn)載自微信公眾號「AlwaysBeta」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系A(chǔ)lwaysBeta公眾號。
本文名稱:Go開發(fā)的一款分布式唯一ID生成系統(tǒng)
文章轉(zhuǎn)載:http://uogjgqi.cn/article/djjiicd.html

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流