zoukankan      html  css  js  c++  java
  • ndn挖坑记(完)

    前言

    ε=ε=ε=(~ ̄▽ ̄)~

    总算完事了,简单总结一下关于NDN中订阅发布模式,为了防止给自己留坑,只记录未写入部分。
    以下为个人观点,仅供参考,如有需要(错误),请看文献&代码。
    这里的订阅发布模式其实就是一种数据同步的方式,即发布者发布数据,订阅者订阅数据。相比较NDN传统的拉-取数据的方式,这样的方式更加的高效。

    相关工作

    有许多实现方案,比如iHEMS(^{[1]}),COPSS(^{[2]}),HoPP(^{[3]}),PSync(^{[4]}),SPIT(^{[5]}),psync-notify Interest(^{[6]})等等。

    简单记录一下PSync,这是在NDN上实现的数据同步协议,主要有两种情况:1.full-data synchronization;2.partial-data synchronization。
    前者要求同步组中的每个参与者都能接收到所有最新产生的数据,即发布者的所有数据订阅者都要完全接受(订阅),比如Dropbox,email等等。后者则没有这个限制,它允许的订阅者可以进行订阅的数据集合(来自发布者)是([varnothing,U]),这样做就将数据同步的权力交到用户的手上。

    PSync

    代码:https://github.com/named-data/PSync

    BF:https://github.com/ArashPartow/bloom

    data structure

    1. Invertible Bloom Lookup Table (IBLT),也叫Invertible Bloom Filter (IBF)(可逆布隆过滤器),用来表示部分同步模式下一个生产者的状态和完全同步模式下一个节点的状态;IBF所有生产者共有,用于生产者之间的信息同步。
    2. Bloom Filter(BF),也叫布隆过滤器,用来表示部分同步模式下一个消费者的订阅列表信息,PSync中的BF是修改过以适应NDN的;
    3. BF具体是利用多个哈希函数将元素映射到位数组中,支持查询和插入操作,不支持删除操作;
    4. IBF将位数组更改为cell数组(多个位),并添加辅助计算cell被使用次数的count数组,得以支持删除操作;
    5. NDN的 name是长度不固定的,所以需要先将name哈希成固定长度的KeyID,BF和IBF都是对这个KeyID进行操作;

    两个阶段

    PSync将数据同步分为两个阶段,一个初始化阶段,一个同步阶段。
    在初始化阶段,consumer发送hello兴趣包给producer,producer回复的data中包含最新的IBF,consumer可以从中挑选前缀进行订阅。如下图:

    在代码实现里面,producer收到helloInterest之后,先判断是否是helloInterst以及之前已经缓存过,将自己的IBF添加到consumer发送过来的兴趣包前缀之后,组成hello数据包名称(=兴趣包名称+IBF),然后将自己每个前缀-版本号键值对拼成一个name组件保存到一起组成一个Block,进行分段(段数由Block大小决定)发布。

    用此时的数据包名称再添加版本号组成段前缀,然后再添加段号组成段名称,段号由0开始(=hello数据包名称+版本号+段号(即prefix+version+segment,实际也=兴趣包名称+IBF+版本号+段号))。将每段截取的Block内容放入数据包,然后用face进行发布,并将该数据内容保存到内存中一段时间后再删除。

    等待中的cell信息,包含IBF,BF和一个调度器,所有producer共用的,所以producer可以得到每个consumer的订阅信息列表且producer可以维持一个单一状态,那就是IBLT

    同步阶段和上面一个阶段差不多,只不过是发送的是sync兴趣包来确认更新。如下图是同步阶段:

    以及什么时候producer会回复sync包:

    参考文献

    [1] Zhang, Jianqing, Qinghua Li and Eve M. Schooler. iHEMS: An information-centric approach to secure home energy management[J]. 2012 IEEE Third International Conference on Smart Grid Communications (SmartGridComm) (2012): 217-222.
    [2] Chen, Jiachen, Mayutan Arumaithurai, Lei Jiao and et al.COPSS: An Efficient Content Oriented Publish/Subscribe System[J]. 2011 ACM/IEEE Seventh Symposium on Architectures for Networking and Communications Systems (2011): 99-110.
    [3] Gündogan, Cenk, Peter Kietzmann, Thomas C. Schmidt and et al,HoPP: Robust and Resilient Publish-Subscribe for an Information-Centric Internet of Things[J]. 2018 IEEE 43rd Conference on Local Computer Networks (LCN) (2018): 331-334.
    [4] Zhang, Minsheng, Vince Lehman and Lan Wang. Scalable name-based data synchronization for named data networking[J]. IEEE INFOCOM 2017 - IEEE Conference on Computer Communications (2017): 1-9.
    [5] 靳鹏飞,李俊,吴海博,智江.基于订阅推送的NDN实时通信机制[J].高技术通讯(中文),2016,26(6):558~566.
    [6] 谢英英, 石涧, 雷凯. 基于NDN的高效发布订阅系统设计与实现[J]. 重庆邮电大学学报(自然科学版), 2018(01):107-114.

    最后

    以上为个人观点,仅供参考,如有需要(错误),请看文献&代码。
    终于可以开新坑了ヽ( ̄ω ̄( ̄ω ̄〃)ゝ

  • 相关阅读:
    2017-11-20 中文代码示例之Vuejs入门教程(一)问题后续
    2017-10-31 中文代码示例教程之Vuejs入门&后续计划
    2017-10-29 用中文命名API的意义和途径
    2017-10-26 13年后的共鸣-在代码中用中文命名的优势和问题
    2017-07-29 中文代码示例教程之Java编程一天入门
    2017-10-10 都市传说: "部分"中文出现乱码
    MATLAB indexing question
    Rarely executed and almost empty if statement drastically reduces performance in C++
    Compiler showing 'pi' symbol on error
    Adding a struct into an array(stackoverflow)
  • 原文地址:https://www.cnblogs.com/FlyerBird/p/13073743.html
Copyright © 2011-2022 走看看