[Ringpop] 一些问题

  1. 上课提到新节点上先 或者节点下线 zookeeper会知道 但我理解ringpop本身是不需要依赖zookepper的? 如果是,那在没有zookeeper的情况下, ringpop是如何知道的呢?

  2. 我之前一直以为A, B, C 代表三个不一样的服务,请问如果不是, 那为什么不把所有的直接放到一个大的ring上 而是放到三个小的ring上 请问好处是什么 谢谢

3.请问如果我有一个request 问一个range的ID的信息, 请问这些信息是散落在多个不同节点上,
比如 A(0, 1, 2) , B (3, 4, 5), C (6, 7, 8)
那现在request需要1,3, 6的信息的时候,request是怎么forward的? 我理解是client -> request -> A (假设先到A) -> B, C (同时)-> A -> client?不知道这个对不对?

  1. 如果这个节点down了,根据consistent hashing是不是可以直接failover到有备份的下一个节点?不需要额外的data migration

谢谢

  1. 通过 Gossip,这是 decentralized 的方法。Zookeeper 是 centralized 的方法。都可以。
  2. 可以看一下 Uber Engineering's Ringpop - The Uber Engineering Blog
  3. 我的理解是你总是一个一个 request(也就是1,3,6分别 request),每个 request 都会分配到特定的 node 上。
  4. 节点间有备份。

想追问一下3

我意思是一个request同时要三个信息 比如driver_id: [1, 3, 6]的3个driver的信息

不好意思之前没理解你的意思,比如同时要计算一个乘客周围的多个司机离他的距离的话,就需要同时问多个其他节点然后汇总信息来做计算。