Golang 分散式 ID 生成系統,高效能、高可用、易擴充套件的 id 生成服務
簡介
gid 是使用 golang 開發的生成分散式 Id 系統,基於資料庫號段演算法實現
效能
- id 從記憶體生成,如果 (step) 步長設定的足夠大,qps 可達到千萬 + ### 可用性
- id 分配依賴 mysql ,當 mysql 不可用的,如果記憶體上還有的可以繼續分配 ### 特性
- 全域性唯一的 int64 型 id
- 分配 ID 只訪問記憶體
- 可無限橫向擴充套件
- 依賴 mysql 恢復服務迅速
......
安裝
- 初始化 mysql
create database gid;
use gid;
create table segments
(
biz_tag varchar(128) not null,
max_id bigint null,
step int null,
remark varchar(200) null,
create_time bigint null,
update_time bigint null,
constraint segments_pk
primary key (biz_tag)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_bin;
INSERT INTO segments(`biz_tag`, `max_id`, `step`, `remark`, `create_time`, `update_time`)
VALUES ('test', 0, 100000, 'test', 1591706686, 1591706686);
- 編譯執行專案
git clone https://github.com/hwholiday/gid.git
cd gid/cmd
go build -o gidsrv
./gidsrv -conf ./gid.toml
壓測
BenchmarkService_GetId-4 2046296 583 ns/op
健康檢查
獲取 ID
- test6 獲取該 tag 型別的 id
- curl http://127.0.0.1:8080/id/test6
建立 tag
- biz_tag tag 名稱
- max_id 從這裡開始派發 ID
- step 步長
- remark 備註
- {"biz_tag":"test6","max_id":0,"step":10,"remark":"test6 tag"}
- curl -H "Content-Type:application/json" -X POST --data '{"biz_tag":"test6","max_id":0,"step":10,"remark":"test6 tag"}' http://127.0.0.1:8080/tag
重點 SQL
Begin
UPDATE table SET max_id=max_id+step WHERE biz_tag=xxx
SELECT tag, max_id, step FROM table WHERE biz_tag=xxx
Commit
聯絡 QQ: 3355168235
完整程式碼示例
文獻
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 分散式唯一ID生成服務分散式
- Leaf:美團分散式ID生成服務開源分散式
- 分散式ID生成服務,真的有必要搞一個分散式
- 開源 高效能 高可用 可擴充套件套件
- SEQSVR:Go + MySQL 實現的高效能 ID 生成服務VRGoMySql
- 可擴充套件Web架構與分散式系統套件Web架構分散式
- Leaf-分散式ID生成系統分散式
- 探討分散式ID生成系統分散式
- redis高可用強擴充套件的叢集方案Redis套件
- 分散式系統中 Unique ID 的生成方法分散式
- [高併發]EntityFramework之高效能擴充套件Framework套件
- Scrapy框架中的Middleware擴充套件與Scrapy-Redis分散式爬蟲框架套件Redis分散式爬蟲
- Guuid: 由 Go 語言開發的 UUID 生成服務UIGo
- 使用半透明系統UI擴充套件Android檢視UI套件Android
- 分散式系統中唯一 ID 的生成方法分散式
- 第17章-golang實現簡易的分散式系統Golang分散式
- Slack是如何實現分散式任務處理的擴充套件?分散式套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 如何搭建一個高可用、高擴充套件的圖片儲存功能套件
- AbpVnext使用分散式IDistributedCache Redis快取(自定義擴充套件方法)分散式Redis快取套件
- Android ListView功能擴充套件,實現高效能的瀑布流佈局AndroidView套件
- windows系統磁碟擴容/擴充套件Windows套件
- 分散式系統關注點——初識「高可用」分散式
- 分散式高可用 id 伺服器設計實現分散式伺服器
- 分散式、高吞吐量、高可擴充套件性訊息佇列服務Kafka商業化釋出!分散式套件佇列Kafka
- 擴充套件系統的磁碟空間套件
- 分散式系統中ID的需求分散式
- 高效能的Python擴充套件(2)Python套件
- 高效能的Python擴充套件(1)Python套件
- 高效能的Python擴充套件(3)Python套件
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Android - 利用擴充套件函式為Bitmap新增文字水印Android套件函式
- 擴充套件表示式套件
- 管理系統中風險是系統可用性和可擴充套件性的關鍵套件
- PHP擴充套件高效能日誌系統SeasLog簡單上手PHP套件
- aix擴充套件檔案系統AI套件
- aix 擴充套件檔案系統AI套件
- IBM擴充套件在華雲端計算生態系統IBM套件