InterPlanetary File System
From Wikipedia, the free encyclopedia
InterPlanetary File System (IPFS) とは、分散ファイルシステムにデータを保存、共有するためのプロトコル、かつP2Pネットワークである。自由かつオープンソースでもある。IPFSはコンテンツアドレス (CID) を使用してファイルを一意に識別する。IPFSはHTTP(ロケーションベースのハイパーメディアサーバープロトコル)に代わり、World Wide Webを配布することができる。
言語
- プロトコル実装
- Go (参照実装), JavaScript, Python
- クライアントライブラリ
- Go, Java, JavaScript, Python, Scala, Haskell, Swift, Common Lisp, Rust, Ruby, Swift, PHP, C#
|
InterPlanetary File System の公式ロゴマーク。 | |||
| 開発元 | Protocol Labs | ||
|---|---|---|---|
| 最終版 |
| ||
| プログラミング 言語 |
| ||
| 対応OS | FreeBSD, Linux, macOS, Microsoft Windows | ||
| サポート状況 | サポート中 | ||
| 種別 | プロトコル, 分散ファイルシステム, コンテンツデリバリネットワーク | ||
| ライセンス | MITライセンス、Apache License 2.0 | ||
| 公式サイト | |||

解説
IPFSは、同じファイルシステムを持つ全てのコンピューターへの接続を試みるP2P分散ファイルシステムである。
複数の点でIPFSはウェブと共通点があるが、ウェブはコンテンツの場所を指定してコンテンツを取得するのに対し、IPFSはコンテンツのハッシュ値をIDとしたCIDを指定してコンテンツを取得する内容アドレス記憶装置(content-addressable storage、CAS)の1種である[2]。つまり、IPFSでコンテンツを取得する場合、そのコンテンツのCIDをネットワークにリクエストし、そのCIDのパーツ(分散化されたコンテンツのデータ)を持つ最寄のピアから取得する。
IPFSはコンテンツおよびP2Pネットワークの分散にKademliaアルゴリズムを基本としており[3]、分散ハッシュテーブルとインセンティブブロック交換、自己証明名前空間を組み合わせている。そのため、単一障害点がなく、お互いに信頼しあう必要もない[4]。このことにより、IPFSはハイスループットの内容アドレスブロックストレージモデルをマークル木の有向非巡回グラフで生成された内容アドレスハイパーリンクで提供する。言い換えれば、IPFSは単一のBitTorrentスウォームもしくは1つのGitリポジトリの中でオブジェクトを交換するようなことがIPFSネットワーク内で出来る。
ファイルシステムはFUSEやHTTP経由といった複数の方法でアクセスできる。ローカルファイルもIPFSのファイルシステムに追加することができ、世界中で利用することができる。ファイルはそれぞれのハッシュで識別することでキャッシングしやすくなる。また、Bittorrentをベースにしたプロトコルを使って拡散する。コンテンツを見る他のユーザーはネットワーク上で他人にコンテンツを提供することになる。IPFSにはPKIをベースにしたグローバル名前空間であるIPNSと呼ばれるネームサービスがあり、信頼できるチェーンを構築するために提供されており、他のNSesと互換性がある上、 DNS、.onion、.bitをIPNSに対応付けることができる[5]。
重要な性質として、IPFSに一度アップロードされたファイルは消せる保証がない。IPFSはアクセス制御を実現できず、即ちCRUDを実現することもできない。全てのファイルは常に公開され、第三者にピンどめ(キャッシュの維持)をされる可能性を持つ。紐づけるIPFSアドレスを可変とするIPNSアドレスという機能もあるが、IPNSアドレスからIPFSアドレス(CID)は逆引き可能である。 ファイルを消せないという性質を逆手にとり、恒久的にデータを保存するサービスも存在する[6][7]。
歴史
評価
ウェブホスティングサービスのネオシティーズ設立者であるカイル・ドレイクはIPFSはHTTPその他数多くのプロトコルとソリューションの後継になると確信しているとし「HTTP分散コンテンツには根本的な欠陥があり、パフォーマンスチューンナップの意義もなく、壊れたCA SSLが強制されるが、それらも修正されるであろう。」と述べている[19]。