Что такое S3?
Simple Storage Service.
Amazon S3 — это полностью управляемое, масштабируемое объектное хранилище данных, предназначенное для хранения и доступа к данным через HTTP API.
Как хранятся данные в S3?
Данные в S3 хранятся в виде объектов, которые размещаются в бакетах.
Какую надежность обеспечивает S3?
Amazon S3 обеспечивает 11 девяток долговечности (99.999999999%) и высокую доступность, так как данные автоматически реплицируются между несколькими Availability Zones внутри региона.
Какие преимущества S3 имеет по сравнению с hdfs?
S3:
- Облачное объектное хранилище
- Высокая долговечность и отказоустойчивость
- Не требует администрирования и поддержки инфраструктуры
- Хорошо подходит для cold и warm данных
- Отлично интегрируется с cloud-сервисами (Athena, EMR, Glue, Spark)
HDFS:
- Распределённая файловая система
- Оптимизирована для high throughput batch-обработки
- Требует администрирования (репликация, NameNode, DataNode)
Как могут хранится данные?
1️⃣ Блочное хранилище
- Низкоуровневый доступ к блокам
- Используется для БД и VM
2️⃣ Файловое хранилище / файловые системы
- HDFS
- Работают с файлами и директориями
- Могут использовать блоки внутри
3️⃣ Объектное хранилище
- S3
- Объекты + метаданные
- Нет иерархии ФС
Multipart upload включается автоматически?
Нет, multipart upload не включается автоматически на стороне S3.
Его нужно явно инициализировать через API или SDK, например:
- CreateMultipartUpload — инициирует процесс
- UploadPart — загружает части
- CompleteMultipartUpload — собирает части в объект
Что такое multipart upload?
Multipart upload — это механизм S3, позволяющий разбивать большой объект на части и загружать их параллельно или по частям.
Преимущества:
- ускоренная загрузка больших файлов
- возможность возобновить загрузку только недозагруженных частей после сбоя
- уменьшение времени ожидания и сетевых ошибок при больших файлах
Что произойдет, если мы захотим загрузить файл размером больше 5 Тб?
Если попытаться загрузить объект >5 ТБ, S3 вернёт ошибку, так как это превышает лимит.
Чтобы решить проблему, нужно разбить данные на части на уровне приложения и загружать их отдельными объектами или использовать multipart upload для файлов <5 ТБ.
В Spark это можно сделать через repartition или coalesce перед записью в S3.
Какой максимальный размер объекта?
5 Tb
Что такое объекты?
> Объект в S3 — это единица хранения данных, которая состоит из:
- Ключ (Key) — уникальный идентификатор объекта внутри бакета (bucket + key + version (если есть))
- Данные (Data / Body) — содержимое объекта
- Метаданные (Metadata) — информация о файле (Content-Type, size и т.д.)
- Версия (VersionId) — присваивается, если включено versioning
Какие есть ограничения в multipart upload?
Минимальный размер части - 5 Mb
Максимальный размер части - 5 Gb
Максимальное количество частей - 10_000
Максимальный размер объекта в сумме - 5 Tb
Можно ли изменять объект?
Нет, он immutable. Дописывать или изменять объект нельзя, только удалить и создать новый.
Почему некоторые операции к примеру rename намного быстрее в hdfs, чем в s3?
rename в hdfs - это изменение метаданных
rename в s3 - это копирование данных в объект с новым именем
Что такое bucket и для чего они нужны?
Bucket — это контейнер для объектов в S3, который имеет глобально уникальное имя и привязан к конкретному региону AWS.
Он используется для:
- организации и группировки объектов
- управления доступом (ACL, policies)
- включения версионирования и логирования
- настройки lifecycle и других правил управления данными
Почему объекты в s3 immutable?
Объекты в S3 неизменяемы, чтобы:
- исключить конфликты при параллельной записи и чтении
- упростить репликацию между регионами
- обеспечить масштабируемость и консистентность
- облегчить управление версиями объектов (versioning)
Что такое prefix?
Prefix — это часть ключа объекта в S3, которая используется как «виртуальная папка» для организации данных.
Пример: для объекта logs/2025/01/app.log префикс может быть logs/2025/01/.
S3 не имеет настоящих директорий, префиксы нужны для фильтрации и группировки объектов при list запросах.
Что за консистентность в s3?
Объясните модель консистентности?
Это гарантия того, что клиент сразу увидит актуальные данные после операций put/delete/list.
Виды консистентности в s3?
Eventual consistency - результат видно не сразу
Strong consistency - результат операций мы видим сразу
Какой вид консистентности в s3 сейчас?
До декабря 2020 года:
- PUT новых объектов — strong (видно сразу)
- Overwrite объектов / DELETE / LIST — eventual (может быть задержка)
С декабря 2020 года:
- S3 обеспечивает strong consistency для всех операций: PUT, overwrite, DELETE и LIST — все операции видны сразу после завершения.
Почему сразу было не сделать strong consistency?
s3 существует с 2006 года и раньше strong consistency было сложно реализовать, но с развитием технологий появились такие возможности
Как добиться strong consistency в s3?
Сейчас этот вопрос не актуальный, т.к. после 2020 у нас всегда strong consistency. Но если работаем со старым s3.
Операция put всегда strong consistency, значит нужно отталкиваться от нее:
1) Вместо перезаписи файла создаем новый объект с уникальным ключом
2) Включить версионирование (при перезаписи старый объект не удаляется, а создается новый put)
3) Если работаем в spark, можно повторить операцию с задержкой (retries = 5, time.sleep())
Классы хранения и оптимизация стоимости?
1) Standart - частый доступ, подходит для hot данных (дорого)
2) Standart-IA (Infrequent Access) - для редко читаемых данных, которые нужно быстро получать (дешевле хранение, плата за каждый запрос)
3) S3 Intelligent-Tiering - для данных с непредсказумым доступом, способен сам переключать план хранения.
4) Glacier - архивный:
Instant - чуть дешевле Standart-IA, быстрый доступ
Flexible - хранение дешевое, получение данных 3-12 часов
Deep - хранение самое дешевое, получение данных 12-48 часов
5) One Zone-IA - дешевле, чем Standart-IA, но есть риск потерять данные
Когда какой из классов хранения использовать?
Что такое Lifecycle Policies?
Это инструмент оптимизации стоимости. Он позволяет переводить объекты между классами хранения для производительности, а также удалять объекты или их версии по истечению определенного срока.
Lifycecle настраивается на уровне бакетов и применяется к объектам за счет префиксов и тегов.
Также позволяет настроить автоматическое удаление incomplete multipart upload (когда файл большой > 5 Gb, то используется multipart upload. Если загрузка полностью не состоялась, но некоторые части сохранились, то они не видны в списке. Чтобы они не засоряли память, можно настроить автоудаление)