1 unstable release
0.1.0 | Jun 22, 2021 |
---|
75KB
308 lines
IDGEND
🐮🍺简单粗暴的预生成唯一纯数字ID生成服务。
适用场景
- 唯一ID(用户ID,订单号等)
- 乱序ID
- 纯数字简短ID
- 分布式部署(性能+容灾)
使用方法
安装rustup
,运行cargo build --release
编译。
查看帮助:
idgend --help
运行参考:
idgend --data-dir=/data/storage --range=1000000,9999999 --http-addr=127.0.0.1:8080 --grpc-addr=127.0.0.1:8090
Demo
http: http://idgend.jmjoy.top/id
相关数据
- 生成
10000000,99999999
区间的ID仅占用磁盘空间812M
,空间并不随着区间大小而线性增加,和rocksdb
的压缩机制有关。
原理
使用rocksdb
作为存储,在服务器本机上按指定的数字区间范围预先生成一批乱序的ID,然后提供http
或者grpc
服务,供业务调用获取唯一ID,每次获取都会将存储的ID删除掉。
流程图
分布式部署图
特点
- 足够简单,没有依赖数据库的自增或者依赖时钟的算法,不用担心会出现ID重复的可能。
- 不需要搭建数据库,只需要在服务器上启动即可,省去数据库的维护成本。
- 水平扩展相对简单,只需要保证各台机器之间的数字ID范围不要有重叠即可。
- 方便容灾,无需担心单台机器出现故障造成不可用,只会影响到那台机器上的数字区间没法生成而已。
注意事项
- 单台机器ID即将耗尽日志会报警,耗尽后服务自动退出,重启也会失败。
License
Dependencies
~51MB
~857K SLoC