- Использование Cloud Run для обслуживания статических файлов - 1
- Статья в блоге о том, как использовать Google Cloud Run для предоставления статических файлов. Основное внимание уделяется перенаправлению и повышению производительности.
Текст, переведенный ИИ.
Резюме публикации от ИИ durumis
- Мы создали систему CDN, которая использует Google Cloud Storage (GCS) и Cloud Run для эффективного управления изображениями и веб-ресурсами, а также для предоставления оптимизированных файлов для веб-браузеров.
- Загруженные изображения конвертируются в различные форматы, такие как webp и avif, а текстовые файлы сжимаются с помощью gzip, br и других методов, чтобы обеспечить пользователям оптимизированный контент.
- Cloud Storage и Cloud Run размещены в 8 регионах по всему миру, что позволяет доставлять ресурсы из ближайшего к пользователю региона, минимизируя задержки и улучшая пользовательский опыт.
Предыдущая статьяв которой описывалась реализация сервиса статических файлов с помощью Cloud Run, используемая в Durumis.
Однако, в отличие от файлов, таких как robots.txt или favicon.ico, изображения, размещаемые в блоге, или ресурсы самой веб-страницы не могут быть обработаны как простые статические файлы.
Поэтому для обработки таких файлов необходимо использовать Cloud Run, интегрированный с Google Cloud Storage (далее GCS).
Базовая концепция проста: загружаемые в реальном времени изображения или новые ресурсы при обновлении сайта загружаются в GCS, а при внешнем запросе Cloud Run проверяет наличие файла в GCS и, если он есть, отправляет его.
Однако на практике механизм функционирования гораздо сложнее.
При загрузке изображений в GCS в Durumis они, как правило, преобразуются в три формата.
При загрузке файлов JPEG или PNG, эти изображения преобразуются в форматы WebP и AVIF и сохраняются одновременно.
Все изображения запрашиваются по URL без расширения, и при запросе Cloud Run проверяет заголовок браузера и определяет, может ли он обрабатывать AVIF или WebP. Если ни один из этих форматов не поддерживается, то передается JPEG или PNG. Помимо простой конвертации форматов, изображения также предварительно масштабируются до нужных размеров для веб-страницы и хранятся/передаются.
Диаграмма
То же самое относится и к текстовым файлам.
Помимо изображений, для веб-сайтов требуются многочисленные ресурсы, такие как JS и CSS файлы.
Файлы JS и CSS, подобно изображениям, при загрузке сжимаются с помощью gzip и Brotli и хранятся, а при запросе передается браузеру тот формат, который он поддерживает.
Роль CDN не ограничивается простым кэшированием контента. В Google Cloud Platform (GCP) функцию Cloud CDN можно напрямую интегрировать с Google Cloud Load Balancer (GCLB), что обеспечивает более мощные возможности.
Cloud CDN получает данные от Backend Service, сохраняет их и отправляет клиенту. При этом Cloud CDN может передавать оптимизированный файл в зависимости от заголовка запроса клиента. Таким образом, для одного и того же URL можно предоставлять контент в разных форматах.
Например, для одного и того же URL '/image/tempImage'
- В случае с файлами изображений
- передается изображение в другом формате в зависимости от заголовка 'Accept' браузера.
- Браузер Chrome, как правило, указывает приоритет в следующем порядке: 'image/avif,image/webp,image/apng'.
- CDN передает изображение в доступном формате в соответствии с этим порядком, а если ни один из них не поддерживается, то использует JPEG или PNG.
- Аналогично, в случае с текстовыми файлами
- учитываются предпочтения в отношении метода сжатия.
- Браузер Chrome поддерживает такие методы сжатия, как 'gzip, deflate, br, zstd'.
- Например, в сервисе Durumis в настоящее время поддерживается gzip и Brotli, поэтому в первую очередь передается файл, сжатый с помощью Brotli.
Благодаря таким расширенным функциям CDN можно предоставлять контент, оптимизированный под среду пользователя, что значительно повышает производительность веб-сайта и улучшает пользовательский опыт.
Даже при использовании Cloud CDN, по умолчанию CDN все равно необходимо запрашивать файлы у Cloud Run. В Durumis для этого используется предварительное размещение Cloud Storage и Cloud Run в 8 регионах по всему миру, что позволяет предварительно размещать ресурсы и передавать их. Это приводит к небольшому увеличению затрат и объема работы, но обеспечивает пользователям значительно меньшую задержку.
Даже при использовании Cloud CDN файлы изначально необходимо извлекать с исходного сервера (в данном случае Cloud Run). Durumis оптимизировала эту структуру для предоставления более качественных услуг глобальным пользователям.
Глобальная стратегия оптимизации Durumis:
- Предварительное размещение Cloud Storage и Cloud Run в 8 регионах по всему миру
- Предварительное распространение необходимых ресурсов в каждом регионе
- Передача ресурсов из ближайшего региона при запросе пользователя
Этот подход требует небольшого увеличения расходов и дополнительных действий, но предоставляет пользователям следующие преимущества:
- Значительно сниженная задержка
- Более быстрое время загрузки контента
- Общее улучшение пользовательского опыта
Визуализация этой структуры выглядит следующим образом:
Благодаря этой структуре Durumis может предоставлять стабильно быстрые услуги глобальным пользователям. Контент передается из ближайшего региона независимо от местоположения пользователя, что позволяет использовать сервис с низкой задержкой в любой точке мира.
Такой подход требует больших усилий на этапе первоначальной настройки и обслуживания, но при этом значительно улучшает конечный пользовательский опыт. В особенности, для компаний, предоставляющих глобальные услуги, такая структура может существенно помочь в предоставлении конкурентоспособных услуг.
Сегодня в рассказе о CDN мы рассмотрели лишь базовые понятия.
На самом деле, можно было бы рассмотреть и детали настройки, но они различаются у разных поставщиков облачных услуг (GCP, Azure, AWS), и, честно говоря, не так интересны, поэтому мы остановились на описании концепций.
В будущем, при случае, мы рассмотрим и более детальные аспекты.
Следующий рассказ будет посвящен вопросу синхронизации множества (в нашем случае целых 8!) хранилищ Cloud Storage в разных регионах.
Спасибо за внимание.