概要
サーバーを1つのP2Pノードとして扱い、グローバルIPと大容量帯域幅という強みを活かして、他のノードに接続できないクライアントにサービスを提供します。master/workerアーキテクチャを採用しており、masterはworkerプロセスの作成とスケジューリングを担当し、workerプロセスは実際の「シード(種)」処理を担当します。各workerは1つのチャンネルのみをシードでき、1つのチャンネルは複数のworkerによって同時にシードされることができます。
サーバーの選定
各workerプロセスは最大200クライアントにサービスを提供でき、おおよそCPU1コア、メモリ400MB、帯域幅200Mbpsを消費します。VODビジネスの場合はキャッシュコンテンツ用の十分なディスク容量も必要です。管理パネルに表示される人気チャンネル数を参考に適切なサーバー構成を選定してください。OSは現時点ではLinuxのみ対応しています。
Linuxディストリビューションの要件
- Ubuntu 20以上
- CentOS 8以上
SDKバージョンの要件
Web HLS SDKバージョン >= 2.7.0
Android SDKバージョン >= 3.4.0
プログラムのインストール
自動インストール
ポート8080でリッスンする場合の例:
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.sh --port 8080手動インストール
node.jsのインストール
すでにnode.jsをインストール済みの場合は、この手順は不要です
wget https://npmmirror.com/mirrors/node/v18.15.0/node-v18.15.0-linux-x64.tar.xz
tar -xvf node-v18.15.0-linux-x64.tar.xz
sudo mkdir -p /usr/local/nodejs
sudo mv node-v18.15.0-linux-x64/* /usr/local/nodejs/
sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/binスーパーノードプログラムのダウンロード
wget https://cdn.swarmcloud.net/super-peer.zip
unzip super-peer.zipスーパーノードの起動
ポート8080でリッスンする場合の例:
cd super-peer && echo listenPort=8080 >> .envpm2はNodeアプリケーションのプロセスマネージャーで、スーパーノードのプロセス監視に使用します:
npm i -g pm2
sudo ln -s /usr/local/nodejs/bin/pm2 /usr/local/bin
pm2 start index.js -n super-peerスーパーノードの紐付け
管理パネルにログインし、P2P設定 -> スーパーノード管理 -> +スーパーノード の順にクリックし、サーバーのURLアドレス(http://ip:port)や帯域幅などの情報を入力して確定をクリックします。 サーバーのステータスが「停止済み」と表示される場合は、サーバーに接続できていないことを意味します。各手順が正しいか確認し、ファイアウォールの設定が正しいことを確認してください。
WARNING
ライブ配信モードでは、スーパーノードは直線距離7000km以内のクライアントにのみサービスを提供できます。可能な限りユーザーに近いサーバーを選んでデプロイしてください。
シグナリングの設定
アプリケーションの管理パネルでシグナリングを設定している場合、スーパーノードのドメインにも同じシグナリングアドレスを設定する必要があります。
シード戦略
デフォルトでは、スケジューリングサーバーは現在の人気チャンネルの順位に応じて自動的にシードを行います。自動シードを無効にすることもでき、その場合はスーパーノード管理ページの上部で再生アドレスを入力してBase64を生成し、「シード」ボタンをクリックして関連情報を入力してください。
スーパーノードの監視
スーパーノード管理ページで該当サーバーの監視ボタンをクリックすると、各workerプロセスの接続ノード数、アップロードトラフィック(単位:KB)、システムリソースの使用状況などの情報を確認できます。特定のworkerプロセスを再起動または強制終了することもできます。
アクセストークンの設定(任意)
プログラムを起動する前に、以下のスクリプトを実行してAccessTokenを作成できます:
echo 'accessToken=ACCESS_TOKEN' >> .envACCESS_TOKENは任意に指定できるtokenです。管理パネルでスーパーノードを紐付ける際に設定するAccessTokenと一致させる必要があります。
シグナリングアドレスの設定(任意)
管理パネルでシグナリングアドレスを設定する以外にも、.env ファイルを通じて設定することができ、地域ごとに異なるシグナリングアドレスを使用できます:
echo 'signal1=wss://example.com' >> .env
# echo 'signal2=wss://example2.com' >> .envsignal1はメインのシグナリングアドレス、signal2はバックアップのシグナリングアドレスです。
起動時の自動実行(任意)
プログラムを起動した後、以下のスクリプトを使用すると、システム起動時にプロセスが自動的に再起動されるようになります:
pm2 save && pm2 startupスーパーノードの更新(任意)
先にファイルを置き換えてから、プログラムを再起動します:
wget -N https://cdn.swarmcloud.net/super-peer.zip && unzip -o super-peer.zip
pm2 restart super-peer
pm2 save以下のコマンドを直接実行することもできます:
wget -qN https://cdn.swarmcloud.net/super-peer.sh && bash super-peer.shRestful API
HTTPリクエストヘッダー
| パラメータ名 | 型 | 説明 | 必須 |
|---|---|---|---|
| X-ACCESS-TOKEN | string | アクセストークン。スーパーノード起動時に設定したものと一致させる必要があります | いいえ |
Ping
接続性を確認します。同時に帯域幅やworker数を設定することもできます
POST /pingリクエストボディ
| パラメータ名 | 型 | 説明 | 必須 |
|---|---|---|---|
| bandwidth | int | サーバーの帯域幅、単位はMbps | いいえ |
| workers | int | workerプロセス数を強制的に指定 | いいえ |
レスポンス
| パラメータ名 | 型 | 説明 |
|---|---|---|
| workers | int | 現在のworkerプロセス数 |
Seed
スーパーノードにシード情報を送信します
POST /seedリクエストボディ
| パラメータ名 | 型 | 説明 | 必須 |
|---|---|---|---|
| list | array | シード情報のリスト | はい |
リクエストボディの例:
{
"list": [
{
"token": ユーザーtoken
"channel": チャンネルID(Base64エンコード)
"trackerZone": trackerの所在地域(cn, hk, us)
"live": ライブ配信かどうか
"signal1": メインシグナリングアドレス
"signal2": バックアップシグナリングアドレス
"priority": シードの優先度
"keepAlive": 常駐させるかどうか
"noUseDiskCache": VODでディスクキャッシュを使用しない
"maxConnections": 最大P2P接続数、デフォルト80
"label": カスタムスーパーノードラベル
}
]
}レスポンス
Status: 200
Stats
すべてのリアルタイム統計情報をリクエスト
GET /stats特定のworkerの統計情報をリクエスト
GET /stats/:pidpidはworkerのプロセスIDです
特定のchannelIdの統計情報をリクエスト
GET /stats/:channelIdchannelIdはチャンネルIDのBase64エンコードです
すべてのworkerを停止
POST /stop_all特定のworkerを停止
POST /stop/:pidすべてのworkerを再起動
POST /restart_all特定のworkerを再起動
POST /restart/:pid