Git Product home page Git Product logo

simonalong / butterfly Goto Github PK

View Code? Open in Web Editor NEW
175.0 175.0 57.0 341 KB

分布式ID生成器框架:超高性能的发号器框架。通过引入多种新的方案,彻底解决雪花算法的时间回拨等问题,并将雪花算法原生QPS提高最少十几~二十倍

Home Page: https://www.yuque.com/simonalong/butterfly

License: Apache License 2.0

Java 100.00%
leaf snowflake snowflake-java snowflake-twitter tinyid unique-id unique-identifier uuid uuid-generator zookeeper-workerid

butterfly's People

Contributors

dependabot[bot] avatar simonalong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

butterfly's Issues

No heartbeat between the server side and the client side

I tried to review the interaction between the server side and the client side. It seems there is not a heartbeat mechanism so that the system relies on the hostid upward counting to avoid uuid duplication. I feel that this project is not fully completed.

看了以下服务端和客户端的交互代码,看上去客户端和服务器之间没有心跳,只能依靠hostid+1来避免重复发号,感觉这一块并没有完全做完。

zookeeper分配workerId多节点同时启动时存在并发安全问题

问题描述
zookeeper分配workerId多节点同时启动时存在并发安全问题,存在多个节点分配同一个workerId的bug

问题出现步骤
参考如下示例:

  1. 最新版本
  2. DefaultWorkerIdAllocator findNode方法
  3. if (zkClient.nodeExist(workerNodePathTem)) {
    if (addSessionNode(workerNodePathTem)) {
    savePath(index);
    return true;
    }
    }
    此代码块存在并发问题,多个节点启动时会存在分配相同workerId的情况,导致不同节点生成id重复

期望结果
每个节点分配的机器位不相同

实际结果
image
image
我这边生产环境中碰到两个节点被分配了相同机器位,一个节点index为31创建session node成功,另外一个节点index也为31进来,删除了节点后,重新创建

restful方式报错

Failed to get driver instance for jdbcUrl=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC

Caued by: java.sql.SQLException: No suitable driver

正常走DB模式是无问题

自增性问题

部分节点重启后,新启动的节点时间戳比较大,生成的id也比较大,破坏了整体的自增性?

非正常停止应用(比如kill -9 )重启应用后,addNameSpace会报错

2021-05-11 11:28:54.871 ERROR [ ]- [main] c.s.n.Neo : [Neo] sql=> select max(work_id) from butterfly_uuid_generator where namespace = ? for update, parameters => [CustomerManage]
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1837)
at com.simonalong.neo.TableMap.put(TableMap.java:383)
at com.simonalong.neo.TableMap.put(TableMap.java:370)
at com.simonalong.neo.Neo.generateResult(Neo.java:2218)
at com.simonalong.neo.Neo.executeOne(Neo.java:2183)
at com.simonalong.neo.Neo.execute(Neo.java:1746)
at com.simonalong.neo.Neo.exeValue(Neo.java:798)
at com.simonalong.butterfly.worker.db.DbWorkerIdHandler.lambda$insertWorker$2(DbWorkerIdHandler.java:201)
at com.simonalong.neo.Neo.tx(Neo.java:1618)
at com.simonalong.neo.Neo.tx(Neo.java:1525)

数据库内之前add的namespace依然存在,删除后才不报错

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.