我正在尝试实现Pastry Distributed Hash Table,但是有些事情使我无法理解。我希望有人能澄清一下。
免责声明:我不是计算机科学专业的学生。我一生中刚上过两门计算机科学课程,但都没有涉及任何远程复杂的问题。我从事软件工作已经有多年了,所以如果我能将想法付诸实践,我觉得我已经完成了实现任务。因此,我可能只是缺少一些明显的东西。
我已经阅读了作者发表的论文[1],并且取得了一些不错的进步,但是我一直对路由表的工作原理这一点感到困惑:
该文件声称
一个节点的路由表中,,被组织成 与行每个条目。路由表第n行的条目均引用一个节点,该节点的nodeId在前n位共享当前节点的nodeId,但其n + 1位具有2 b − 1可能值之一,而不是所述ñ + 1个数位在本节点的id。
的代表一个应用程序特定的变量,通常是。为了简单起见,让我们使用。所以上面是
一个节点的路由表中,,被组织成 与行的每个条目。路由表第n行的个条目均引用一个节点,该节点的nodeId在前n个数字中共享当前节点的nodeId,但其n + 1个数字具有除n +以外的2 b - 1可能值之一当前节点ID中的第1位数字。
我很了解 此外,是群集中服务器的数量。我也知道
我的问题是,如果条目所在的行取决于键的共享长度,那么为什么看似随机的行数限制呢?当时,每个nodeId都有32位数字(128位nodeIds分为b位的数字)。当会发生什么ň得到足够高,使得⌈ 登录16 ñ?我意识到,要达到这种情况,将需要340,282,366,920,938,463,463,374,607,431,768,211,457(如果我的数学是正确的)服务器才能达到这种情况,但是这看起来像是一个奇怪的包含,并且从未解释过这种相关性。
此外,如果服务器数量少,会发生什么情况?如果我的服务器少于16台,则表中只有一行。此外,在任何情况下,该行中的每个条目都不会具有相应的服务器。条目应该留空吗?我意识到无论有什么服务器,无论如何我都可以在叶集中找到服务器,但是第二行引发了同样的难题-如果我没有具有nodeId的服务器该怎么办这样我就可以填充第n个数字的所有可能排列?最后,如果我有四个服务器,并且我有两个节点以某种随机的uke幸方式共享32个数字中的20个,那么我应该为该节点填充表的20行,即使那是比我什至无法填满的行还要多吗?
这是我想出的方法,试图通过这种方式推理出自己的方式:
- 如果没有一个节点与该前缀精确匹配,则将条目设置为空值。
- 将添加空行,直到存在足够的行以匹配nodeId的共享长度为止。
- 当且仅当没有与所需消息ID匹配的条目时,才在路由表中搜索共享长度大于或等于当前nodeId且在数学上比当前条目更近的nodeId的nodeId。 nodeId到所需的ID。
- 如果在#3中找不到合适的节点,则假定这是目的地并传递消息。
所有这四个假设是否成立?我还应该在其他地方寻找有关此信息吗?
- Pastry: A.Rowstrong和P.Druschel(2001)的大型点对点系统的可扩展,分散式对象定位和路由 - 在此处下载