idgo基于 MySQL 的 ID 生成器
idgo是一個利用MySQL批量生成ID的ID生成器, 主要有以下特點:
-
每次通過事務批量取ID,性能較高,且不會對MySQL造成壓力.
-
當ID生成器服務崩潰后,可以繼續(xù)生成有效ID,避免了ID回繞的風險.
業(yè)界已經(jīng)有利于MySQL生成ID的方案,都是通過:
REPLACE INTO Tickets64 (stub) VALUES ('a');
SELECT LAST_INSERT_ID();
這種方式生成ID的弊端就是每生成一個ID都需要查詢一下MySQL,當ID生成過快時會對MySQL造成很大的壓力. 這正是我寫這個lib庫的原因.
idgo服務正確性和高可用保障措施
1. 壓力測試結(jié)果
壓測環(huán)境
| 類別 | 名稱 |
|---|---|
| OS | CentOS release 6.4 |
| CPU | Common KVM CPU @ 2.13GHz |
| RAM | 2GB |
| DISK | 50GB |
| Mysql | 5.1.73 |
本地mac連接遠程該MySQL實例壓測ID生成服務。 每秒中可以生成20多萬個ID。性能方面完全不會有瓶頸。
2.ID生成正確性驗證
模擬4個進程(cmd/example.go)以每秒生成100個ID的頻率并發(fā)向MySQL IDGEN服務申請ID,并將生成的ID寫入MySQL。 測試16小時后,生成330萬個ID,未發(fā)現(xiàn)有重復ID。
3.ID生成服務宕機后的恢復方案
當idgo服務意外宕機后,可以切從庫,然后將idgo對應的key加上適當?shù)钠屏俊?/p>
4. 使用方法
參考cmd/example.go文件使用, 用起來很簡單. :)
編譯并運行example.go
. ./dev.sh make ./bin/cmd
評論
圖片
表情
