Перейти к содержанию
HexaTransfer
Вернуться к блогу
Облако и хранение

Объектное или блочное хранилище: что лучше?

Сравните объектное и блочное хранилище для приложений передачи файлов. Производительность, стоимость, масштабируемость и анализ сценариев.

Объектное хранилище побеждает для файлов, загружаемых пользователями, статических ресурсов, резервных копий и архивов — по сути, для всего, к чему обращаются по HTTP и редко модифицируют на месте. Блочное хранилище выигрывает при необходимости низкозадержечных произвольных записей: базы данных, загрузочные тома, файловые системы с высокой транзакционной нагрузкой. Для задач передачи файлов объектное хранилище почти всегда правильный выбор: горизонтальное масштабирование, стоимость $0,015–0,023/ГБ/мес. против $0,08–0,125/ГБ/мес. для блочного, поддержка петабайтных бакетов без перераспределения разделов.

Как они действительно различаются под капотом

Блочное хранилище предоставляет сырое устройство (LUN или EBS-том), которое ОС форматирует в ext4, XFS или NTFS. Чтение и запись происходят блоками фиксированного размера, как правило 4 КБ или 16 КБ, через iSCSI, NVMe-oF или SCSI. ОС владеет файловой системой; блочное устройство ничего не знает о файлах — только о смещениях.

Объектное хранилище предоставляет HTTP API (S3, Azure Blob, GCS), где у каждого объекта есть ключ, байты и метаданные. Под ним нет файловой системы — объекты являются атомарными единицами, которые вы PUT и GET целиком. Записи создают новые версии; изменить байт 1 000 000 в объекте 2 ГБ без перезаписи объекта нельзя. Эта неизменяемость — преимущество: она позволяет использовать многорегиональную репликацию, версионирование и lifecycle-правила, которые блочное хранилище не может легко воспроизвести.

Краткое сравнение

| Параметр | Объектное хранилище | Блочное хранилище | |----------|---------------------|-------------------| | Типичный API | S3 HTTP REST | POSIX + iSCSI/NVMe | | Стоимость (горячий уровень AWS) | $0,023/ГБ/мес. | $0,08/ГБ/мес. (gp3) | | Максимальная единица | 5 ТБ на объект | 64 ТиБ на EBS-том | | Задержка | 10–100 мс | Менее миллисекунды | | Одновременных читателей | Неограниченно | Обычно один хост | | Долговечность | 11 девяток (S3) | 5–6 девяток (EBS) | | Хорошо для | Файлы, медиа, резервные копии | Базы данных, загрузочные диски | | Плохо для | Произвольные записи в крупные файлы | Горизонтальное масштабирование за пределы одного тома |

Пропускная способность vs. задержка: разные победители

Том gp3 EBS обслуживает 4-КБ чтения менее чем за 1 мс; GET из S3 для тех же 4 КБ занимает 20–80 мс в зависимости от региона. Для WAL PostgreSQL, выполняющего 5 000 транзакций в секунду, этот разрыв задержки критичен. Для пользователя, скачивающего .zip на 500 МБ, он не имеет значения: задержка первого байта теряется за счёт пропускной способности.

По последовательной пропускной способности объектное хранилище нередко выигрывает в масштабе. S3 может обслуживать один бакет со скоростью 5 500 GET-запросов/сек на префикс, а при секционировании запросов (ключи с хеш-префиксом) это достигает десятков тысяч. Один том gp3 ограничен 1 000 МБ/с и 16 000 IOPS. При одновременной загрузке файла 10 ГБ десятью пользователями объектное хранилище насыщает их каналы; блочное хранилище становится узким местом.

Стоимость в масштабе

Для 100 ТБ условно холодных медиаданных:

  • S3 Standard: $2 300/мес.
  • S3 Standard-IA: $1 250/мес.
  • S3 Glacier Instant Retrieval: $400/мес.
  • S3 Glacier Deep Archive: $99/мес.
  • EBS gp3: $8 000/мес.
  • EBS st1 (HDD с оптимизацией пропускной способности): $4 500/мес.

Блочное хранилище не имеет уровней. Вы платите по цене пикового доступа за данные, к которым обращаетесь раз в год. Lifecycle-правила объектного хранилища перемещают объекты автоматически: горячее на 30 дней, Standard-IA на 60, Glacier после 90. Для сервиса передачи файлов с 7-дневным сроком хранения загрузок объектное хранилище с правилом Expiration несравнимо дешевле EBS-сервера.

