Перейти к основному содержанию

Быстрый ответ

Большинство изображений и видео, сгенерированных через APIYI (Veo 3.1, Sora, Nano Banana, gpt-image-2-vip и др.), возвращаются в виде URL, размещенных в глобальных CDN, таких как Cloudflare. Медленная загрузка или тайм-ауты при скачивании обычно вызваны одной из двух причин:
  • Сетевой маршрут от вашего сервера к CDN: на подключение серверов в материковом Китае к зарубежным CDN влияют трансграничная пропускная способность, маршрутизация провайдеров и локальный DNS
  • Сторона хранилища: когда узлы хранения за CDN работают медленно, это может затронуть все маршруты
В журнале ошибок вашей программы обе ситуации выглядят практически одинаково, а проверка с одной машины редко позволяет отличить одну от другой. Выполните приведенные ниже шаги самопроверки и отправьте нам результаты — мы сопоставим их с данными на стороне хранилища. Это сэкономит время и избавит нас от лишней переписки.
Ключевой моментURL ресурсов Cloudflare R2 обычно выглядят как *.r2.cloudflarestorage.com или представляют собой собственный домен, проксируемый через Cloudflare. Скорость скачивания зависит от того, насколько эффективно ваш сервер может связаться с ближайшим граничным узлом Cloudflare.

Запрос к API выполнен успешно, но изображение не скачивается?

Генерация изображений происходит в два этапа:
  1. Ваша программа вызывает API APIYI, изображение генерируется и возвращается URL
  2. Ваша программа скачивает изображение по этому URL
Этап 2 выполняется напрямую с вашего сервера на хост хранения изображений и не проходит через шлюз APIYI. Вот почему:
  • В логах APIYI запрос отмечен как успешный и тарифицирован — изображение действительно было сгенерировано
  • Ваша программа сообщает об ошибках вида Read timed out или Connection reset, при этом хостом в ошибке является домен изображения, а не api.apiyi.com
  • Read timed out означает, что соединение было установлено, но в течение длительного времени данные не поступали. Это не то же самое, что «не удается подключиться», и само по себе это не указывает, на чьей стороне произошел сбой
Вы можете повторно скачать файл по тому же URL, пока он действителен (например, 48 часов для gpt-image-2-vip). Неудачная попытка скачивания не требует повторной генерации изображения — просто повторите скачивание. Пример кода см. в разделе «Вариант 2» ниже.
Проверьте сообщения оповещений: отправляйте api.apiyi.com при сбое вызова API и сообщайте домен изображения вместе со статусом «генерация выполнена успешно» при сбое скачивания. Смешивание этих двух случаев приводит к тому, что проблемы со скачиванием выглядят как сбои API.

Распространенные причины

Трансграничная перегрузка

Серверы в материковом Китае, обращающиеся к зарубежным CDN, часто сталкиваются с перегрузкой на международном канале в часы пик, что приводит к замедлению или тайм-аутам.

Неоптимальная маршрутизация ISP

Некоторые облачные провайдеры маршрутизируют международный трафик через запад США или Европу, добавляя десятки миллисекунд ненужной задержки.

Плохое разрешение DNS

Локальный DNS может сопоставлять hostname Cloudflare с удаленным edge (например, запад США) вместо ближайшего узла APAC.

Ограничения firewall / security group

Некоторые серверы ограничивают исходящий трафик диапазонами зарубежных IP, портом 443 или определенными доменами CDN, ухудшая качество соединения.

HTTP/2 и повторное использование соединений

Клиенты без HTTP/2 или повторного использования соединений оплачивают затраты на TCP/TLS handshake для каждого файла.

Однопоточная загрузка

Последовательные однопоточные загрузки не могут воспользоваться мультиплексированием CDN; пропускная способность остается низкой.

Шаги по устранению неполадок

1

Определение исходящего IP-адреса и узла CDN

Когда домен изображений обслуживается через Cloudflare, путь /cdn-cgi/trace позволяет одной командой узнать ваш исходящий IP-адрес и назначенный узел. Работает в Linux, macOS и командной строке Windows (cmd):
Обратите внимание на три строки: ip= (исходящий IP), colo= (код узла, например HKG, SIN, LAX, FRA) и loc= (регион).
  • Нет вывода в течение 30 секунд: сервер вообще не может связаться с доменом — сосредоточьтесь на шагах 4 и 5
  • Мгновенный вывод: с соединением всё в порядке, и проблема заключается в передаче данных — перейдите к шагу 3 для замера времени по фазам
2

Сравнение ноутбука и сервера

