← Cloudflare Realtime / realtime / turn
Замена существующих TURN-серверов
Если вы уже являетесь поставщиком TURN и хотите перейти на предоставление своим клиентам Cloudflare Realtime TURN, учтите несколько моментов.
Преимущества
Служба Cloudflare Realtime TURN позволяет снизить как ощутимые, так и неощутимые затраты, связанные с TURN-серверами:
- Расходы на серверы (AWS EC2 и т. д.)
- Расходы на трафик (исходящий трафик, балансировка нагрузки и т. д.)
- Время и усилия на настройку процесса TURN и обслуживание сервера
- Масштабирование серверов вверх и вниз
- Поддерживайте TURN-сервер в актуальном состоянии, устанавливая обновления безопасности и новых функций
- Обеспечьте высокую доступность
Рекомендации
Разделение окружений с помощью TURN-ключей
При масштабном использовании службы Cloudflare Realtime TURN рекомендуется разделять окружения, такие как «testing», «staging» или «production», с помощью ключей TURN. В вашем аккаунте можно создать до 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 analytics API. Это удобно для отслеживания общего использования в целях биллинга и выявления неожиданных изменений. Временные ряды данных можно получить из аналитики TURN с применением различных фильтров.
Отслеживайте злоупотребления учётными данными
Если вы передаёте учётные данные TURN конечным пользователям, возможно их несанкционированное использование. Чтобы отслеживать такие случаи, помечайте каждый набор учётных данных пользовательскими идентификаторами и отслеживайте наиболее часто встречающиеся идентификаторы в приложении с помощью GraphQL analytics API.
Как выставлять счета конечным пользователям за использование TURN
При тарификации использования TURN в вашем приложении важно понимать адаптивную выборку в аналитике TURN и учитывать её. Эта система применяет адаптивную выборку, чтобы эффективно обрабатывать большие наборы данных, сохраняя точность.
Процесс выборки в TURN-аналитике работает на двух уровнях:
- При сборе данных: точки данных об использовании могут подвергаться выборке, если они формируются слишком быстро.
- Во время выполнения запроса: если запрос слишком сложен или охватывает большой промежуток времени, может применяться дополнительная выборка.
Чтобы обеспечить точность тарификации, напишите один запрос, который суммирует использование TURN по каждому клиенту за период времени и возвращает единственное значение. Не используйте запросы, которые перечисляют использование сразу нескольких клиентов.
Соблюдая эти рекомендации и понимая, как TURN analytics обрабатывает выборку, вы можете обеспечить более точное выставление счетов конечным пользователям на основе их использования 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
}
}
}
}
}