Согласованность и конкурентность

S3 теперь обеспечивает строгую согласованность чтения-после-записи для PUT и DELETE — глобально. Azure Blob и GCS аналогично. Это устранило один из исторических недостатков объектного хранилища — раньше встречались «сюрпризы с итоговой согласованностью», когда только что загруженный файл несколько секунд давал 404.

Но конкурентные записи по-прежнему важны. Блочное хранилище обычно предполагает одного писателя; режимы multi-attach существуют, но усложняют конфигурацию. Объектное хранилище позволяет миллиону клиентов одновременно выполнять PUT с семантикой последней записи (или версионированием для сохранения всех). Для системы обмена файлами, где два пользователя могут загрузить разные файлы с одним ключом, версионирование бакета сохраняет оба.

Когда приложениям передачи файлов всё же нужно блочное хранилище

Оговорка: приложение, обслуживающее объектное хранилище, часто работает на хостах с блочными дисками. API загрузки файлов нуждается в локальном диске для временного буфера (чанки multipart, антивирусное сканирование), хранения метаданных (обычно PostgreSQL на EBS) и логов. Сами объекты уходят в S3/R2/Blob; механизм вокруг них живёт на блочных дисках.

Для высокопроизводительной потоковой загрузки in-memory-конвейеры обходят диск. Библиотеки aws-sdk-js и boto3 поддерживают потоковые multipart-загрузки без обращения к локальному диску. Хорошо настроенный сервис загрузки может передать файл 5 ГБ от клиента в объектное хранилище, используя менее 500 МБ RAM и ноль временных файлов.

Метаданные: незаметное различие

Объектное хранилище несёт метаданные с каждым объектом: системные (размер, mtime, etag), пользовательские (произвольные пары ключ-значение, заголовки x-amz-meta-*) и теги. Поиск по метаданным возможен через S3 Object Lambda, Inventory-отчёты или связку с DynamoDB. Блочное хранилище оставляет метаданные полностью на усмотрение файловой системы: тегирование 10 миллионов файлов требует собственной базы данных.

Для приложения передачи, которому нужен мгновенный ответ на запрос «найди все файлы свыше 100 МБ, загруженные на прошлой неделе пользователями из России», метаданные объектов плюс Parquet Inventory позволяют выполнить запрос через Athena за секунды. Тот же вопрос на блочном томе с NFS — команда find, работающая часами.

Шифрование и контроль доступа

Оба типа хранилища поддерживают шифрование в покое через AES-256. Объектное хранилище упрощает контроль доступа на уровне объекта: политики бакета, presigned URL, ACL объектов и условия IAM. Доступ к блочному хранилищу более грубый — весь том подключён или нет.

Для безопасного обмена файлами с ссылками для скачивания с ограниченным временем presigned S3 URL (максимально действительны 7 дней) — стандартный паттерн. Для передач без открытого текста на стороне сервера клиентское шифрование перед загрузкой работает с любым объектным хранилищем. HexaTransfer шифрует AES-256-GCM в браузере и хранит только шифротекст — объектный бэкенд видит бессмысленные байты.

Простое правило выбора

Три вопроса:

  1. Вы обращаетесь к данным через API файловой системы (POSIX, SMB, NFS)? Если да — блочное или файловое хранилище.
  2. Вы обращаетесь через HTTP, редко модифицируете данные и хотите неограниченный масштаб? Если да — объектное хранилище.
  3. Датасет превышает 10 ТБ и растёт? Почти всегда объектное хранилище.

Для задач передачи файлов ответ на вопрос (2) всегда да. Используйте S3, R2, Azure Blob или GCS для самих файлов — и резервируйте блочное хранилище для базы данных и веб-уровня управления ими.

Попробуйте на hexatransfer.com — бесплатно, без аккаунта, до 10 ГБ.

Безопасная отправка больших файлов со сквозным шифрованием

Передавайте файлы до 10 ГБ бесплатно со сквозным шифрованием. Регистрация не требуется. Ваши файлы шифруются в браузере перед загрузкой — никто другой не может их прочитать.

Отправить файл