V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wudikua
V2EX  ›  程序员

有用过twitter的snowflake全局ID生成的么。

  •  
  •   wudikua · Feb 8, 2014 · 7768 views
    This topic created in 4465 days ago, the information mentioned may be changed or developed.
    我看了下IdWorker.scala还是比较好看懂的,不过这个workerid是怎么获取的啊,一个节可以有多个workerid么。还是说就是一个节点一个固定的workerid,然后通过客户端去通过某种策略决定从哪个节点取id。我看还用了zookeeper,这个听过,没具体看过。
    6 replies    1970-01-01 08:00:00 +08:00
    wudikua
        1
    wudikua  
    OP
       Feb 8, 2014
    yaroot
        2
    yaroot  
       Feb 8, 2014
    以前看过这项目 没实际用过..代码很简单了...

    zookeeper应该是做service discovery, 让客户端自己LB...

    id获取看SnowflakeServer.scala文件里应该是命令行参数, 这个配置生成很容易了

    一个server一个workerid, 用zookeeper做保证.
    dianyong
        3
    dianyong  
       Feb 8, 2014
    scala不是重点,逻辑很简单,就是根据ip,pid,time,random等获取一个唯一ID,任何语言都可以实现。
    wudikua
        4
    wudikua  
    OP
       Feb 8, 2014
    @yaroot 有道理,workerid和什么pid好像也没什么关系,可能是启动thrift server时候指定的,zookeeper只是防止workerid重复。我之前理解还以为一个thrift server启动了多个IdWorker,然后workerid是他们的pid。
    wudikua
        5
    wudikua  
    OP
       Feb 8, 2014
    发现还是有问题,因为用的是thrift的THsHaServer,这个processor是多线程的,怎么保证不同线程,在同一时刻生成的id是不同的呢?
    @dianyong
    @yaroot
    wudikua
        6
    wudikua  
    OP
       Feb 8, 2014
    知道了,多个processor中sequence是共享的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   838 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:50 · PVG 03:50 · LAX 12:50 · JFK 15:50
    ♥ Do have faith in what you're doing.