V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wudikua
V2EX  ›  程序员

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

  •  
  •   wudikua · 2014-02-08 11:42:27 +08:00 · 7187 次点击
    这是一个创建于 3939 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我看了下IdWorker.scala还是比较好看懂的,不过这个workerid是怎么获取的啊,一个节可以有多个workerid么。还是说就是一个节点一个固定的workerid,然后通过客户端去通过某种策略决定从哪个节点取id。我看还用了zookeeper,这个听过,没具体看过。
    6 条回复    1970-01-01 08:00:00 +08:00
    wudikua
        1
    wudikua  
    OP
       2014-02-08 12:09:30 +08:00
    yaroot
        2
    yaroot  
       2014-02-08 12:17:05 +08:00
    以前看过这项目 没实际用过..代码很简单了...

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

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

    一个server一个workerid, 用zookeeper做保证.
    dianyong
        3
    dianyong  
       2014-02-08 12:39:31 +08:00
    scala不是重点,逻辑很简单,就是根据ip,pid,time,random等获取一个唯一ID,任何语言都可以实现。
    wudikua
        4
    wudikua  
    OP
       2014-02-08 14:47:49 +08:00
    @yaroot 有道理,workerid和什么pid好像也没什么关系,可能是启动thrift server时候指定的,zookeeper只是防止workerid重复。我之前理解还以为一个thrift server启动了多个IdWorker,然后workerid是他们的pid。
    wudikua
        5
    wudikua  
    OP
       2014-02-08 16:06:47 +08:00
    发现还是有问题,因为用的是thrift的THsHaServer,这个processor是多线程的,怎么保证不同线程,在同一时刻生成的id是不同的呢?
    @dianyong
    @yaroot
    wudikua
        6
    wudikua  
    OP
       2014-02-08 17:46:07 +08:00
    知道了,多个processor中sequence是共享的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1133 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 23:01 · PVG 07:01 · LAX 15:01 · JFK 18:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.