Docker环境下分布式ID重复的问题

Docker环境下分布式ID重复的问题
容器环境下Spring-cloud微服务雪花算法弊端
雪花算法的⼯作机器ID依赖于Mac地址+进程ID来实现唯⼀性,但是在容器环境下Mac地址和进程ID都是相同的,导致相同应⽤⽣成的⼯作机器码ID重复,存在多机器并发出现ID重复的问题
// Mybatis-plus下的Sequence.java类,采⽤5位workerId和5位datacenterId 作为雪花算法的workerId 及机器码ID
public Sequence(long workerId,long datacenterId){
if(workerId > maxWorkerId || workerId <0){
throw new MybatisPlusException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId));
}
if(datacenterId > maxDatacenterId || datacenterId <0){
现浇梁
throw new MybatisPlusException(管理ip
String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId));
}510669
this.workerId = workerId;
this.datacenterId = datacenterId;
}
在Spring-cloud优化⽅案
如果机器码ID⽣成使⽤zookeeper来维护全局唯⼀,则需要额外维护zookeeper组件,势必会影响应⽤可⽤性。
Spring-cloud依赖注册中⼼作为必要组件,是否可以扩展注册中⼼功能,由它来维护全局机器码ID。
sds聚丙烯酰胺凝胶电泳在应⽤启动完成时候,发起请求去注册中⼼申请唯⼀机器码ID,注册中⼼则把机器码ID存⼊Redis或其它存储结构。
电脑切换器
机器码存储列表可采⽤Map<String,Long> , key=应⽤Ip+port , value=机器码ID
如何保证应⽤下线后使⽤过的机器码ID能够正常回收?抽纸机
注册中⼼每个应⽤有⼀个扩展元数据,可以把⽣成的机器码ID存⼊到对应应⽤元数据空间,假如该节点下线则元空间数据也会被清理掉,可以采⽤定时任务⽅式,同步清理回收下线应⽤的机器码ID。
应⽤下线会发送事件通知注册中⼼,可以监听下线事件主动清理回收Redis维护的机器码ID列表,保证有⾜够的机器码ID

本文发布于:2024-09-22 04:22:48,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/105070.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:机器码   注册   下线   维护   组件   地址   算法   机器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议