Architechture of a social network for 30M users
-
Upload
fotostrana -
Category
Internet
-
view
24 -
download
1
Transcript of Architechture of a social network for 30M users
![Page 1: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/1.jpg)
Интересно? Заходи на http://job.fotostrana.ru 1 из 50
Архитектура проекта на 30М пользователей
![Page 2: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/2.jpg)
Интересно? Заходи на http://job.fotostrana.ru 2 из 50
Фотострана?Не, не слышал.
![Page 3: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/3.jpg)
Интересно? Заходи на http://job.fotostrana.ru 3 из 50
— 35 000 000 зарегистрированных пользователей
— 1 500 000 уникальных посетителей в день.
— Больше 150 человек в команде
— Входим в ТОП-20 сайтов рунета
![Page 4: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/4.jpg)
Интересно? Заходи на http://job.fotostrana.ru 4 из 50
О чем расскажу?
• Общая архитектура и платформа• Используемые технологии• Обработка запросов• Отдача статики• Хранение данных• Мониторинг
![Page 5: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/5.jpg)
Интересно? Заходи на http://job.fotostrana.ru 5 из 50
Общие цифры
• Один дата-центр• Более 200 физических серверов• В пике суммарный трафик больше 3 Гбит/c• 70 Мб PHP кода• 3 Гб статики
![Page 6: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/6.jpg)
Интересно? Заходи на http://job.fotostrana.ru 6 из 50
Разработка
• PHP, в основе лежал Zend Framework• C(++) демоны и модули для PHP• SVN (есть проблемы, хотим Git)• Google Docs• Redmine• Fisheye• Asana
![Page 7: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/7.jpg)
Интересно? Заходи на http://job.fotostrana.ru 7 из 50
Платформа
• FreeBSD (местами Debian Linux)• nginx• Apache + mod_php + APC• Memcached• Percona server• Собственные демоны
![Page 8: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/8.jpg)
Интересно? Заходи на http://job.fotostrana.ru 8 из 50
Железо
• Средний сервер: 2 Xeon 16Gb RAM• Сеть на Juniper• 300 Гб кластер memcached• 650 Гб базы данных MySQL• 750 Гб данных в памяти демонов • 50 Тб для хранения фотографий• SSD где необходимо• Сервера узкоспециализированные
![Page 9: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/9.jpg)
Интересно? Заходи на http://job.fotostrana.ru 9 из 50
Релизы
• Деплой раз в час (~30 секунд на 130 серверов)
• Есть QA отдел, но фактически тестирования практически нет
• Новый функционал выкатываем на часть пользователей
• PHP ошибки приходят в skype их автору
![Page 10: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/10.jpg)
Интересно? Заходи на http://job.fotostrana.ru 10 из 50
Мониторинг
• Nagios + Cacti• Самописные модули мониторинга• Самописная система профилирования кода
и запросов• Много смс уведомлений• Бизнес статистика/аналитика для
менеджеров сервисов
![Page 11: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/11.jpg)
Интересно? Заходи на http://job.fotostrana.ru 11 из 50
Резервное копирование
• БД 3 раза в день• Демоны каждые 2 часа• Пользовательские фотографии раз в сутки
![Page 12: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/12.jpg)
Интересно? Заходи на http://job.fotostrana.ru 12 из 50
Обработка запросов
![Page 13: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/13.jpg)
Интересно? Заходи на http://job.fotostrana.ru 13 из 50
![Page 14: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/14.jpg)
Интересно? Заходи на http://job.fotostrana.ru 14 из 50
Нет разбиения на группы
Питомцы, профили, поиск…
![Page 15: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/15.jpg)
Интересно? Заходи на http://job.fotostrana.ru 15 из 50
Есть разбиение на группы
Питомцы Профили Поиск
![Page 16: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/16.jpg)
Интересно? Заходи на http://job.fotostrana.ru 16 из 50
• 130 PHP серверов• 2.500 req/s• Среднее время
ответа 0.06 сек
![Page 17: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/17.jpg)
Интересно? Заходи на http://job.fotostrana.ru 17 из 50
Управление серверами
![Page 18: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/18.jpg)
Интересно? Заходи на http://job.fotostrana.ru 18 из 50
Отдача статики
• Наша статика (css, js, swf, jpg…) из svn
• Пользовательский контент (аватарки, фотки, превьюшки) – “Фотосхема”
![Page 19: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/19.jpg)
Интересно? Заходи на http://job.fotostrana.ru 19 из 50
Содержимое статики:• 800 css• 750 js• 3200 swf• 48000 image
• 5000 req/s• >1 Гбит/сек трафика в пике
} 3 Гигабайта
![Page 20: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/20.jpg)
Интересно? Заходи на http://job.fotostrana.ru 20 из 50
Сервер определяется
на стороне PHP кода
по IP клиента
![Page 21: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/21.jpg)
Интересно? Заходи на http://job.fotostrana.ru 21 из 50
![Page 22: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/22.jpg)
Интересно? Заходи на http://job.fotostrana.ru 22 из 50
![Page 23: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/23.jpg)
Интересно? Заходи на http://job.fotostrana.ru 23 из 50
Интересное
• Контроль версий статический файлов• Пробовали привязывать пользователей по
географическому признаку• Lazyloader для динамической подгрузки js и
css• 5 виртуальных субдоменов на каждый
сервер
![Page 24: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/24.jpg)
Интересно? Заходи на http://job.fotostrana.ru 24 из 50
Фотосхема
• 14 Тб - объем пользовательских фотографий• +60 Гб (или 250.000) фотографий в сутки
• 4000 req/s• >850 Мбит/сек трафика в пике
![Page 25: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/25.jpg)
Интересно? Заходи на http://job.fotostrana.ru
Фотосхема
25 из 50
![Page 26: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/26.jpg)
Интересно? Заходи на http://job.fotostrana.ru 26 из 50
Интересное
• Проблема холодного старта• Файлы реально удаляются с диска
![Page 27: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/27.jpg)
Интересно? Заходи на http://job.fotostrana.ru 27 из 50
Хранение данных
• MySQL• Memcached• Lemon – самописное key-value хранилище• Демоны на C++
![Page 28: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/28.jpg)
Интересно? Заходи на http://job.fotostrana.ru 28 из 50
картинка про alter таблички на 30кк записей (15Гбайт)
• 14 серверов• 100.000 / мин SELECT• 40.000 / мин UPDATE
MySQL
![Page 29: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/29.jpg)
Интересно? Заходи на http://job.fotostrana.ru 29 из 50
Интересное
• Можем на живую менять схему БД• Используем pconnect• Не используем транзакции• Не используем JOIN и вторичные ключи• Нет шардинга• Особое внимание индексам и адекватности
запросов
![Page 30: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/30.jpg)
Интересно? Заходи на http://job.fotostrana.ru 30 из 50
Управление репликами
![Page 31: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/31.jpg)
Интересно? Заходи на http://job.fotostrana.ru 31 из 50
• 5 серверов• 300 Гбайт RAM• 32.000 req/s
Memcached
![Page 32: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/32.jpg)
Интересно? Заходи на http://job.fotostrana.ru 32 из 50
Интересное
• Это не хранилище данных!• 90% данных – кэш выборок из базы как есть• Использовали ketama, отказались• Рестарт сервера раз в несколько месяцев• Локи на memcached::add
![Page 33: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/33.jpg)
Интересно? Заходи на http://job.fotostrana.ru 33 из 50
MySQL плохо делает 3 вещи:
• Удаление большого количества данных
• Очень частые изменения данных
• Частые выборки
Подходим к NoSQL
![Page 34: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/34.jpg)
Интересно? Заходи на http://job.fotostrana.ru 34 из 50
Решение – NoSQL.
Lemon
Lemon:• Простое key-value хранилище• Все данные в памяти• Периодический дамп данных на диск• key = (string namespace, int64 key)• Шардинг как запуск нескольких независимых инстансов, namespace привязан к серверу.
![Page 35: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/35.jpg)
Интересно? Заходи на http://job.fotostrana.ru 35 из 50
Время обработки запроса
![Page 36: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/36.jpg)
Интересно? Заходи на http://job.fotostrana.ru 36 из 50
Демоны
Что сделали:• Модуль PHP для взаимодействия с демонами• Разработали протокол взаимодействия• Своя бинарная сериализация данных
Всего разных демонов больше 30:• Гости, контакты, мессенджер, питомцы, поиск,
встречи, голосвание, нотификации…
![Page 37: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/37.jpg)
Интересно? Заходи на http://job.fotostrana.ru 37 из 50
Пример: демон гостей<?$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 38: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/38.jpg)
Интересно? Заходи на http://job.fotostrana.ru 38 из 50
HTTP демоны-серверы
/chat/?userId=123/user/123
![Page 39: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/39.jpg)
Интересно? Заходи на http://job.fotostrana.ru 39 из 50
• Быстрее PHP, в 10 раз!• > 50% запросов на балансер попадают к
демонам• Всего 7 серверов
HTTP демоны
![Page 40: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/40.jpg)
Интересно? Заходи на http://job.fotostrana.ru 40 из 50
Мониторинг
• Профилирование PHP кода, запросов в БД, memcache и других источников данных
• Единая система бизнес статистики для менеджеров сервисов
![Page 41: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/41.jpg)
Интересно? Заходи на http://job.fotostrana.ru 41 из 50
Профилирование - CStat• Модуль для PHP• Все данные в разделяемой памяти• Сбор данных со всех серверов (по крону) и сохранение в БД• Похожа на pinba и XHprof
Пример: <?CStatStartUrl($requestUrl);// some codeCStatStopUrl($isError);
CStatStartDB($mode, $dbName, $_method, $table);// execute mysql_queryCStatStopDB($isError, $rowCount);
![Page 42: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/42.jpg)
Интересно? Заходи на http://job.fotostrana.ru 42 из 50
Статистика по URL
![Page 43: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/43.jpg)
Интересно? Заходи на http://job.fotostrana.ru 43 из 50
Кол-во запросов по URL
![Page 44: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/44.jpg)
Интересно? Заходи на http://job.fotostrana.ru 44 из 50
Профайлер для разработчика
![Page 45: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/45.jpg)
Интересно? Заходи на http://job.fotostrana.ru 45 из 50
Статистика• Реализована на очередях в разделяемой памяти (на каждом PHP
сервере)• Сбор данных из очереди со всех серверов (по крону) и их обработка• Минимальное влияние на производительность скрипта• История значений хранится в базе в нескольких таблицах, где они
сгруппированы по периоду (час, день, месяц).• Есть возможность считать уников (например кол-во уникальных
пользователей загрузивших сегодня фотографии)
С точки зрения разработчика: <?Statistics::increment($statsType, $userId, $field, $value);
// Statistics::increment(MAIN_STATS, 2407325, ‘photos_upload_count’, 18);
![Page 46: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/46.jpg)
Интересно? Заходи на http://job.fotostrana.ru 46 из 50
SharedQueue серверРеализация очереди сообщений в оперативной памяти.
• Демон на скриптовом сервере• Модуль для PHP• На данный момент 200 очередей
Методы <?$result = SharedQueue::push($queueIndex, $data);
$allData = SharedQueue::popAll($queueIndex, $serverList);
![Page 47: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/47.jpg)
Интересно? Заходи на http://job.fotostrana.ru 47 из 50
Интерфейс статистики
![Page 48: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/48.jpg)
Интересно? Заходи на http://job.fotostrana.ru 48 из 50
Интерфейс статистики
![Page 49: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/49.jpg)
Интересно? Заходи на http://job.fotostrana.ru 49 из 50
Подводя итоги
• Нет преждевременной оптимизации• Нет трендам, да цифрам• Не бойтесь экспериментировать• Проверяйте все сами• Включайте мозг
![Page 50: Architechture of a social network for 30M users](https://reader030.fdocuments.in/reader030/viewer/2022032620/55c5d3f1bb61ebad108b47b0/html5/thumbnails/50.jpg)
Интересно? Заходи на http://job.fotostrana.ru 50 из 50
Вопросы
Спасибо за внимание!