一.我们的实践分为 号码段(1/3分享) 和 雪花算法(2/3分享) 两种类型: 1.对于号码段的实践使用的是滴滴tinyid项目基础上做了几个类的改造来实现的。 2.对于雪花算法参考了leaf和
一.我们的实践分为 号码段(1/3分享) 和 雪花算法(2/3分享) 两种类型:
1.对于号码段的实践使用的是滴滴tinyid项目基础上做了几个类的改造来实现的。
2.对于雪花算法参考了leaf和uid-genetator的代码通过本地生成的方式来实现的。
二.号码段:在1/3中已经叙述过了
三.雪花算法:
自己创建了一个比较简练的项目:
依据下面方案,工作机器id设置为workerId(5),datacenterId(5),twepoch开始时间戳(毫秒)的设置。
个人认为http的远程访问确实是有点不太方便的,所有根据百度的uid方案,简化了一个简单方案,即将workerId做一个自增id,datacenterId可以固定设置,每个项目的ip+端口+项目名称作为workerId的区分。
https://gitee.com/horizon_546262445/simple-snowflake
每当项目启动时使用本服务的ip,端口,项目名称,datacenterId写入表中,返回主键,这个返回的主键就是workerId。
当然这里因为设置的workerId分配了5位的长度,因此最大到32,当然也可以调整workerId和datacenterId的占用比例,这样对于小型项目的需求时足够的了。
为了便于管理对于同一个项目前提:
twepoch设置一致;
datacenterId设置一致;
workerId动态化(1-32);
服务的ip,端口可以考虑使用jar命令参数指定(脚本管理或者docker管理都可以实现)
这样,后面可以通过调整datacenterId来扩展节点数量。
未完待续