Storj(ストレージ)は、ユーザの余ったストレージ領域を貸し出すことにより、ユーザには格安でストレージ領域を提供し、貸し出し者には利益の一部を分配するサービス/システムの名称です。
今回は実際にHDDの一部領域を貸し出してみて、どの程度儲かるのか、継続してご報告していきたいと思います。
Windows、Linuxのプラットフォームがサポートされていますが、今回はUbuntu(Linux)上にDockerでインストールしていきます。
もくじ
Storjとは?
Amazon S3 API互換の分散型ストレージサービスです。世界中の余剰ストレージ領域を使用して、Amazon や Googleより格安にストレージ領域を提供しています。ファイルは暗号化と分割化されて世界中のノードへ配信されます。ノードには完全なファイルはなく、更にそれぞれ暗号化されているためセキュアですよということらしいです。
最近、そのStorjプラットフォームを利用したサービス、Tardigrade.ioがローンチしました。
主要ストレージサービスより格安であることがアピールされていますね。
Amazon(Tokyoリージョン)で ストレージ0.025USD/GB、転送料は0.114USD/GBなのでかなりの格安っぷりです。因みにStorjは転送料は0.045USD/GBです。
ストレージノードを構築してHDDを貸し出す
それではいよいよ、構築していきたいと思います。今回、筆者が用意した環境はこちらです。
OS | Linux (Ubuntu 16.04) |
HDD | 1.7TB (1700GB) |
CPU | Core i3-6100 CPU @ 3.70GHz |
RAM | 8GB |
LAN | 1Gbps |
WAN | フレッツ光 (PPPoE) IPv4 |
WAN速度 | DL: 450Mbps / UP: 380Mbps @PM.9 |
1. 利用登録
から、「Become a Host」を選択して、利用登録を行います。
要件を満たしているかチェックします。エンタープライズ向けのサービスですので普段使っているパソコンと同居しないほうが良さそうです。
- CPUコアは1コア以上か
- 最低500GBのディスクスペースがあるか(貸出領域のことなのかは不明)
- 最低2TBの帯域が確保できるか
- アップロード速度が最低5Mbpsを満たせるか
- ダウンロード速度が最低25Mbpsを満たせるか
- 1ヶ月のダウンタイムは5時間以内に抑えられるか
仮想通貨のマイニングのように計算リソースの要求はない分、帯域やストレージ、可用性への要求が厳しいです。
特に2TB/月の帯域は、ご使用のインターネットプロバイダによっては規制がかかります。2000GB / 30日 ≒ 66GB/日 となり、いくつかのプロバイダでは余裕で規制値を上回ります。
速度については下手なプロバイダでなければ問題ないでしょう。夜間ゴールデンタイム帯に著しく速度が低下するようなプロバイダでは運用はきついかもしれません。
また、ダウンタイム1ヶ月5時間以内も人によっては厳しい要件です。普段から自宅サーバ運用している希有な人(!)であれば問題ないかと思いますが、普段使いのデスクトップの余りを提供しようと考えている人は注意が必要です。
チェックを入れたらメールアドレスを入力してトークンを取得します。
2. 初期セットアップ
メールでトークンを受け取ったら、メールに記載のドキュメントへアクセスします。
https://documentation.storj.io/
まず、サービス公開のためのポート開放と、固定IPでない場合はダイナミックDNSのセットアップをしましょう。公式ではNoIPが推奨されています。ダイナミックDNSの設定が終わったら、ポート28967 をルータで開放しておいてください。
Ethereumのアドレスも持っていないようであれば取得してください。ERC-20対応のものを作成します。storjにもおすすめのウォレットがあるのでそちらを参考に。
3. セットアップ
ノードのユニークキーを作成するため、以下のコマンドを入力します。非root
curl -L https://github.com/storj/storj/releases/latest/download/identity_linux_amd64.zip -o identity_linux_amd64.zip unzip -o identity_linux_amd64.zip chmod +x identity sudo mv identity /usr/local/bin/identity identity create storagenode
かなり時間がかかります。Rasapberry piのようなARMベースのマシンの場合は異なるバイナリを使用するので、それはドキュメントを確認してください。
キーが作成できたら、キーとトークンを連携させてオーサライズします。
identity authorize storagenode <email:characterstring>
cat ~/.local/share/storj/identity/storagenode/ca.cert cat ~/.local/share/storj/identity/storagenode/identity.cert作成したキーがあるか確認する。レスポンスが帰ってきたら成功。identityはバックアップしておくように、とのこと。
4. ノードの起動
Dockerを使用します。
docker run -d --restart unless-stopped --stop-timeout 300 \ -p 28967:28967 \ -p 127.0.0.1:14002:14002 \ -e WALLET="0x983FB96B283D46D18fAd67525549002a808C4008" \ -e EMAIL="example@example.com" \ -e ADDRESS="example.com:28967" \ -e STORAGE="1700GB" \ --mount type=bind,source="<identity-dir>",destination=/app/identity \ --mount type=bind,source="<storage-dir>",destination=/app/config \ --name storagenode storjlabs/storagenode:beta
- WALLET: 支払先のEthウォレット
- EMAIL: 登録したメールアドレス
- ADDRESS: DDNS登録したドメインとポート
- STORAGE: 提供ストレージ容量(GB, TB)
- BANDWIDTH: 帯域制限(GB, TB) 最新バージョンだと認識しないかも
: ~/.local/share/storj/identity/storagenode/ の絶対パス : storj用ディレクトリ。ここに各種ファイルが格納されます
docker exec -it storagenode /app/dashboard.sh > Storage Node Dashboard ( Node Version: v0.35.3 ) > > ====================== > > ID *********************************** > Last Contact ONLINE > Uptime 38h0m8s > > Available Used Egress Ingress > Bandwidth N/A 255.4 GB 38.3 GB 217.1 GB (since Mar 1) > Disk 1.5 TB 161.1 GB > Internal 127.0.0.1:7778 > External example.com:28967
/app/dashboard.sh を叩くと簡易的な統計データが閲覧できます。
- Available:利用可能データ = 割当容量 – 使用済み容量
- Used: 使用済み
- Egress: Nodeからクライアントへのデータ転送(アップロード)
- Ingress: サテライト(後述)からNodeへのデータ転送(ダウンロード)
また、http://storagenode:14002/から、ブラウザベースの簡易ダッシュボードが使えます。
運用と報酬
これで放置していると、各種値が増えていき、月次で実績に応じて報酬が支払われます。
1. 支払いはUSD換算のStorj
支払いはEthereumブロックチェーン上のStorjで支払われます。実績とStorjの時価に応じます。課金はUSD換算となりますが、ルールは以下となります。
Egress Bandwidthは、Nodeからクライアントへのデータ転送に対する報酬で、$20/TBとなります。
Repair Bandwidthは、Nodeの消失や可用性の確保のため、他のノードからデータを転送する際の報酬となります。こちらは$10/TBです。
最後にDisk Spaceは、文字通りディスクの消費量です。ディスク消費量は日々変化しますので月平均の計算となります。$1.5/TB
なので、2TBの領域を月平均で専有し、1TBのアップロード転送が発生した場合は$23相当の報酬となります。逆に、クライアントからNodeへのファイルダウンロードに対しては課金されません。
2. 本格的なファイルの流入はサテライトから承認を受ける必要がある。
数日稼働させてみると、ほんの僅かしかデータ転送が行われていないことに気づきます。これは、サテライトから承認が行われていないからです。サテライトとは、クライアントからファイルをやり取りする際にノードとやり取りするための中間サーバです。
現在5サテライト(2020年3月)が稼働しており、承認はサテライト個別に行います。Vettingが100になれば承認が行われたことになります。いつ、Vettingされるのかは完全ランダムで、およそ1ヶ月ほどかかるようです。
Vettingを確認する方法が公式のDashboardからかは提供されていないので、もっとイケてるDashboardを別記事で紹介します。
3. Egressのファイル提供は早いもの勝ち
申し訳程度の仮想通貨マイニング要素。Storjのファイルは分割されて各Nodeに配信されます。当然ですが、可用性確保のためにファイルのピースは1つずつNodeに配信されるのではなく、同じピースを複数のNodeが所有する形になります。このピースのアップロードが速いNodeだけ報酬が支払われるルールのようですので、実際に使用した帯域がそのまま報酬になる、というわけではありません。
このファイルの提供成功率を出すスクリプトがあります。
https://github.com/ReneSmeekes/storj_success_rate
ちなみに私の成功率はこんな感じ
========== AUDIT ============== Critically failed: 0 Critical Fail Rate: 0.000% Recoverable failed: 0 Recoverable Fail Rate: 0.000% Successful: 50 Success Rate: 100.000% ========== DOWNLOAD =========== Failed: 205 Fail Rate: 7.804% Canceled: 540 Cancel Rate: 20.556% Successful: 1882 Success Rate: 71.641% ========== UPLOAD ============= Rejected: 0 Acceptance Rate: 100.000% ---------- accepted ----------- Failed: 11 Fail Rate: 0.045% Canceled: 19979 Cancel Rate: 81.315% Successful: 4580 Success Rate: 18.641% ========== REPAIR DOWNLOAD ==== Failed: 0 Fail Rate: 0.000% Canceled: 0 Cancel Rate: 0.000% Successful: 0 Success Rate: 0.000% ========== REPAIR UPLOAD ====== Failed: 0 Fail Rate: 0.000% Canceled: 59 Cancel Rate: 50.000% Successful: 59 Success Rate: 50.000% ========== DELETE ============= Failed: 0 Fail Rate: 0.000% Successful: 468 Success Rate: 100.000%
UploadのAcceptが低めです。他の人は20%~30%を推移していて、特に異常な値ではなさそう。(そもそも地理的にアジアはちょっと不利)
開始から一週間の状況
一週間連続稼働させたところです。ストレージ159GBで、Egress bandwidthは38.4GBでした。予想収益が0.78ドルとなっていますね。この調子だと割に合わないですが、どのサテライトもVettingが100になっていないので、このまま1ヶ月連続稼働させて収益がどうなるのかを観察していきます。うまくいくようであれば、1700GB貸出中ですがこれを6TBほどに拡張してみます。
このダッシュボードの構築方法は別記事で解説します。