Фотострана, Дмитрий Смирнов

34
Интересно? Заходи на http://job.fotostrana.ru Архитектура Фотостраны

Upload: eyevseyeva

Post on 09-Dec-2014

1.535 views

Category:

Technology


7 download

DESCRIPTION

Презентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге. Дмитрий Смирнов, Ведущий разработчик компании «Фотострана»: «30 млн. пользователей - как правильно строить архитектуру?»

TRANSCRIPT

Page 1: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Архитектура Фотостраны

Page 2: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Фотоcтрана? Не, не слышал.

Page 3: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

— 31 500 000 зарегистрированных пользователей

— 1 400 000 уникальных посетителей в день.

— Больше 100 человек в команде

— Входим в ТОП-20 сайтов рунета

Page 4: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

О чем расскажу?

• Обработка запроса и генерация HTML

• Как мы отдаем статику

• Хранение данных

Page 5: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 6: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 7: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Нет разбиения на группы

Питомцы, профили, поиск…

Page 8: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Есть разбиение на группы

Питомцы Профили Поиск

Page 9: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

• 80 PHP серверов• 2.500 req/s• Среднее время

ответа 0.1 сек

Page 10: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Отдача статики

• Наша статика (css, js, swf, jpg…)

• Фотосхема (пользовательские фотки, аватарки, превьюшки)

Page 11: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Содержимое статики:• 800 css• 750 js• 3200 swf• 48000 image

• 5000 req/s• >1 Гбит/сек трафика в пике

} 3 Гигабайта

Page 12: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 13: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 14: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 15: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Фотосхема

• 11 Тб - объем пользовательских фотографий

• 250.000 - новых фоток в сутки• 4000 req/s

Page 16: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

• Большие SATA диски• Полное дублирование файлов между серверами

• Кэш в RAM+ Кэш на SSD (для маленьких файлов)

• Кэш в RAM• Кэш на HDD

Фотосхема

Page 17: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 18: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 19: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 20: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 21: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Хранение данных

• MySQL• Memcached• Lemon – самописная NoSQL• Демоны на C++

Page 22: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

картинка про alter таблички на 30кк записей (15Гбайт)

• 14 серверов• 110.000 / мин SELECT• 25.000 / мин UPDATE

Page 23: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 24: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

• 5 серверов• 200 Гбайт RAM• 30.000 req/s

Page 25: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 26: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

MySQL плохо делает 3 вещи:

• Удаление большого количества данных

• Очень частые изменения данных

• Частые выборки

Page 27: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Решение – NoSQL.

Lemon

Lemon:• Простое key-value хранилище• Все данные в памяти• Периодический сброс данных на диск

Page 28: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Page 29: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Демоны

Что сделали:• Модуль для PHP• Разработали протокол взаимодействия

Всего больше 30:• Гости, контакты, мессенджер, питомцы, поиск,

встречи, голосвание…

Page 30: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Пример: демон гостей<?$guests->call(‘add_guest’, array(

$toUserId,$guestId,$source,

));$list = $guests->call(‘get_guest_list’, array(

$forUserId, $limit,

$offset,)); // $list = array(array(guestId, time, source), …)

Page 31: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

HTTP демоны

/chat/?userId=123/user/123

Page 32: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

• Быстрее PHP, в 10 раз!• > 50% запросов на балансер попадают к

демонам• Всего 7 серверов

HTTP демоны

Page 33: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Подводя итоги

• Нет преждевременной оптимизации• Нет трендам, да цифрам• Не бойтесь экспериментировать• Проверяйте все сами

Page 34: Фотострана, Дмитрий Смирнов

Интересно? Заходи на http://job.fotostrana.ru

Вопросы

Спасибо за внимание!