1
Этап: System Design
Задача 1
Спроектировать хранилище для одной модальности (картинки)
Требования пользователей:
- Пользователи системы хотят делать выгрузки картинок по метаданным, например, по теме — природа, машины, мотоциклы, спорт.
- Пользователи хотят делать выгрузки по параметрам самих картинок (например, ищем больше определенной ширины).
- Для пользователей важна скорость работы.
Что хочется увидеть в итоге:
- Прописать функциональные и нефункциональные требования.
- Какие слои данных выделены и почему. Какие подходы проектирования будут использоваться на каждом слое и почему.
- Какая технология используется на каждом слое и почему.
- Как будут идти потоки данных, что использоваться для хранения (форматы).
- Как пользователи будут решать свою задачу с помощью платформы (например, через Jupyter Notebook).
Опционально: 6.1. Мониторинг ошибок. 6.2. Сбор статистики по данным (количество картинок на слоях). 6.3. Аналитика над данными (количество картинок по определенным темам). 6.4. Качество данных (валидность картинки, дубли).
Что есть в распоряжении:
- Cloud.
Дополнение по хранению данных:
- Текущий размер файлов — 1 Пб.
- Данные — zip архивы (внутри много file.jpeg + 1 meta.csv с метаданными: тема, ширина, высота). Местоположение — S3.
- На текущий момент четкой структуры нет — в одном zip архиве рандомно лежат разные темы, разные размеры, мы не знаем, какие.
- Возможны дубликаты, возможны битые картинки.
- Предположим, что каждая тема — примерно 100 Gb.
Дополнение по процессингу:
- Нагрузка на систему примерно 1 Тб в сутки (синхронизация бакетов — примерно 2 часа).
Follow Up:
- Ожидаем рост данных до 10 Тб в сутки.
- Модальности будут добавляться (аудио, видео, тексты).
Дополнительно
Задача по системному дизайну на проектирование хранилища изображений объемом 1 Пб с ростом до 10 Тб в сутки и возможностью добавления новых модальностей (аудио, видео, тексты).
2