Фотострана, Дмитрий Смирнов
DESCRIPTION
Презентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге. Дмитрий Смирнов, Ведущий разработчик компании «Фотострана»: «30 млн. пользователей - как правильно строить архитектуру?»TRANSCRIPT
Интересно? Заходи на http://job.fotostrana.ru
Архитектура Фотостраны
Интересно? Заходи на http://job.fotostrana.ru
Фотоcтрана? Не, не слышал.
Интересно? Заходи на http://job.fotostrana.ru
— 31 500 000 зарегистрированных пользователей
— 1 400 000 уникальных посетителей в день.
— Больше 100 человек в команде
— Входим в ТОП-20 сайтов рунета
Интересно? Заходи на http://job.fotostrana.ru
О чем расскажу?
• Обработка запроса и генерация HTML
• Как мы отдаем статику
• Хранение данных
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Нет разбиения на группы
Питомцы, профили, поиск…
Интересно? Заходи на http://job.fotostrana.ru
Есть разбиение на группы
Питомцы Профили Поиск
Интересно? Заходи на http://job.fotostrana.ru
• 80 PHP серверов• 2.500 req/s• Среднее время
ответа 0.1 сек
Интересно? Заходи на http://job.fotostrana.ru
Отдача статики
• Наша статика (css, js, swf, jpg…)
• Фотосхема (пользовательские фотки, аватарки, превьюшки)
Интересно? Заходи на http://job.fotostrana.ru
Содержимое статики:• 800 css• 750 js• 3200 swf• 48000 image
• 5000 req/s• >1 Гбит/сек трафика в пике
} 3 Гигабайта
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Фотосхема
• 11 Тб - объем пользовательских фотографий
• 250.000 - новых фоток в сутки• 4000 req/s
Интересно? Заходи на http://job.fotostrana.ru
• Большие SATA диски• Полное дублирование файлов между серверами
• Кэш в RAM+ Кэш на SSD (для маленьких файлов)
• Кэш в RAM• Кэш на HDD
Фотосхема
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Хранение данных
• MySQL• Memcached• Lemon – самописная NoSQL• Демоны на C++
Интересно? Заходи на http://job.fotostrana.ru
картинка про alter таблички на 30кк записей (15Гбайт)
• 14 серверов• 110.000 / мин SELECT• 25.000 / мин UPDATE
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
• 5 серверов• 200 Гбайт RAM• 30.000 req/s
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
MySQL плохо делает 3 вещи:
• Удаление большого количества данных
• Очень частые изменения данных
• Частые выборки
Интересно? Заходи на http://job.fotostrana.ru
Решение – NoSQL.
Lemon
Lemon:• Простое key-value хранилище• Все данные в памяти• Периодический сброс данных на диск
Интересно? Заходи на http://job.fotostrana.ru
Интересно? Заходи на http://job.fotostrana.ru
Демоны
Что сделали:• Модуль для PHP• Разработали протокол взаимодействия
Всего больше 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), …)
Интересно? Заходи на http://job.fotostrana.ru
HTTP демоны
/chat/?userId=123/user/123
Интересно? Заходи на http://job.fotostrana.ru
• Быстрее PHP, в 10 раз!• > 50% запросов на балансер попадают к
демонам• Всего 7 серверов
HTTP демоны
Интересно? Заходи на http://job.fotostrana.ru
Подводя итоги
• Нет преждевременной оптимизации• Нет трендам, да цифрам• Не бойтесь экспериментировать• Проверяйте все сами
Интересно? Заходи на http://job.fotostrana.ru
Вопросы
Спасибо за внимание!