-
Notifications
You must be signed in to change notification settings - Fork 558
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
关于Migrate的疑惑 #40
Comments
非常好的issue,我来解释下,不着急 |
@Terry-Mao 多谢毛总,静候回复。:) |
@Terry-Mao 毛总。。。。 |
年代有点久远,删除和更新的目的踢下线是为了避免推送时候找不到channel,所以强制踢的,其实gopush做的有点复杂了,现在goim这种在线服务,扔给了router(专门的路由服务)来实现,这样从逻辑来说把router和comet 分开管理了。至于add的问题,年代有点久,我不太记得了,@thinkboy 看看 |
1.添加节点会先后触发两个事件EventAdd,EventUpdate, 流程是先触发EventAdd,这个事件其他节点不会收到,也没有任何Merge操作。EventAdd处理之后会触发EventUpdate,通知到其他节点,这个事件才开始通知所有节点进行Merge操作。 |
@thinkboy 感谢回复。 第一点我理解了,可是第二点的话,我查了相关的资料发现删除节点的话,似乎并不会引起正常节点的链接迁移,这个我也有测试过。
|
那可能是一个多余操作了,多谢指出 |
@Terry-Mao 非常感谢回复。学习路很艰难,日后可能还会有叨扰,见谅。:) |
这个项目其实本身做复杂了,可以看看goim,一直在维护和更新呢 |
@Terry-Mao ok :) |
首先很感谢这个库,由于这个库我知晓了不少分布式架构知识。
另外这个库是我学习golang以来研究的第一份源码,有个地方有些疑惑,希望能得到回答。
关于Migrate,
我查看
comet
的channel.go
看到应该是comet
在接到Migrate消息后nodeWeightMap更新到最新,然后去检查当前记录的channel key的一致性hash是否是本节点,如果不是就移除并且关闭此channel对应的所有长连接。上述理解,应该没问题吧。
我非常疑惑的是通知Migrate的时机,是由
comet节点Add事件
以外的事件触发的(Del和Update)。rpc/comet.go L195
一个一致性hash环,不是应该被删除的节点上的key会被分散到其他节点。而添加节点的话,会从其他节点里匀出一部分到新节点么,那为什么在新节点出现的时候不去通知已有节点把该匀出来那些key清理掉?
如果是节点被删除,那其他正常节点也没必要有清理操作啊,他们本身已有的那些key并不会因为某节点的删除而产生所属变化啊。
可能我的问题比较小白,还请见谅,在下对golang和分布式都是初学,想了很久也没搞懂这个问题。
The text was updated successfully, but these errors were encountered: