32
Эволюция архитектуры хранения и отдачи фотографий в Badoo Юрий Насретдинов

Архитектура хранения фотографий в Badoo

Embed Size (px)

Citation preview

Эволюция архитектуры хранения и отдачи фотографий в Badoo

Юрий Насретдинов

План

• О сайте

• Хранение фотографий (до «облака»)

• «Облако»

• Отдача фотографий

• Заключение

План

• О сайте

• Хранение фотографий (до «облака»)

• «Облако»

• Отдача фотографий

• Заключение

О сайте

• 250 млн пользователей

• 70 тыс RPS на PHP-FPM

• 50 языков интерфейса

• 1 Пб фотографий и видео

• 2,5 ДЦ

План

• О сайте

• Хранение фотографий (до «облака»)

• «Облако»

• Отдача фотографий

• Заключение

Общая архитектура v1

Photo servers

Общая архитектура v2

Fibre Channel

Photo servers

Storage Area Network

Upload (v2)

+Стоимость ($ / Тб) +Простота для программистов

Общая архитектура v2

- SPoF в виде SAN - Сложность для админов (сборка SAN, установка

FC-свичей и карт, сложные опции монтирования по сети) - Низкая производительность - Низкая надежность (драйвера FC-карт, сами FC-карты,

непосредственно SAN)

Общая архитектура v3 (v2+replication)

Fibre Channel

Photo servers + SSD

Storage Area Network x2

SSD SSD SSD

Upload (v3)metadata

backup event

SSD

async replication (PHP script)

Отдача (v3)

try_files (nginx):

SSD

SAN1

SAN2

+Стоимость ($ / Тб) +Простота для программистов

Общая архитектура v3

- SPoF в виде SAN - Сложность для админов (сборка SAN, установка

FC-свичей и карт, сложные опции монтирования по сети) - Низкая производительность - Низкая надежность (драйвера FC-карт, сами FC-карты,

непосредственно SAN)

План

• О сайте

• Хранение фотографий (до «облака»)

• «Облако»

• Отдача фотографий

• Заключение

Общая архитектура v4 («облако»)

metadata

Upload (v4)

metadata

round-robin

async replication (database queue)

timestamp

backup event

Отдача (v4)

round-robin

request + timestamp cache server

response old timestamp

Отдача (падение сервера)

round-robin

request + timestamp cache server

response

timeout

Модификация

check timestamp:

local load or

remote load

modify + save

async replication

Общая архитектура v4 («облако»)

+Стоимость ($ / Тб) +Простота для админов +Отказоустойчивость +Производительность- Высокая сложность разработки

План

• О сайте

• Хранение фотографий (до «облака»)

• «Облако»

• Отдача фотографий

• Заключение

Отдача фотографий

Cache servers

Intranet (Ethernet)

Local Traffic Manager

Internet (Ethernet)

Global Traffic Manager

Кеширующие сервера

•Нужны для уменьшения нагрузки на SAN

•Своя логика: кеширование после нескольких хитов вместо LRU

• Cache hit ratio - 98% • 100k RPS на фотокеши • 2k RPS на фотосервера

Регистрация пользователя

50% 50%

1 2 3

закрыт на регистрацию

Выбор фото-сервера (выбор «place_id»)

Регистрация пользователя

• у каждого пользователя есть свой place_id

• place_id определяет фото-сервер и базовый путь на диске

• 12345 => /shared/photos/12/3/4/5/

Размещение фотографий

• Соответствие «place_id => hostname» в конфиге приложения

/photos/12/3/4/5/67890/d45/45678_920.jpg

place_id user_id photo_id size

photo_id/1000

Путь на диске:

Фотографии на сайте

Запросы приходят на URI вида:

/<place_id>/<user_id>/<photo_id>_<size>.jpg

Пример:

/12345/67890123/45678_920.jpg

place_id user_id photo_id size

Фотографии на сайте

Домен + начало URI:

http://pcache-pv-eu1.badoocdn.com/p23/

eu1 и us1 - названия ДЦ

p23 - номер кеширующего сервера

URI до фотографии может быть зашифрован:

http://.../p23/hidden?euri=...

План

• О сайте

• Хранение фотографий (до «облака»)

• «Облако»

• Отдача фотографий

• Заключение

Заключение

• Храним 1 Пб фотографий • Использовали SAN

• Сделали user-level репликацию

• Перешли на локальные диски

• Отдача фотографий через кеширующие сервера

Вопросы

Юрий Насретдинов, ведущий разработчик, Badoo

@YNasretdinov [email protected]