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
相關文章
- Leaf:美團分散式ID生成服務開源分散式
- 分散式ID生成服務,真的有必要搞一個分散式
- SEQSVR:Go + MySQL 實現的高效能 ID 生成服務VRGoMySql
- Leaf-分散式ID生成系統分散式
- 探討分散式ID生成系統分散式
- 分散式系統中ID的需求分散式
- 分散式唯一id生成策略分散式
- 怎樣生成分散式的流水ID分散式
- 分散式唯一 ID 生成器分散式
- 分散式全域性ID生成方案分散式
- 分散式 ID 生成演算法 — SnowFlake分散式演算法
- 分散式id分散式
- 搞懂分散式技術12:分散式ID生成方案分散式
- 分散式唯一 ID 生成器 - IDGen分散式
- 分散式ID系列(2)——UUID適合做分散式ID嗎分散式UI
- 讀構建可擴充套件分散式系統:方法與實踐15可擴充套件系統的基本要素套件分散式
- 分散式唯一ID的幾種生成方案分散式
- 圖解Janusgraph系列-分散式id生成策略分析圖解分散式
- 分散式ID系列(3)——資料庫自增ID機制適合做分散式ID嗎分散式資料庫
- 讀構建可擴充套件分散式系統:方法與實踐08微服務套件分散式微服務
- 分散式ID生成器的解決方案總結分散式
- 開源專案|Go 開發的一款分散式唯一 ID 生成系統Go分散式
- PHP 實現 Snowflake 生成分散式唯一 IDPHP分散式
- 構建高可用性、高效能和可擴充套件的Zabbix Server架構套件Server架構
- 身份證檢驗規則擴充套件 laravel-id-card-number套件Laravel
- 生成分散式唯一ID的幾種解決方案分散式
- 業務系統到底需要什麼樣的ID生成器
- 【高併發】之分散式全域性唯一 ID分散式
- 分散式ID設計方案分散式
- 讀構建可擴充套件分散式系統:方法與實踐09可擴充套件資料庫基礎套件分散式資料庫
- 讀構建可擴充套件分散式系統:方法與實踐03分散式系統要點套件分散式
- ShardingSphere-proxy-5.0.0分散式雪花ID生成(三)分散式
- 研究分散式唯一ID生成,看完這篇就夠分散式
- 分散式ID系列(5)——Twitter的雪法演算法Snowflake適合做分散式ID嗎分散式演算法
- 分散式系統唯一主鍵識別符號ID生成機制比較 - Encore分散式符號
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- ZigBee 擴充套件 PAN [EPID] 的目的及其與 16 位 PAN ID [PID] 的區別。套件
- 基於雪花演算法生成分散式ID(Java版)演算法分散式Java