
1 つのサーバーで 60 のコンテナ
1 つのベアメタルボックスで数十から数百の Hoody コンテナを実行。KSM と BTRFS のデデュプでマージナルコストはほぼゼロ。
毎週月曜の 9 時、1 つの cron エントリが 1 つのコンテナを起こします。スクリプトはダイジェストを 1 度だけレンダリングし、?n=200 のパイプ URL に書き込みます。200 個の curl ループ、購読者ごとに 1 個が、同じバイトを並列で取り出して SMTP に渡します。ファンアウトは基盤側に住み、あなたのコードには住みません。
月曜のダイジェスト — 今週開く価値のある 4 つのこと
雇用統計の弱含みで債券は反発し、利回り曲線の前端は逆イールドが解消しました。市場が誤って値付けしていると見られる、決算予定の 2 銘柄に注目しています。
チャートを 2 つ。AI インフラ ETF への週次純流入と、ヘッドラインと食い違う CPI の内訳。
読み物リスト: プライベートクレジットの長文記事と、利上げサイクルが 2008 年より短い理由を切れ味よく書いたメモ。
→ ダイジェスト全文を開く
0 9 * * 1 bash /scripts/digest.shONE WAKE · ONE RENDER · TWO HUNDRED PARALLEL PULLS
Hoody Cron API が 5 フィールドの crontab 行を管理エントリに落とします。その行は exec スクリプトを動かし、ダイジェストを 1 度レンダリングし、n=200 のパイプパスに押し込みます。200 個の購読者ループが同じパスを並列で読み出します。サーバーは何も保持せず、遅い読み手が他をブロックすることもありません。
cron は複雑になっていません。ファンアウトが基盤側に移っただけです。パイプは何も保持せず、スクリプトは 1 度レンダリングし、ループは末端の SMTP だけです。キューもリトライテーブルもキャンペーンツールのシートもありません。
素朴な設計は SMTP 送信を 200 回直列でループし、11 分かかり、途中でクラッシュすると二重配信を起こします。パイプの形は、並列性、冪等性、より小さなコンテナを無料で手に入れさせてくれます。
ダイジェストは厳密に 1 度だけ作られます。200 個の curl ループが同じバイトを同時に読み出します。4 秒の実行が、11 分の直列ループを置き換えます。パイプは遅い読み手にバックプレッシャーをかけますが、他はブロックしません。
参照すべきキャンペーン状態テーブルはありません。200 全員が接続する前に実行が落ちても、パイプの TTL が未完了の半分を排除し、次の cron ティックが再レンダリングします。二重配信なし、半分送られたバッチを突き合わせる必要もなしです。
スクリプトは週に 1 度起き、4 秒走り、コンテナはアイドルへ戻ります。あなたが払うのはその 4 秒ぶんだけです。常時稼働のキャンペーンサービスでも、受信者単位の SES 請求でも、Mailchimp のシートでもありません。
受信者は同じ 200 人、ダイジェスト本文も同じです。動くのは実行の形だけ。SMTP の直列で数分から、HTTP の並列で数秒へ。
cron ティックから最後の配信までの実時間です。パイプは 200 受信者すべてに並列でストリーミングし、ボトルネックはループではなく、最も遅い購読者の SMTP になります。
ダイジェスト本文は 1 度だけ計算されます。パイプは同じバイトをすべての受信者に転送します。受信者ごとのテンプレート再レンダリングも、受信者ごとの請求も、受信者ごとのキャッシュも不要です。
Hoody Pipe API は n を 256 までに制限します。週次ダイジェストの 200 はその上限の十分内に収まり、遅い読み手はバックプレッシャーをかけても他をブロックしません。
Hoody Pipe API の仕様: 受信者数 1〜256、接続待ちのパイプ TTL は 5 分、サーバー全体で同時転送 1000 件まで。cron エントリそのものは /users/root/entries の 1 行で、schedule、command、オプションの expires_at を持ちます。
4 つの瞬間。それぞれは手作業でも投げる単発の HTTP 呼び出しです。cron は目覚まし時計、exec はレンダラー、pipe はワイヤー、ループはエージェントが書く唯一の部分です。
/users/root/entries の管理エントリが発火します。スケジュール: 0 9 * * 1。コマンド: bash /scripts/digest.sh。crontab そのものは 1 つの JSON レコードです。Airflow DAG でもワークフローサービスでもありません。
exec スクリプトが今週のデータを取得し、markdown をレンダリングし、HTML に変換し、本文を stdout へ書き出します。1 度のレンダリング、1 つのペイロード。受信者ごとのメールマージループはありません。
スクリプトは stdout を curl -T - に流し込み、pipe/digest-monday?n=200 へ向けます。パイプは 200 受信者が接続するまでアップロードを保留し、その後本文を全員へ並列でストリーミングします。
200 個のループが同じパスを curl し、本文を購読者の SMTP に渡します。遅い側はバックプレッシャー、速い側はミリ秒で完了。実行全体は数秒で終わります。
cron エントリ 1 つ、コンテナ 1 つ、受信者 200 人。
リストに同じメールを送りたくなったときに手を伸ばす定番ツール群です。それぞれ、結局のところ 1 度のレンダリングと HTTP のファンアウトループに対して、サービス階層料金を請求してきます。
月曜 9 時はかつて、SMTP をすり潰すワーカーを意味していました。今は cron ティック 1 回、コンテナ 1 つ、そして残りをこなすパイプを意味します。