Open gaoke966 opened 7 years ago
问题主要有: 1.个人理解的是在referers变动的时候会触发onRefresh,但是我看到这个方法里面使用Collections.shuffle进行随机打乱,这样的话consistentHashReferers每次都会乱序,是否跟一致性hash的理念相悖? 2.doSelectToHolder方法是在什么时候使用?作用是什么? 3.doSelect的逻辑用的hash算法0x7fffffff & originValue;如何理解?consistentHashReferers.get((hash + i) % consistentHashReferers.size());这个运算,因为问题1 consistentHashReferers已经乱序,如何能保证相同的hash每次都打到固定的机器上?
这个consistentHash并不是一般意义上的一致性hash,这个算法不适于类似持久资源服务之类的场景,只适合短时缓存类的服务。 2、doSelectToHolder其实就是获取一组可用server节点,方便HA策略在调用失败后重试。是否使用取决于haStrategy。目前failover的HA使用了这个方法。 3、0x7fffffff & originValue是为了获取正值,防止hash时下标越界。
噢,明白了,谢谢
问题主要有: 1.个人理解的是在referers变动的时候会触发onRefresh,但是我看到这个方法里面使用Collections.shuffle进行随机打乱,这样的话consistentHashReferers每次都会乱序,是否跟一致性hash的理念相悖? 2.doSelectToHolder方法是在什么时候使用?作用是什么? 3.doSelect的逻辑用的hash算法0x7fffffff & originValue;如何理解?consistentHashReferers.get((hash + i) % consistentHashReferers.size());这个运算,因为问题1 consistentHashReferers已经乱序,如何能保证相同的hash每次都打到固定的机器上?