idgend

Crates.ioidgend
lib.rsidgend
version0.1.0
sourcesrc
created_at2021-06-22 03:10:16.748497
updated_at2021-06-22 03:10:16.748497
description🐮🍺简单粗暴的预生成唯一纯数字ID生成服务。
homepage
repository
max_upload_size
id413178
size120,155
jmjoy (jmjoy)

documentation

README

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

Commit count: 0

cargo fmt