コンテンツにスキップ

既存のTURNサーバーの置き換え

既存のTURNプロバイダーでありながら、顧客にCloudflare Calls TURNを提供することに切り替えたい場合、いくつかの考慮事項があります。

利点

Cloudflare Calls TURNサービスは、TURNサーバーに関連する具体的および非具体的なコストを削減できます:

  • サーバーコスト(AWS EC2など)
  • 帯域幅コスト(エグレス、負荷分散など)
  • TURNプロセスのセットアップおよびサーバーのメンテナンスにかかる時間と労力
  • サーバーのスケーリング
  • セキュリティおよび機能の更新を伴うTURNサーバーの維持
  • 高可用性の維持

推奨事項

TURNキーを使用した環境の分離

Cloudflare Calls TURNサービスを大規模に使用する場合、「テスト」、「ステージング」または「プロダクション」などの環境をTURNキーで分離することを検討してください。アカウント内で最大1,000のTURNキーを作成でき、これを使用してエンドユーザーの資格情報を生成できます。

特定のTURNキーで作成できるエンドユーザーの資格情報の数に制限はありません。

カスタム識別子でユーザーをタグ付け

Cloudflare Calls TURNサービスでは、以下のように資格情報を生成する際にカスタム識別子で各資格情報をタグ付けできます:

Terminal window
curl https://rtc.live.cloudflare.com/v1/turn/keys/$TURN_KEY_ID/credentials/generate \
--header "Authorization: Bearer $TURN_KEY_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{"ttl": 864000, "customIdentifier": "user4523958"}'

このフィールドを使用して、特定のユーザーまたはユーザーグループの使用状況を集約し、分析を収集します。

使用状況の監視

GraphQL分析APIを使用して、アカウント全体の使用状況を監視できます。これは、請求目的のために全体の使用状況を追跡し、予期しない変化を監視するのに役立ちます。さまざまなフィルターを使用して、TURN分析から時系列データを取得できます。

資格情報の悪用を監視

エンドユーザーとTURN資格情報を共有する場合、資格情報の悪用が可能です。各資格情報にカスタム識別子をタグ付けし、GraphQL分析APIを介してアプリケーション内のトップカスタム識別子を監視することで、悪用を監視できます。

エンドユーザーのTURN使用量の請求方法

アプリケーションでTURN使用量を請求する際には、TURN分析における適応サンプリングを理解し、考慮することが重要です。このシステムは、正確性を維持しながら大規模なデータセットを効率的に処理するために適応サンプリングを採用しています。

TURN分析におけるサンプリングプロセスは、2つのレベルで機能します:

  • データ収集時:使用データポイントは、生成が速すぎる場合にサンプリングされることがあります。
  • クエリ時:クエリが複雑すぎる場合や大きな時間範囲をカバーする場合に追加のサンプリングが発生することがあります。

正確な請求を確保するために、顧客ごとの時間期間ごとにTURN使用量を合計する単一のクエリを作成し、単一の値を返すようにしてください。複数の顧客の使用状況を同時にリストするクエリは避けてください。

これらのガイドラインに従い、TURN分析がサンプリングをどのように処理するかを理解することで、エンドユーザーのTURN使用量に基づいてより正確な請求を行うことができます。

例クエリ

query{
viewer {
usage: accounts(filter: { accountTag: "8846293bd06d1af8c106d89ec1454fe6" }) {
callsTurnUsageAdaptiveGroups(
filter: {
datetimeMinute_gt: "2024-07-15T02:07:07Z"
datetimeMinute_lt: "2024-08-10T02:07:05Z"
}
limit: 100
orderBy: [customIdentifier_ASC]
) {
dimensions {
customIdentifier
}
sum {
egressBytes
}
}
}
}
}

以下は、単一の顧客の使用量のみを照会するクエリです。

query{
viewer {
usage: accounts(filter: { accountTag: "8846293bd06d1af8c106d89ec1454fe6" }) {
callsTurnUsageAdaptiveGroups(
filter: {
datetimeMinute_gt: "2024-07-15T02:07:07Z"
datetimeMinute_lt: "2024-08-10T02:07:05Z"
customIdentifier: "myCustomer1111"
}
limit: 1
orderBy: [customIdentifier_ASC]
) {
dimensions {
customIdentifier
}
sum {
egressBytes
}
}
}
}
}