跳转到内容
搜索文档

替换现有的 TURN 服务器

最后更新 查看 MarkdownAgent 设置

如果您是现有的 TURN 服务提供商,但希望切换为向您的客户提供 Cloudflare Realtime TURN,这里有一些注意事项。

优势

Cloudflare Realtime TURN 服务可以降低与 TURN 服务器相关的有形和无形成本:

  • 服务器成本(AWS EC2 等)
  • 带宽成本(出网流量、负载均衡等)
  • 设置 TURN 流程和维护服务器的时间与精力
  • 扩容和缩容服务器
  • 维护具有安全和功能更新的 TURN 服务器
  • 保持高可用性

建议

使用 TURN 密钥隔离环境

当大规模使用 Cloudflare Realtime TURN 服务时,请考虑使用 TURN 密钥隔离诸如“测试”(testing)、“暂存”(staging)或“生产”(production)等环境。您可以在您的账户中最多创建 1,000 个 TURN 密钥,这些密钥可用于生成终端用户凭据。

使用特定的 TURN 密钥可以创建的终端用户凭据的数量没有限制。

使用自定义标识符标记用户

Cloudflare Realtime TURN 服务允许您在生成凭据时使用自定义标识符标记每个凭据,如下所示:

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 分析中的采样过程在两个级别上工作:

  • 数据收集时:如果使用数据点生成速度过快,则可能会被采样。
  • 查询时:如果查询过于复杂或涵盖较大的时间范围,可能会发生额外的采样。

为了确保准确的计费,请编写单个查询来汇总每个客户在每个时间段的 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
          }
        }
      }
    }
  }

这篇文档对您有帮助吗?