NotFound9
NotFound9
例如获取节点有三种情形: 1.没有/forever目录,第一次创建 2.有/forever目录,并且子节点中有当前的ip:port 3.有/forever目录,并且子节点中没有当前的ip:port,新创建一个 如果第一次启动时,有多台机器启动,并发执行SnowflakeZookeeperHolder.init()方法确实是会有第三种情形的机器也执行第一种情形的代码这个问题,虽然概率比较小。但是你如果直接取zk_AddressNode的话,是会避免这个问题,但是代码语义方面,可能会带来潜在的问题,因为目前的代码将创建/forever目录和子节点的操作进行区分,第一次启动时,才创建/forever目录,然后创建子节点。后面其他机器启动时,不再去创建/forever目录 源代码 ``` //目前不管是第一种情形,还是第三种情形都会调这个方法 private String createNode(CuratorFramework curator) throws Exception { try { return curator.create().creatingParentsIfNeeded().withMode(CreateMode.PERSISTENT_SEQUENTIAL).forPath(PATH_FOREVER + "/" + listenAddress + "-", buildData().getBytes()); } catch (Exception e)...
@Yaccc 同学,你好!针对workId暂时不支持回收的问题,我提了一个PR,增加了一种workId复用的机制,辛苦你看一看,谢谢了!PR在这里https://github.com/Meituan-Dianping/Leaf/pull/94
@Yaccc 你好,我仔细思考后,我认为以目前美团使用ID生成服务的方式来看,之前的那种方式是比较贴合美团业务的,因为美团的使用ID生成器的方式主要是通过基础架构组在特定范围内的机器部署Leaf实例,然后业务方通过HTTP,RPC来调用,如果是像百度的Uid-generator那样,业务方将Leaf以组件化的方式来集成到项目中,然后部署到各自业务的机器上,这样首先需要增加对workId的位数,而且由于是面向整个公司的IP和Port,可能导致zookeeper存储的workId列表过长,这样每次从zookeeper获取workId列表的传输数据量会比较大,判断列表中是否有当前IP+端口对应的workId的时间复杂度会比较高,所以当前的方式没法应对像百度的Uid-generator那样以组件化方式接入Leaf的业务场景。
@loren9527 你好,这个项目 https://github.com/NotFound9/Leaf 中增加了对workId回收的功能支持,大家感兴趣可以看一看
你可以试一试,看用到的一些执行SQL因为MySQL和Oracle的语法差异,是否需要修改
> 发现一个逻辑问题,SnowflakeService 中在获取端口的时候是否能放在leaf.snowflake.enable这个参数的判断后面。 理论上是放到leaf.snowflake.enable这个参数的判断后面更好一点,因为原来的代码是按照放到前面这种方式写的,所以当时就是根据原来的代码改的,在原来的逻辑增加了后面几种模式
> 请问下是否考虑过使用redis 来代替zk呢 在 2020-06-14 10:52:40,"NotFound9" 写道: 发现一个逻辑问题,SnowflakeService 中在获取端口的时候是否能放在leaf.snowflake.enable这个参数的判断后面。 理论上是放到leaf.snowflake.enable这个参数的判断后面更好一点,因为原来的代码是按照放到前面这种方式写的,所以当时就是根据原来的代码改的,在原来的逻辑增加了后面几种模式 — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. 你可以看看我fork的这个项目有使用MySQL替代Zookeeper作为注册中心,https://github.com/NotFound9/Leaf
你们使用的注册中心是什么,apollo吗,还是数据库,我fork了一下Leaf项目https://github.com/NotFound9/Leaf,可以增加对其他注册中心的支持
@kpvt001 你好,我发起了一个Leaf项目改进计划,对Leaf项目进行了一些功能增强,问题修复及优化改进。目前增加了使用MySQL作为注册中心,以及项目配置作为注册中心的支持,你有空可以看看这个项目,能否满足你们的业务需求。 https://github.com/NotFound9/Leaf
> > @kpvt001 你好,我发起了一个Leaf项目改进计划,对Leaf项目进行了一些功能增强,问题修复及优化改进。目前增加了使用MySQL作为注册中心,以及项目配置作为注册中心的支持,你有空可以看看这个项目,能否满足你们的业务需求。 > > https://github.com/NotFound9/Leaf > > 你好,我们使用的是consul和etcd consul和etcd比较少见,但是一般项目都会依赖mysql,可以考虑使用mysql作为注册中心,或者如果部署Leaf服务的服务器固定的情况下,使用local模式,将项目中的properties作为注册中心,将服务器对应的workId写在properties中。目前我fork的项目 https://github.com/NotFound9/Leaf 对于mysql作为注册中心和local模式都进行了功能支持,你有空的话,可以看一看