Практическое руководство: добавление (расширенное)
Практическое руководство: добавление (расширенное)
Введение
Надежное добавление ресурсов — это основная функция каждой интеграции C2C. Это руководство содержит передовые методы и лучшие практики для создания надежной, отказоустойчивой и эффективной системы добавления, которая работает хорошо даже в сложных условиях.
Требования
Если вы еще не сделали этого, просмотрите руководство Реализация C2C: настройка перед продолжением. Вам понадобится access_token, полученный в процессе аутентификации и авторизации. Мы продолжим использовать тот же тестовый ресурс из руководства по базовому добавлению.
Расширенные параметры ресурсов
При создании ресурсов в Frame.io можно использовать несколько расширенных параметров для настройки поведения добавления. Параметр offset особенно важен для правильной интеграции.
Смещение — обработка приостановленных устройств
Предоставление точного значения offset крайне важно. Этот параметр указывает, когда создан медиафайл, и гарантирует, что ваше устройство не добавляет контент, которым не следует делиться. Когда устройство приостановлено в Frame.io, пользователь указывает, что медиа, созданные во время паузы, не должны добавляться. Дополнительную информацию см. в нашем руководстве по функции приостановки.
Дополнительные преимущества параметра offset
Параметр offset предоставляет еще одно значительное преимущество для систематизации медиафайлов в Frame.io. При добавлении контента, снятого в более раннюю дату, например когда пользователь выбирает фото, сделанное на прошлой неделе во время воспроизведения, параметр offset обеспечивает появление этого медиафайла в папках, соответствующих исходной дате съемки, а не текущей дате добавления. Эта хронологическая систематизация поддерживает логическую временную шкалу в структуре проекта Frame.io. Без параметра offset предыдущие медиафайлы неправильно группируются с сегодняшним контентом, что может вызвать путаницу у редакторов и других участников совместной работы. Можно предоставить пользователям выбор в этом вопросе с помощью вашего интерфейса. Если пользователи предпочитают систематизировать все добавленные материалы по текущей дате независимо от даты съемки, можно просто опустить параметр offset, поскольку по умолчанию он равен 0, если не указан.
Наш дизайн API-интерфейса исключает необходимость для вашего устройства отслеживать состояние приостановления. Вместо этого при добавлении файла вы указываете, сколько секунд назад файл создан. Наш сервер сравнивает это с окнами приостановки и отклоняет добавление, если файл создан во время приостановки.
Чтобы увидеть эту функцию в действии, приостановите ваше устройство в меню с тремя точками на вкладке «Подключения C2C».
Теперь попробуйте добавить ресурс:
Спецификация конечной точки API-интерфейса
Документацию для /v2/devices/assets можно найти здесь.
Отобразится ошибка:
Если вы отмените приостановку устройства и повторите попытку с тем же запросом, ресурс будет создан.
Однако, если ресурс создан во время окна приостановки, необходимо задать offset, чтобы указать, когда он фактически создан:
Это указывает Frame.io на то, что ресурс создан 60 секунд назад (во время приостановки), что закономерно вызывает ошибку Канал приостановлен. Точные значения offset крайне важны для предотвращения добавления конфиденциального контента против воли пользователя, включая защищенную интеллектуальную собственность, конфиденциальные отснятые материалы или другие материалы с ограниченным доступом.
Смещение и повторные попытки
При повторной попытке неудачного вызова создания ресурса не забудьте обновить значение offset. Во время длительных интервалов повторных попыток статическое смещение может выйти за пределы соответствующего окна приостановки, потенциально разрешая операции добавления, которые должны быть заблокированы.
Добавление в определенный канал
Если у вашего устройства есть несколько каналов, можно указать, какой из них использовать:
Если не указано, каналом по умолчанию является 0. Для большинства интеграций не потребуется изменять это значение.
Запрос пользовательского количества фрагментов
По умолчанию серверная часть Frame.io делит файлы на фрагменты размером примерно 25 МБ. Для сетей с высокой перегрузкой стоит предпочесть меньшие фрагменты. Можно запросить определенное количество фрагментов с помощью параметра parts:
Ответ будет включать четыре URL-адреса добавления:
Размер фрагмента составит:
Последний фрагмент составит 5 284 061 байт (рассчитывается как 21 136 250-5 284 063*3). При запросе пользовательского количества фрагментов учитывайте ограничения многочастного добавления AWS S3:
- Каждый фрагмент должен быть не менее 5 МиБ (5 242 880 байт), за исключением финального фрагмента
- Максимальное количество фрагментов — 10 000
Если запрос нарушает эти ограничения, отображается 500: INTERNAL SERVER ERROR:
Всегда проверяйте, соответствует ли пользовательское количество фрагментов требованиям S3.
Эффективное добавление
Устройства C2C часто работают в сложных сетевых средах, поэтому эффективность имеет решающее значение. Вот стратегии для максимизации пропускной способности.
Повторное использование/пул подключений TCP
Установка зашифрованных подключений требует значительных накладных расходов на согласование. Для эффективной работы повторно используйте подключения TCP при выполнении нескольких запросов. Большинство библиотек HTTP предоставляют абстракцию клиента или сеанса, которая поддерживает постоянные подключения.
Процесс согласования для нового подключения HTTPS включает криптографические рукопожатия и проверку сертификатов. Повторно используя подключения, вы выполняете эту ресурсоемкую процедуру только один раз, а не для каждого запроса.
Справочник по рукопожатию TCP
О технических деталях по процессам рукопожатия TLS см. в объяснении Cloudflare.
Чтобы показать повторное использование подключений с curl, сначала создайте новый ресурс в Frame.io, как описано в базовом руководстве по добавлению.
Затем разделите файл на отдельные фрагменты для тестирования:
Теперь добавьте оба фрагмента через одно подключение TCP, используя параметр --next curl:
Сравните это с отдельными подключениями:
Повторное использование URL-адресов фрагментов
Можно добавлять в один и тот же URL-адрес фрагмента несколько раз, поэтому свободно используйте URL-адреса повторно между примерами.
При тестировании повторное использование подключений обычно улучшает производительность на 15–20% для последовательных операций добавления.
Параллельные операции добавления
Для еще большей пропускной способности добавляйте несколько фрагментов одновременно:
При достаточной пропускной способности параллельные операции добавления завершаются приблизительно за время самой медленной отдельной операции добавления.
Для оптимальной параллельной работы полезно использовать две одновременные операции добавления на каждое ядро процессора. Превышение этого соотношения может привести к конкуренции за ресурсы и снижению эффективности.
Скорость параллельных операций добавления
Состояние сети значительно влияет на производительность параллельных операций добавления. В некоторых средах последовательные операции добавления могут превосходить по скорости параллельные. Усовершенствованные реализации могут отслеживать пропускную способность и динамически корректировать параллельное выполнение операций. Всегда тестируйте производительность в реальной рабочей среде, а не полагайтесь на примерные временные показатели.
Комбинирование двух подходов
Для максимальной эффективности объединяйте пул подключений с параллельными операциями добавления. Создавайте несколько процессов, каждый из которых использует пул подключений для своей собственной последовательности загрузок:
Функции библиотек HTTP
Большинство библиотек HTTP предоставляют абстракции для пула подключений и параллельных запросов. Экспериментируйте с параметрами вашей библиотеки, чтобы определить оптимальную конфигурацию для своей среды.
Отслеживание хода выполнения добавления
Ваша интеграция должна предоставлять пользователям базовую индикацию хода выполнения. Детализация на уровне фрагментов допустима. Для добавления трех фрагментов ход выполнения по мере завершения операции с каждым фрагментом может увеличиваться следующим образом: 0% → 33% → 66% → 100%.
Более детальная отчетность о ходе выполнения зависит от возможностей библиотеки HTTP. Свяжитесь с нашей командой, если вам нужна помощь в реализации более подробного отслеживания хода выполнения.
Надежные операции добавления
Для надежной обработки ошибок изучите наше руководство по ошибкам. Следующие разделы предполагают, что вы реализовали стратегии обработки ошибок, описанные там.
Создание средства добавления промышленного уровня требует учета дополнительных факторов, помимо простого отслеживания ошибок в отдельных запросах.
Создание очереди операций добавлений
В реальных сценариях ваше устройство может генерировать медиафайлы быстрее, чем может их добавлять, или может испытывать длительные перерывы в подключении. Реализация системы очередей отделяет создание медиафайлов от управления операциями добавления.
Рассмотрим архитектуру с двумя очередями:
- Очередь мультимедиа для регистрации локальных файлов в Frame.io.
- Очередь фрагментов для добавления отдельных фрагментов файлов.
Упрощенная реализация:
Обработка ошибок
В приведенном выше примере мы предполагаем, что функции, вызываемые для вызовов C2C, обрабатывают ошибки в соответствии с рекомендациями в руководстве по ошибкам.
Постоянная очередь с сохранением при перегрузках
Подход с очередью в оперативной памяти отлично работает, пока устройство включено, но что происходит, если питание пропадает до завершения операции добавления? Чтобы cоздать действительно устойчивую интеграцию, нам нужно гарантировать, что устройство сможет возобновить работу с того места, на котором оно остановилось после перезапуска.
Это требует сохранения состояния очереди в хранилище между циклами питания. Встроенная база данных, такая как SQLite, обеспечивает отличную основу для этой функциональности.
Реализация постоянной очереди должна поддерживать эти ключевые операции:
- Добавление новых созданных файлов в очередь добавления.
- Отслеживание успешного создания ресурсов в Frame.io.
- Запись неудачных попыток создания ресурсов из-за ошибок.
- Хранение информации о фрагментах файлов для задач добавления.
- Получение следующего фрагмента для добавления.
- Отметка фрагментов как успешно добавленных.
- Регистрация неудачных попыток добавления фрагментов.
- Предоставление информации о состоянии файла для отображения пользователю.
Адаптация нашего предыдущего примера для использования системы постоянного хранения данных:
С таким подходом постоянного хранения интеграция становится устойчивой к прерываниям питания. Когда устройство перезапускается, оно просто продолжает обработку с последнего сохраненного состояния. Эта архитектура также обеспечивает основу для реализации более продвинутых функций, таких как отслеживание ошибок и обнаружение зависших операций добавления.
Отслеживание ошибок добавление
Надежная система добавления должна тщательно отслеживать ошибки. После повторных попыток выполнения операции с использованием стратегий из руководства по ошибкам, записывайте сбои в хранилище постоянного хранения данных. Это позволяет системе:
- Понижать приоритет проблемных операций добавления, чтобы они не блокировали всю очередь.
- Предоставлять пользователям точную информацию о состоянии.
- Обеспечивать административное вмешательство при постоянных проблемах.
При возникновении фатальной ошибки отметьте элемент, чтобы предотвратить ненужные повторные попытки.
Управление зависшими операциями добавления
Реализуйте защиту от зависших на неопределенное время операций добавления. Установите максимальную продолжительность (например, 30 минут), по истечении которой задача добавления фрагмента должна быть завершена и перезапущена. Это предотвращает сценарии, когда все процессы добавления блокируются не отвечающими операциями.
Восстановление после скрытых сбоев
Сбои системы, потеря питания или завершение процесса могут помешать нормальному составлению отчетов об ошибках. При получении элементов из очереди записывайте время извлечения. Если элемент остается в состоянии «в обработке» дольше разумного порога (например, 30 минут) без сообщения о выполнении или сбое, автоматически возвращайте его в доступный пул для обработки другим процессом.
Минимализация вредоносных операций добавления
«Вредоносный» элемент очереди постоянно завершается сбоем из-за присущих проблем с данными или окружением. Если эти элементы постоянно возвращаются в очередь, они могут заблокировать всю систему добавления. Рассмотрите эти стратегии для обработки таких случаев:
- После множественных сбоев понизьте приоритет элемента, чтобы можно было пропустить новый контент.
- Отслеживайте как явные ошибки, так и количество попыток обработки.
- Следуйте передовым практикам подключения и авторизации, чтобы различать временные проблемы среды и внутренние проблемы файлов.
- Реализуйте ограничения повторных попыток с эскалацией (например, 10 повторных попыток для каждой операции в рамках 3 попыток выполнения задачи, итого 30 попыток).
- Предоставьте пользовательский интерфейс для ручного сброса проблемных операций добавления после устранения проблем среды.
Вредоносные операции добавления могут возникать в следующих случаях:
- Повреждение данных файлов, вызывающее ошибки ввода-вывода.
- Катастрофические сбои процесса, которые не позволяют сообщить об ошибке.
- Повторяемые ошибки, вызванные постоянными базовыми условиями.
Повторная попытка после перезапуска системы
Перед окончательным отказом от проблемных операций добавления пометьте их для выполнения одной финальной попытки после следующего перезапуска системы. Это поможет в случаях, когда операции добавления не удается выполнить из-за временных проблем в состоянии системы, связанных с памятью, драйверами или выделением ресурсов. Если после чистого перезапуска операцию добавления по-прежнему не удается выполнить, можно с большей уверенностью отметить ее как проблемную на постоянной основе.
Очистка очереди
Не забудьте удалить недоступные файлы из вашей очереди. Когда носитель извлечен или файлы удалены, очистите соответствующие записи в очереди добавления, чтобы предотвратить возникновение ненужных ошибок.
Важно. Необходимо очистить вашу очередь добавления при подключении к новому проекту. Медиафайлы, поставленные в очередь для одного проекта, никогда не должны появляться в другом. Когда пользователь сопрягает устройство с другим проектом, проверьте, изменился ли проект и, если да, полностью очистите существующую очередь.
Дальнейшие шаги
Мы рекомендуем обращаться к нашей команде с любыми вопросами и переходить к руководству по расширенному добавлению. Мы с удовольствием поможем вам в продолжении изучения процессов интеграций.