Скачайте один и тот же URL изображения с ноутбука и с сервера (команды описаны в шаге 3).
  • На ноутбуке быстро, на сервере медленно: скорее всего, дело в сетевом маршруте сервера, но на стороне хранилища также может быть деградация для определенных маршрутов — отправьте нам оба результата
  • Медленно везде: вероятнее всего, проблема на стороне хранилища — свяжитесь с нами, указав URL
3

Проверка базового сетевого подключения к CDN

Используйте ping, mtr, traceroute для проверки задержки и потери пакетов:
Чтобы проверить общую пропускную способность сервера до Cloudflare, скачайте 5 МБ тестовых данных: curl -o /dev/null -m 60 -w "total=%{time_total} speed=%{speed_download}\n" "https://speed.cloudflare.com/__down?bytes=5000000" (в Windows замените /dev/null на NUL). Если эта загрузка также идет медленно, проблема в исходящем канале сервера; если она быстрая, а медленно открывается только URL изображения, отправьте нам результаты.Потеря пакетов, задержка более 200 мс или маршруты, перенаправляемые через океан, указывают на проблемы на уровне канала связи.
4

Измерение реальной скорости скачивания

Используйте curl для анализа временных показателей и пропускной способности:
Параметр -m 60 заставляет curl прерывать операцию через 60 секунд, выводя при этом временные показатели, благодаря чему команда никогда не зависает. Запустите ее снова с флагом -6 вместо -4: если зависает только один протокол, вы можете зафиксировать в своей программе рабочий протокол.Обратите внимание на следующие параметры:
  • time_namelookup: время разрешения DNS
  • time_connect: время TCP-соединения
  • time_appconnect: завершение рукопожатия TLS; значение 0 означает сбой рукопожатия
  • time_starttransfer: время до первого байта (TTFB)
  • size_download: количество фактически полученных байтов; 0 или очень малое значение указывает на то, что соединение установлено, но передача зависла
  • speed_download: средняя пропускная способность (байт/с)
5

Проверка разрешения DNS

Проверьте, находится ли разрешенный IP-адрес географически близко к вам. Пользователи из APAC должны попадать на граничные узлы APAC; если это не так, переключитесь на публичный DNS.
6

Проверка самого сервера

Ситуация «вчера работало, сегодня сломалось» обычно означает, что на сервере что-то изменилось. Проверьте каждый пункт:
  • Облачная консоль: исчерпана ли квота трафика, не ограничена ли пропускная способность, нет ли задолженности на аккаунте
  • Не занята ли вся полоса пропускания другим процессом (Windows: Диспетчер задач → Производительность → Ethernet; Linux: iftop, nload)
  • Разрешают ли группы безопасности и файрволы порт 443 и диапазоны зарубежных IP-адресов; не изменялись ли недавно правила для исходящего трафика
  • Не обращается ли программа через неработающий прокси: проверьте HTTP_PROXY / HTTPS_PROXY, а в Windows также netsh winhttp show proxy

Решения

Вариант 1: Переключение на публичный DNS (самый простой)

DNS по умолчанию на многих серверах разрешает адреса Cloudflare в удалённые узлы. Попробуйте следующие публичные DNS-серверы:
Рекомендуется 1.1.1.1 — это собственный DNS Cloudflare, который надёжно разрешает адреса в ближайший пограничный узел Cloudflare, что идеально подходит для трафика R2 / Cloudflare CDN.

Вариант 2: Оптимизация процесса скачивания

Параллельное скачивание

Для пакетов файлов используйте параллельный загрузчик (aria2c -x 8, Python asyncio + httpx), чтобы полностью утилизировать пропускную способность.

Короткие таймауты и повторные попытки

Задавайте таймауты подключения и чтения раздельно, держите таймаут чтения около 30 секунд и делайте 3–4 повторные попытки. Зависшее соединение часто успешно восстанавливается при создании нового — это намного лучше, чем ждать 120 секунд.

Повторное использование соединений

Используйте клиенты с поддержкой HTTP/2 или keep-alive (httpx, requests.Session()), чтобы избежать повторных рукопожатий.

Потоковая запись на диск

Направляйте ответ потоком прямо на диск вместо загрузки всего файла в память.
Пример на Python (рекомендуется): Избегайте одиночной загрузки через timeout=120. При зависании соединения вы впустую прождёте 120 секунд, и вся задача генерации будет помечена как неудачная — в результате уже сгенерированное и тарифицированное изображение будет потеряно.
Пример для aria2c (CLI):

Вариант 3: Переход в регион с более качественным подключением

Если ваш сценарий использования позволяет, выбирайте регионы с хорошей связностью с Cloudflare:

Зарубежные регионы (рекомендуется)

AWS / GCP / Azure / Cloudflare Workers подключаются к Cloudflare R2 с очень низкой задержкой (как правило, 10–50 мс).

