《IPFS原理与实践》 —3.3 路由层(Routing)

2021-04-17 16:20:37 FIL16888 1346

3.3 路由层(Routing)

IPFS节点需要一个路由系统,这个路由系统可用于查找同伴节点的网络地址;专门用于服务特定对象的对等节点。

IPFS路由层数据结构使用基于S/Kademlia和Coral技术的分布式松散哈希表(DSHT),在第2章中具体介绍过。在设置数据对象大小和使用模式方面,IPFS参考了Coral和Mainline设计思想,因此,IPFS的DHT结构会根据所存储数据的大小进行区分:小的值(等于或小于1KB)直接存储在DHT上;更大的值,DHT只存储值索引,这个索引就是一个节点的NodeId,该节点可以提供对该类型值的具体服务。DSHT的接口位于libP2P模块中,如下:

type IpfsRouting interface {

    ContentRouting //内容路由

    PeerRouting    //节点路由:获取特定NodeId的网络地址

    ValueStore     //数据操作:对DHT中的元数据进行操作

    Bootstrap(context.Context) error 

}

type ContentRouting interface {

    Provide(context.Context, *cid.Cid, bool) error // 声明这个节点可一个提供

                                                   一个大的数据

    FindProvidersAsync(context.Context, *cid.Cid, int) <-chan pstore.PeerInfo

}

type PeerRouting interface {

    FindPeer(context.Context, peer.ID) (pstore.PeerInfo, error)

}

type ValueStore interface {

    PutValue(context.Context, string, []byte) error

    GetValue(context.Context, string) ([]byte, error)

    GetValues(c context.Context, k string, count int) ([]RecvdVal, error)

}

从上述代码中可以看到,IPFS的路由实现了3种基本功能:内容路由、节点路由及数据存储。这种实现方式降低了系统的耦合度,开发者可以根据自身业务需求自定义路由,同时不影响其他功能。


首页
产品
新闻
联系