クラウドネイティブ時代の PeerCast YP
また PeerCast の YP 作りました。特徴として、GCP の無料枠や Vercel を駆使してほぼ 0 コストで回るようになっています。ただし GCP 無料枠のサーバーでアクセスが捌ききれるかが未知数のため、このきゃすけ期間中にぜひサーバーをいじめ抜いてください。
ソースコード一式は AGPL ライセンスで公開されています。
今回の YP はインフラ構成に着目して、 Docker やサーバーレスを活用した構成を考えてみました。
サーバー構成はこんな感じです。
使用している技術を書き出します;
- Google Cloud Platform (GCP)
- Google Compute Engine (GCE)
- Google Cloud CDN
- Google Cloud Logger
- Docker
- peercast-yt
- Vercel
- Next.js
PeerCast の接続をさばくサーバーは GCE の Docker コンテナにあり、 index.txt を出力するサーバーは Vercel にあります。
PeerCast 側
配信者がチャンネルを建てる時の挙動からサーバーを整理します。
配信者の PeerCast は root.p-at.net
ドメインに紐付けられた GCE 上のサーバーの、 TCP 7144
をリッスンしている Docker 内のルートモード PeerCast に接続します。そして疎通がうまくいけばルートモード PeerCast 内でチャンネル情報として認識されます。チャンネルを立てている間この接続は維持されます。
尚、基本的にリスナーの PeerCast は index.txt に記載されている配信者の IP を参考に配信者の PeerCast に直接接続するので、リスナーの PeerCast が YP のルートモード PeerCast に接続することはありません。
PeerCast は Docker コンテナー内に構築されているという点以外はとくに特別な構成ではありません。使用している PeerCast は peercast-yt です。
PCYP 側
次にリスナーが PCYP を用いてチャンネルを取得・視聴する時の挙動からサーバーを整理します。
リスナーの PCYP は p-at.net
ドメイン (insecure.p-at.net
ドメインについては後述) に紐付けられた Vercel の CDN にアクセスし、 CDN が仲介して index.txt 配信用 HTTP サーバーに index.txt
をリクエストします。 index.txt 配信用 HTTP サーバーは GCE 上の、 nginx の自己署名証明書の https で暗号化された経路を通って、 PeerCast からチャンネル一覧を取得します。そして、チャンネル一覧から index.txt を成形してレスポンスを返します。
但し PeCaRecorder は https に対応していないため p-at.net
ドメインに接続することができません。これは Vercel の制限で、非暗号化プロトコルである http を使用することができないためです。このため PeCaRecorder では、別のドメイン insecure.p-at.net
に紐付けられた GCE 上の nginx にアクセスし、これが Vercel への仲介になることで index.txt 配信用 HTTP サーバーに接続できるようにしています。
尚、 index.txt の更新時に Google Cloud Logging へ生成結果を送信しており、これを掲載情報のログとしています。
最低でも3ヶ月くらいは運用して、継続して運用するか判断したいと思います。 よい PeerCast ライフを。