コンテンツにスキップ
タイプアンロック
ステージ本番環境
難易度シンプル
ジョブストリームを共有
対象バックエンド開発者
対象開発チーム
サービスパイプ
Hoody の利点HTTP ネイティブ
タイプアンロック
ステージ本番環境
難易度シンプル
ジョブストリームを共有
対象バックエンド開発者
対象開発チーム
サービスパイプ
Hoody の利点HTTP ネイティブ
タイプアンロック
ステージ本番環境
難易度シンプル
ジョブストリームを共有
対象バックエンド開発者
対象開発チーム
サービスパイプ
Hoody の利点HTTP ネイティブ
タイプアンロック
ステージ本番環境
難易度シンプル
ジョブストリームを共有
対象バックエンド開発者
対象開発チーム
サービスパイプ
Hoody の利点HTTP ネイティブ
PIPE · ストリーム共有 · POSTGRES

1 行でチームメイトにデータベースの状態を送信

チームメイトがあなたが再現できないバグに当たる。ファイルをスキップ。あなたのラップトップの pg_dump が、彼らのステージングの psql に直接ストリーミング — アップロードなし、リンクなし、ダウンロードなし。パイプがバイトをそのまま通す。

Pipe API ドキュメントを読む

1 つのパイプパス。2 つの curl。中間ファイルなし。

Hoody Pipe API は、もう片方が接続するのを待つ間、未確立のパイプを最大 5 分間保持する。両方が接続すると、バイトが流れる。サーバー上のディスクには何も書かれない。

pipe.containers.hoody.com/dev-snapshot
PUT · 送信側あなた · dev

pg_dump からダンプをストリーミング

# from your dev laptoppg_dump --format=custom dev \  | curl -T - \      https://pipe.containers.hoody.com/api/v1/pipe/dev-snapshot[INFO] Waiting for 1 receiver to connect…[INFO] Streaming to 1 receiver…[INFO] Transfer complete.

ストリーミングボディ付きの PUT (または POST)。パイプが確立されるとサーバーがステータスメッセージをターミナルに出力 — 反対側が実際にいつ接続したか確認できるので便利。

GET · 受信側チームメイト · staging

ダンプを直接 psql に取り込む

# on their staging shellcurl https://pipe.containers.hoody.com/api/v1/pipe/dev-snapshot \  | pg_restore -d staging# rows imported · staging now matches dev

同じパスでの GET は送信側が接続するまでブロックする。送信側が書き込むバイトはレスポンスボディとして現れる。pg_restore (または psql) にパイプすると、ダンプはファイルではなく直接データベースに着地する。

n=1 · デフォルトのファンアウトパイプは最大 5 分待つサーバー上に 0 バイト保存

受信側スロットを消費せずに進捗を見たい場合は、3 つ目の curl を ?progress 付きで同じパスに向けると、転送バイト、速度、ETA を表示するライブ HTML ダッシュボードが得られる。

リアルタイムでの見え方

サーバー上のディスクに何も触れずに dev DB をチームメイトのステージングに取り込むのに必要な 4 つの動き。

Slack メッセージ → 復元された DB4 ステップ · 1 パイプ
10:14 · バグ報告01

チームメイトが再現できない

「あなたの dev db を送ってもらえる?」

昨日まではこれは pg_dump、S3 バケット、署名済み URL、Slack 貼り付けを意味していた。

10:14 · PUT02

ダンプをストリーミング

pg_dump dev | curl -T - …/pipe/dev-snapshot

ターミナルが「Waiting for 1 receiver to connect…」を出力してそこに座る。ローカルにもファイルは作成されない。

10:15 · GET03

チームメイトが受信側を実行

curl …/pipe/dev-snapshot | pg_restore

彼らが接続した瞬間にパイプが確立。バイトはあなたの pg_dump から彼らの pg_restore に直接流れ始める。

10:18 · 完了04

ステージングが dev と一致

Transfer complete · サーバー 0 バイト

サーバーサイドのディスク使用量はゼロのまま。両側が切断した瞬間、パイプパスは転送が起こったことを忘れる。

パスがファイルに勝る理由

S3 ラウンドトリップで入力するのと同じコマンド数 — バケット、認証情報、アップロード、ダウンロード、クリーンアップを除いて。

ストレージなし

サーバーは決してバイトを保持しない

Hoody Pipe はストリーミング仲介者であって、ファイルサービスではない。ダンプはあなたのディスクと相手のディスクに存在する; その間は飛行中のバイトに過ぎない。クリーンアップするものなし、漏洩するものなし。

大きなファイルなし

サイズは RAM ではなくパイプで制限

アップロードがないので、世話するアップロード進捗バーはない。40 GB のダンプは、あなたのネットワークと相手の pg_restore が維持できる速度で動く — パイプは単に転送する。

観察可能

?progress を追加してライブダッシュボード

3 つ目の URL で同じパスを ?progress 付きで開き、転送バイト、速度、ETA をリアルタイムで観察。パイプあたり最大 50 観戦者、誰も受信側スロットを消費しない。

データベースの状態はかつて添付ファイルだった。今はパスだ。

ファイルは静止状態。パスは動きの中の状態。Hoody Pipe はデータベーススナップショットを後者にする — アドレス指定可能、エフェメラル、後でクリーンアップしなければならないサーバーに座らない。

  • アップロードなし
  • ダウンロードなし
  • 共有するリンクなし

これが置き換えるもの

dev データベースを共有するために使ってきたツールのほとんどは、HTTP 経由で 2 つのターミナル間でバイトをストリーミングできなかった時代の遺物。パイプはそれらをすべて不要にする。

  • AWS S3 + 署名済み URLバケット、認証情報、アップロード、24 時間のリンク
  • Dropbox / Google Driveサインイン、手動共有、同期待ち
  • Slack ファイルアップロード30 MB キャップ、その後「本物のリンクを使ってください」
  • WeTransfer 系サービスメールゲート、広告ページ、謎の保存期間
  • Postgres dblink の回避策ステージングがライブで行をプルできるように dev へのポートを開く
  • SSH 踏み台経由 rsync2 つの SSH 鍵、ジャンプホスト、両端の一時ファイル

2 つの curl。1 つのパス。彼らのステージングがあなたの dev と一致。

Pipe API ガイドを読む

他のユースケースを読む