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