Score
0
Watch 3 Star 9 Fork 3

JM_Joy / idgendRustMIT

Join us
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
简单粗暴的预生成唯一纯数字ID生成服务。 spread retract

Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

IDGEND

🐮🍺简单粗暴的预生成唯一纯数字ID生成服务。

适用场景

  1. 唯一ID(用户ID,订单号等)
  2. 乱序ID
  3. 纯数字简短ID
  4. 分布式部署(性能+容灾)

使用方法

安装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

相关数据

  1. 生成10000000,99999999区间的ID仅占用磁盘空间812M,空间并不随着区间大小而线性增加,和rocksdb的压缩机制有关。

原理

使用rocksdb作为存储,在服务器本机上按指定的数字区间范围预先生成一批乱序的ID,然后提供http或者grpc服务,供业务调用获取唯一ID,每次获取都会将存储的ID删除掉。

流程图

process

分布式部署图

process

特点

  1. 足够简单,没有依赖数据库的自增或者依赖时钟的算法,不用担心会出现ID重复的可能。
  2. 不需要搭建数据库,只需要在服务器上启动即可,省去数据库的维护成本。
  3. 水平扩展相对简单,只需要保证各台机器之间的数字ID范围不要有重叠即可。
  4. 方便容灾,无需担心单台机器出现故障造成不可用,只会影响到那台机器上的数字区间没法生成而已。

注意事项

  1. 单台机器ID即将耗尽日志会报警,耗尽后服务自动退出,重启也会失败。

License

MIT

Comments ( 4 )

Sign in for post a comment

Rust
1
https://gitee.com/jmjoy/idgend.git
git@gitee.com:jmjoy/idgend.git
jmjoy
idgend
idgend
master

Help Search

220309 7019f5b6 1899542 220318 4015cbb9 1899542