Китай: премиум-ЦОД

Если развёртывание необходимо выполнить в материковом Китае, выбирайте ЦОД с трёхсетевым BGP и премиальными международными каналами (CN2 GIA, CMI, AS9929).

Гонконг / Сингапур

Хороший компромисс: низкая задержка до материкового Китая (30–80 мс) и отличная связность с Cloudflare в регионе APAC.

Избегайте дешёвых VPS

Бюджетные хостинги часто страдают от сильной перегрузки международных исходящих каналов, и в часы пик скорость может падать до нескольких десятков КБ/с. Не рекомендуется для сценариев с интенсивным использованием CDN.

Вариант 4: Ретрансляция через другой хост (крайняя мера)

Если ваш сервер действительно не может быстро связаться с Cloudflare, а сменить регион невозможно:
  1. Используйте зарубежный сервер в качестве релея: сначала скачайте файл на зарубежный сервер, затем передайте его обратно по выделенному/премиальному каналу
  2. Ретрансляция через собственное объектное хранилище: зеркалируйте ресурс в собственное хранилище OSS / COS / S3 (например, в бакет в регионе Китая) и раздавайте оттуда
  3. Прогрев и кэширование: скачайте файл один раз на бэкенд и отдавайте последующие запросы из локального кэша
Обратите внимание на срок действияCDN URL, возвращаемые APIYI для изображений/видео, обычно имеют ограниченный срок действия (см. возвращённый URL). Скачивайте и сохраняйте ресурсы в собственное хранилище сразу же после получения обратного вызова, чтобы избежать неработающих ссылок в дальнейшем.

Частые вопросы

Домашний интернет и международный исходящий канал дата-центра могут кардинально различаться по качеству — это самая частая причина.Однако она не единственная: когда деградирует узел на стороне хранилища, это может затронуть только часть маршрутов, что также выглядит как «с ноутбука быстро, с сервера медленно». Не делайте однозначных выводов только на основе этого — выполните шаги выше и отправьте нам результаты, чтобы мы могли проверить ситуацию на стороне хранилища.
Этот текст обычно формируется вашей собственной программой. Сбой на самом деле произошел при скачивании изображения; сам API-запрос на генерацию завершился успешно. Ориентируйтесь на хост, указанный в деталях ошибки, и рекомендуем разделить обработку этих двух типов сообщений.
DNS влияет только на то, к какому пограничному узлу CDN вы резолвитесь. Если сам международный канал перегружен, одна лишь смена DNS не поможет. Рассмотрите вариант смены региона или проксирования через зарубежный сервер.
Cloudflare не заблокирован в материковом Китае, однако международные исходящие каналы могут быть перегружены в часы пик, а некоторые провайдеры пускают трафик по неоптимальным маршрутам, из-за чего качество доступа нестабильно. Это общая проблема трансграничных сетей, а не специфика R2.
Используйте инструмент скачивания с поддержкой докачки, например aria2c или wget -c, с разумными таймаутами и повторными попытками:
Видеофайлы имеют большой размер (от десятков до сотен МБ), а Base64 добавляет около 33% накладных расходов и не поддерживает докачку — это снижает скорость и тратит трафик впустую. Мы не рекомендуем использовать Base64 для больших файлов. Некоторые эндпоинты для изображений поддерживают ответы в Base64; обратитесь к соответствующей документации API.
Запустите тот же тест curl с зарубежного сервера (AWS Токио, Сингапур и т. д.). Если там скорость высокая, а на вашем сервере низкая, значит, проблема в соединении между вашим сервером и Cloudflare, а не в самом CDN.

Связанные документы

Настройка сетевого прокси

Варианты прокси при нестабильном международном подключении

Где находятся серверы APIYI?

Узнайте о расположении серверов APIYI и задержках

API генерации видео Veo

Формат вывода и срок действия URL для видео-API

Связаться с поддержкой

Если ничего не помогло, наша команда поможет вам
Информация для обращения в поддержкуЕсли самостоятельная проверка не помогла, отправьте нам все указанные ниже данные одним сообщением, чтобы избежать лишней переписки:
  • URL проблемного изображения и время его генерации (или ID запроса)
  • Полный вывод /cdn-cgi/trace (один с вашего ноутбука, один с сервера)
  • Вывод времени выполнения фаз curl (один запуск с -4, один с -6)
  • Вывод tracert / mtr и результат тестовой загрузки 5 МБ
  • Облачный провайдер и регион вашего сервера
  • Приблизительное время начала проблемы с указанием часового пояса, например 21:23 (UTC+8)
Пожалуйста, скройте любые API Key, видимые на скриншотах, перед отправкой.