#node-id #pika #secure #epoch #prefix-record #disable-lowercase

pika-id

Rust语言中的Pika ID实现

2个版本

0.1.1 2022年8月9日
0.1.0 2022年8月9日

#1#pika

每月21次下载

MPL-2.0 许可证

11KB
234

pika rs

Pika的Rust实现

安装

[dependencies]
pika-id = "0.1.0"

基本用法

let prefixes = [
    PrefixRecord {
        prefix: "user".to_string(),
        description: Some("User ID".to_string()),
        secure: false,
    },
    PrefixRecord {
        prefix: "sk".to_string(),
        description: Some("Secret Key".to_string()),
        secure: true,
    }
];

let mut pika = Pika::new(
    prefixes.to_vec(),
    InitOptions {
        epoch: Some(1_650_153_600_000),
        node_id: None,
        disable_lowercase: Some(true),
    },
);

pika.gen("user").unwrap();
    // => user_Mzc5ODk1NTI4NzgxMTY4NjQ

pika.gen("sk").unwrap()
    // => sk_c19iMGI0NTM4ZjU3ZThjYTIyZThjNjNlMTgwOTg5MWMyM18zODA2NTE5MjcwNDc5NDYyNA

节点ID

默认情况下,节点ID是通过查找第一个公共网络接口设备的MAC地址,然后对1024进行取模运算来计算的。

这对于较小的系统来说效果很好,但如果有很多节点生成雪花ID,则可能会发生冲突。在这种情况下,您应该创建一个内部单例服务,该服务维护一个已分配节点ID的滚动计数 - 从1到1023。然后,生成Pika的服务应该调用此服务以获取分配的节点ID。

然后,您可以在初始化Pika时传入节点ID,如下所示

let mut pika = Pika::new(
    prefixes.to_vec(),
    InitOptions {
        epoch: Some(1_650_153_600_000),
        node_id: custom_node_id,
        disable_lowercase: Some(true),
    },
);

依赖关系

~2.7–4MB
~69K SLoC