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

2014-02-08 11:42:27 +08:00
 wudikua
我看了下IdWorker.scala还是比较好看懂的,不过这个workerid是怎么获取的啊,一个节可以有多个workerid么。还是说就是一个节点一个固定的workerid,然后通过客户端去通过某种策略决定从哪个节点取id。我看还用了zookeeper,这个听过,没具体看过。
7075 次点击
所在节点    程序员
6 条回复
wudikua
2014-02-08 12:09:30 +08:00
yaroot
2014-02-08 12:17:05 +08:00
以前看过这项目 没实际用过..代码很简单了...

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

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

一个server一个workerid, 用zookeeper做保证.
dianyong
2014-02-08 12:39:31 +08:00
scala不是重点,逻辑很简单,就是根据ip,pid,time,random等获取一个唯一ID,任何语言都可以实现。
wudikua
2014-02-08 14:47:49 +08:00
@yaroot 有道理,workerid和什么pid好像也没什么关系,可能是启动thrift server时候指定的,zookeeper只是防止workerid重复。我之前理解还以为一个thrift server启动了多个IdWorker,然后workerid是他们的pid。
wudikua
2014-02-08 16:06:47 +08:00
发现还是有问题,因为用的是thrift的THsHaServer,这个processor是多线程的,怎么保证不同线程,在同一时刻生成的id是不同的呢?
@dianyong
@yaroot
wudikua
2014-02-08 17:46:07 +08:00
知道了,多个processor中sequence是共享的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/99327

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX