system: [SYSTEM]

user: 5. 测试结果与分析 5.1. 方法实现 Peersim [ 15 ] 是一款P2P系统的模拟器，它以一种组件开发的方式来支持P2P系统模拟，因此使得协议的开发变得容易。Peersim是用Java语言开发的模拟器，它支持两种开发模式，周期驱动(Cycle Driven)的模式和事件驱动(Event Driven)的模式。Peersim支持节点规模巨大的模拟，适应并支持大规模网络的可扩展性和动态性。因此在CBDLO的模拟测试中，选用Peersim模拟器。为了更好的测试CBDLO的性能，以事件驱动的方式在Peersim上实现了拓扑结构，并对测试结果进行了分析。 5.2. 参数设置 假定属性在订阅中的出现服从Zip-f分布，即对任何一个订阅，属性i在其中出现的概率为 μ × i − α ，α， μ是Zip-f分布的参数，且 0 < α ， μ < 1 。也就是说常见的属性大多数订阅都拥有，一些特殊的属性只被一些特殊的订阅拥有。对于CBDLO 来说，虚拟节点的数目最多等于该属性的值空间被订阅所分割产生 图4. 属性拓扑内的路由算法 的最大分割数，不超过 max ( V N ) = subscriptions + 2 。因为属性拓扑是一颗平衡二叉树，所以树的高度等于 h = log 2 N ，N是属性拓扑中虚拟节点的总数。 5.3. 路由的消息开销 为了说明CBDLO性能，在Peersim上实现了另外一种简单的协议Simple以及TERA来和CBDLO做比较。Simple是简单的基于内容的洪泛式分发协议。在这个简单的协议中，拓扑结构是一个类似CBDLO下层拓扑的非结构化随机图拓扑，而数据转发过程则首先在本地进行属性的匹配，如果匹配则表明当前节点订阅了该数据，所以接收数据，然后再把数据转发出去，直到到达消息的最大时限(跳步数)。这个协议无疑是很简单的，但是消息的开销也很大，而且也不能保证能够覆盖所有对数据感兴趣的节点。 首先假定系统的规模为3000个节点，视图的大小是10，本地的最大订阅缓存数是100，转发的最大跳步数是10，则有如下的测试结果。 一个有效的系统不仅要求消息冗余的开销低，而且要求能够把数据准确的发送到相应的需求节点上，为了刻画系统的有效性，我们首先给出有效分发的消息开销的定义： 有 效 分 发 的 消 息 开 销 = 系 统 的 所 有 消 息 数 目 系 统 实 际 成 功 匹 配 的 消 息 理 论 上 所 有 可 能 的 匹 配 在图5中，Simple协议的第一个点表示系统的所有消息总数是68，605个，理论上应该匹配的发布消息数应该是408，但是实际匹配的数目只有68个，所以有效分发的消息开销为68，605/(68/408) = 411，630。 从图5可以看出，CRAWL算法极大的降低了系统的有效分发开销。因为随着订阅数目的增加，在随机转发的过程中有匹配的概率增加，所以随着订阅的增加Simple协议的有效分发开销也逐渐降低。但 图5. 有效分发的开销随订阅总数的变化 是订阅的增加对CBDLO的影响极小，因为模拟的过程中订阅数目一定之后，一定时间内产生的消息总数是固定的，而CBDLO的CRAWL路由算法只有第一阶段受其影响，第二阶段的开销是固定的，等于属性拓扑树的高度，但是对第一阶段产生影响的实际上是属性的数目，而且CBDLO能够把数据准确的发送到所有对数据的需求节点上，因此，CRAWL算法受订阅数目的影响很小。 图6展示了有效分发的消息开销与最大跳步数的关系。与图5比较可以发现，与订阅数相比，当跳步数增加的时候，CRAWL算法的有效分发的开销降低要明显一点。但是和简单的随机算法相比较，仍然是很稳定的。Simple算法开始的时候受跳步数影响而有效分发的消息开销迅速降低，但是当达到一定程度之后，却不再降低，甚至有所回升。原因是Simple算法随着跳步数的增加消息会不断的增加，但是跳步数越大，对它分发准确性的影响就越小，反而是消息本身成了主要开销。 图7比较了TERA和CBDLO在数据分发时的消息开销随节点变化的情况。在实验中节点的数目从 图6. 有效分发的消息开销随最大跳步数的变化 图7. CBDLO与TERA分发的消息开销比较 100到1，000，000，000变化。TERA中有100个主题，文献 [ 16 ] 的实验表明在TERA的下层拓扑上进行随机转发的命中率随着入口点查询表大小的增加而提高，当入口点查询表的大小为50、随机行走的最大跳步数为10时，命中率已经能够达到90%，在规模较大的网络中提高入口点查询表的大小时，命中率并不会有特别显著的提高，因此在综合考虑空间和效率的情况下，TERA的入口点查询表的大小宜定为50。CBDLO在下层拓扑的命中率也随着入口点查询表的大小的增加而提高，但是要在最大跳步数为10的情况下让命中率达到90%，则入口点查询表的大小不能低于100，因此CBDLO的入口点查询表大小被设定为100。在上面的条件下，得到如图7所示的结果，实验结果表明，随着节点数目的增加，在网络规模较小时，TERA和CBDLO的消息开销相差不大，这是因为网络规模较小时TERA的广播消息开销并不大，而CBDLO却有较多的下层消息开销；但是随着网络规模增大，TERA的消息开销迅速增大，而CBDLO增加的更加缓慢，表明CBDLO的上层结构化拓扑有效的降低了消息的开销。因此CBDLO比TERA表现出更大的优势，更加适应大规模网络的数据分发。 5.4. 内容匹配的开销 传统的基于内容的分发往往把属性的匹配过程集中到一个或少数几个节点上，使得属性的匹配过程成了快速分发的一个瓶颈，而且使得少数节点的负载过重，严重影响了系统的效率，而且损害了系统的可扩展性。CBDLO把匹配的过程分布到网络上不同的节点上，使得匹配的过程得以并行分布的进行，不但提高了匹配的执行速度，而且降低了单个节点的开销。CRAWL通过两个机制实现了数据匹配过滤的分布化，第一个机制是分解一个数据的多个属性，让不同的属性在不同的拓扑上进行，即使是在下层的拓扑上，多个属性之间也是并行的；第二个机制是通过分割属性的值空间为相连但互不相交的子空间，把属于不同范围的属性值分布到不同的子空间去执行。 假设属性的值空间范围[a， b]，被m个节点产生的n个订阅分割，则产生的子空间的个数，也就是虚拟节点的个数满足： | V i r t u a l N o d e | ≤ n + 2 ，内容匹配的开销取决于每个属性数据分发需要经过的总跳数Hop以及每一跳的匹配开销。在Simple算法中，一个节点对一个订阅需要执行的匹配操作数等于属性的个数，因此如果用m表示订阅中属性的平均数目，s表示本地节点发布的订阅数目，则每个节点需要 m × s 个属性的匹配开销。 在CRAWL算法中，开销取决于两个阶段，第一个阶段是下层拓扑上的随机转发，第二个阶段是上层拓扑上的确定转发。在第一个阶段，每一跳的开销等于执行 个属性的匹配开销，因为在CRAWL算法中每一步只对一个属性进行匹配；在第二个阶段执行每一步的开销是1。CBDLO中数据转发经过的跳步数H由两个部分组成，第一部分是随机转发的跳步数，第二部分是树的高度。因为多个属性之间是完全并行的，所以数据的分发经过的跳步数取决于最慢的属性的跳步数。 H = H stage 1 + H stage 2 因此CBDLO的匹配开销为： Cost ( CBDLO ) = | APT | × H stage 1 + 1 × H stage 2 实验中，假定订阅服从Zip-f分布，邻居节点的视图为20，APT的大小为20建立模拟实验，最大跳步数是30。 图8显示了匹配的开销随着订阅数目的变化情况，因为Simple协议是泛洪的协议，所以在它的纵坐标值上乘了一个系数0.1，而在CBDLO的纵坐标轴上乘了一个系数1/8，因为属性的平均数目是8，这样我们看到的实际就是源节点启动的单个转发中产生的匹配开销，虽然Simple所乘的系数比CBDLO的小，但是CBDLO依然展示了巨大的优势。从图中还可以发现，当订阅数目较小(<3000)时，CBDLO随着订阅数目的增大反而减小，这是因为订阅数目比较小时，随着订阅的增大APT的命中率会不断提高，因而第一阶段的匹配开销减小，但第二阶段的开销等于树的高度，当数目较小时，取对数得到的结果变化很小。 图9显示了匹配开销随属性总数的变化情况。图中纵坐标的处理和图8的处理相同。从图中可以看出CBDLO依然展示了巨大的优势。属性数目的变化对CBDLO的影响很小，充分展示了并行匹配的效果。