storage host接受到查询指令后的执行模式

在看源码的storage client以及collect Response部分有一些疑问,请大家帮忙解惑一下:

  1. 这里的requests map中,每个host对应的request是否都不同?如果不同的话,是怎么做区分的呢?如果相同,对每一台host发相同的请求不会导致重复操作吗?

  2. 当分布式storage集群中每个host都接收到request后,每个host是并行处理req还是串行处理呢?如果是并行,是怎么做到知道要从每一个storage节点中获取哪些数据的呢?比如我要获取从vertex a出发的三跳节点,要知道前两跳的结果才能得到第三跳的结果,那并行处理的话要怎么同时从所有host中抓取需要的数据呢?如果是串行,当host非常多时又要如何保障处理效率呢?

  3. 在阅读到storage client中的collect response时,又感觉是一个个host顺序串行处理,这里的collect response是不是可以理解为知识collect了当前输入的host的response,而不是目前为止所有host的呢?那么最后所有response的汇总,又是发生在哪里呢?

肯定不同,因为访问的每个 host 上的 part 是不同的,你可以看看接口中定义的 parts 字段

每个 host 上的不同 part 时并行处理的,单个 part 内的不同请求是排队执行的。获取哪些数据,都在 request 中包含了。GetNbr 接口只拿一跳的结果,不存在你说的拿三跳。多跳的数据是通过 graph 一跳跳的执行通过 RPC 来 storage 拿的。

里面的逻辑是异步的,虽然你看到的是个顺序的 for 循环,但任务都不是在当前线程做的。至于所有结果的搜集,可以看后面的 collectAll 的实现

1 个赞

原来是这样!感谢指导~

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。