コンテンツにスキップ
use-cases / hobby-project-graveyard-stays-alive / hero
コンテナ · コスト最適化

生かしておける余裕のある趣味プロジェクトの墓場

Heroku 上の作りかけサイドプロジェクト 11 個は、月額 $7 の dyno が 11 個分です。Hoody なら、$29 のベアメタル 1 台に 11 個のコンテナが乗ります。アイドルのものはコストゼロ。誰かが 2023 年に書いたチェスエンジンをついに訪れたとき、URL がコンテナをミリ秒で起こします。

コンテナのドキュメント
use-cases / hobby-project-graveyard-stays-alive / lifecycle

3 つの状態、1 つの請求

Hoody のコンテナは実際の Linux マシンで、稼働していなくても安く維持できます。ほとんどのプロジェクトは中央の列で過ごします。

状態 · 停止

ファイルシステムのみ

POST /containers/[id]/stop で CPU と RAM がゼロになります。ディスク上の BTRFS 差分のみが残り、通常は数百 MB です。コンテナは消えても、プロジェクトは消えません。

コストディスクのみ
状態 · アイドル

訪問されるまでオフ

11 個のプロジェクトのほとんどはここに留まります。プロセスは動いていません。RAM も割り当てられていません。ボックスが支払うのはファイルシステムのみで、BTRFS はサーバー上の全コンテナでベースイメージを重複排除します。

コスト≈ 0¢ / 時
状態 · アクティブ

リクエストで起動

コンテナ URL への GET により 5〜15 秒(コールド)または即時(一時停止から)で起動します。訪問者は短い読み込みを見て、リクエストが届き、トラフィックが途絶えるとコンテナはまた眠ります。

起動< 15 秒

Hoody はコンテナ上の 3 つのライフサイクル操作を文書化しています。停止中(CPU・RAM ゼロ、ファイルシステムは保持)、一時停止(RAM 内で凍結)、そしてアクティブ状態。停止中は墓場の自然な休息状態であり、ディスク差分が限りなくゼロに近い限界コストでプロジェクトを生かしておきます。

use-cases / hobby-project-graveyard-stays-alive / wake

誰かがついに訪れたときに起こること

2 つのウィンドウ。訪問者が通常の GET を送る。コンテナが起動し、応答し、また眠る。すべてのフローが、プロジェクトが昔から持っていた同じ Hoody URL 上で実行されます。

visitor.curl
訪問者 · 2023 年版リンク
# 古い README リンクをクリックGET https://chess-engine.containers.hoody.com/# コールド起動後のレスポンス 200 OK · text/html · 4.2 kB# 合計実時間: 0.41 秒
containers/$CID/start
サーバー · コンテナライフサイクル
# サーバー側の起動トレース[t+0ms] rootfs マウント (BTRFS サブボリューム)[t+8ms] namespace + cgroup アタッチ[t+34ms] init pid 1 → systemd (または CMD)[t+72ms] 200 OK ← リクエストはアプリへ# アイドルタイムアウト後に停止状態へ

POST /api/v1/containers/[id]/start は明示的なライフサイクル操作です。コンテナの HTTPS ホスト名経由でルーティングすると、同じ起動が自動的にトリガーされます。専用の起動エンドポイントはなく、URL を訪問することが起動そのものです。

use-cases / hobby-project-graveyard-stays-alive / powers

もう殺さなくて済むもの

アイドルが無料なら、11 個のプロジェクトは月々の請求問題ではなく、フォルダになります。これまで下していた判断が、判断ではなくなります。

年 2 回のスクリプト

確定申告時に発火するテキスター、今も発火する

1099 フォームが出たときに通知するスクリプトは年 1 回しか動きません。月 $7 の dyno では発火 1 回あたり $84 です。ここでは 364 日眠り、HTTP コール 1 回で目覚め、また眠ります。書いたことすら忘れていても、それは今も動きます。

共有リンク

今まさに誰かが読んでいる 2022 年のデモ

2 年遅れで Hacker News に載った `recipe-tracker-2022` のブログ記事を誰かが見つけた。リンクは今でも解決します。コンテナが起動し、ページをレンダリングし、また眠る。スパイクで $30 の請求書は届きません。

創造的余白

プロジェクトを事前に殺さなくなる

アプリ単位の料金プランでは、作る前にアイデアを節約します。ここではそれが不要です。中途半端なものをプッシュしてください。それを忘れて、何年も経って見つける。URL を開く。まだそこにあります。

use-cases / hobby-project-graveyard-stays-alive / cost

請求書のかたち

アプリ単位のホスティングは、11 個のプロジェクトがトラフィックを受けていない秒単位で課金します。サーバー単位なら、ボックスに対して 1 度だけ請求し、その中にプロジェクトを積み上げられます。

  1. アプリ単位スタック · 以前$77/月

    Heroku Eco dyno 11 個(各約 $7)、または Render web service 11 個。誰も訪れなくても同じ請求額。

  2. ベアメタル 1 台$29/月

    Hoody サーバー 1 台、価格は dyno 2 個分から。コンテナ 11 個が中に収まる。12 個目は追加料金なし。

  3. アイドルコンテナのコスト0¢/時

    BTRFS 差分 + KSM 重複排除により、停止中コンテナのコストはディスクのみ。スリープ状態は課金されず、ボックス自体に課金される。

Hoody マーケットプレイスの価格は地域とスペックによって異なり、ドキュメント記載のエントリーポイントは月額約 $20 です。コンテナ密度はワークロード次第で、軽量なサイドプロジェクトは密に詰められ、RAM を常時抱えるものはより余裕が必要です。

use-cases / hobby-project-graveyard-stays-alive / punchline

墓場はもうホスティング請求書ではありません。1 つのフォルダです。

以前 · 11 通の請求書以後 · 1 つのボックス + 1 つのフォルダ
以前 · アプリ単位11 dyno × $7 = $77/月11 通の請求書 · アプリごとの引退判断
今 · サーバー単位1 ボックス × $29 = $29/月1 通の請求書 · コンテナは出入りする
コンテナのドキュメントを読む
use-cases / hobby-project-graveyard-stays-alive / replaces

これが置き換えるもの

アプリ単位のホスティングプランは、休眠中のプロジェクトごとに請求します。サーバー単位の価格設定は、墓場にゆるやかな上限を設けます。以下のプラットフォームはサーバー単位ではなく、サイドプロジェクト単位で課金します。

  • Heroku Eco / Basic dynoアプリごと、月ごとに dyno 1 個 $5〜7 — アイドルでも
  • DigitalOcean dropletVM 単位の請求のため、プロジェクトを少数のボックスへ寄せ集める必要がある
  • Render web service無料枠はスリープしてコールドスタート、有料枠はサービス単位で請求
  • Railwayサービスごとの使用量請求 — 11 サービスあれば 11 のメーター
  • Fly.io machinesアプリ単位の価格設定。auto-stop は助けになるが、結局アプリ単位
  • Vercel 無料枠アイドルな趣味プロジェクトのコールドスタートペナルティに加え、サーバーレス課金の不意打ち
use-cases / hobby-project-graveyard-stays-alive / cta

全部とっておけます。限界はフォルダであり、予算ではありません。

コンテナガイドを読む
use-cases / hobby-project-graveyard-stays-alive / related

他のユースケースを読む