Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

HDFS 与 IPFS #9

Open
winterpi opened this issue Aug 26, 2022 · 0 comments
Open

HDFS 与 IPFS #9

winterpi opened this issue Aug 26, 2022 · 0 comments

Comments

@winterpi
Copy link
Owner

winterpi commented Aug 26, 2022

HDFS

  • HDFS(Hadoop Distributed File System)是分布式文件系统,由中心化节点控制从属的数据存储节点,数据存储节点支持低成本的硬件设施。
  • 文件以冗余的方式存储在多台机器上,防止发生故障时的数据损失,具有高度的容错性,同时 HDFS 还可以使应用程序并行处理

HDFS NameNode

  • NameNode 用来存储文件的元数据信息(目录、块信息)等,通常设置主备部署(包含 NameNode 及 Secondary NameNode);
  • 管理文件系统的 namespace,负责调节客户端对文件的访问;

HDFS DataNode

  • DataNode 由大量节点构成一个集群,听从 NameNode 的说明执行文件块的创建、删除和复制等;
  • 可以扩展 DataNode 的数量增加承载能力,支持动态横向扩展;

Block

  • 文件以块的方式存储在 DataNode 中,默认块的大小为 64MB;

IPFS

  • IPFS (Inter Planetary File System) ,又叫星际文件系统。区别于 HTTP 浏览器协议根据路径查找文件的方式,IPFS 协议是采用文件内容的方式搜索。
  • IPFS 是一种完全去中心化的,P2P点对点的网络传输协议,类似于 BitTorrent。
  • 因为它是基于内容存储的,可支持重复文件的去重处理。

文件的存储方式

  • 文件会被切割成 256kb 的区块,分布到不同的节点存储。
  • IPFS 定义了 IPFS object, 用于文件块的存储、定位等;

分布式哈希表 DHT(Distributed Hash Table)

  • DHT 用于快速定位/查找内容节点;
  • Kademlia 是2002年提出的一种经典的 DHT 协议,它以最简洁的异或(XOR)计算方式,快速定位资源所在的位置,用于经典的 BitTorrent 协议中。

Merkle DAG (Directed Acyclic Graph)

  • Merkle Tree 用于确保分散存储的区块的完整性及一致性;
  • Merkle DAG 用于记录文件的更新信息,添加新节点用于存储更新的区块内容,用 DAG link 未改变的区块内容。

图片2

Filecoin

  • IPFS 面临的最大问题就是需要节点保持在线,如果包含同一个 block 的多个节点都不在线,就没法访问到该文档了。
  • Filecoin 提供了一种激励机制,奖励存储节点并支持其长时间在线;

HDFS vs IPFS

特性 HDFS IPFS
结构 主从结构 去中心化
文件定位方式 根据 NameNode 中存储的文件元数据信息,定位到 DataNode 中的数据 采用 DHT 分布式散列哈希表,查找文件块的内容
对节点的硬件要求 类似 X86 服务器 可以是普通 PC
对节点的信任要求 DataNode 与 NameNode 间需要强信任 节点间无需信任关系
支持的功能 大文件存储 + 并行计算 小文件存储 + 存储激励
是否支持文件去重 不支持 支持
安全性 NameNode 存在单点故障问题 不存在单点故障
适用场景 企业级的应用,针对企业的大文件存储;不适合小文件存储,会占用大量空间,引起性能下降 个人用户市场,节点越多,文件越多,整个文件系统的稳定性也越高
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant