SlideShare a Scribd company logo
1 of 50
Архитектура проекта на 30М
            пользователей




Интересно? Заходи на http://job.fotostrana.ru   1 из 50
Фотострана?
                        Не, не слышал.




Интересно? Заходи на http://job.fotostrana.ru   2 из 50
— 35 000 000 зарегистрированных пользователей
  — 1 500 000 уникальных посетителей в день.
  — Больше 150 человек в команде
  — Входим в ТОП-20 сайтов рунета




Интересно? Заходи на http://job.fotostrana.ru   3 из 50
О чем расскажу?
  •   Общая архитектура и платформа
  •   Используемые технологии
  •   Обработка запросов
  •   Отдача статики
  •   Хранение данных
  •   Мониторинг



Интересно? Заходи на http://job.fotostrana.ru   4 из 50
Общие цифры
  •   Один дата-центр
  •   Более 200 физических серверов
  •   В пике суммарный трафик больше 3 Гбит/c
  •   70 Мб PHP кода
  •   3 Гб статики




Интересно? Заходи на http://job.fotostrana.ru   5 из 50
Разработка
  •   PHP, в основе лежал Zend Framework
  •   C(++) демоны и модули для PHP
  •   SVN (есть проблемы, хотим Git)
  •   Google Docs
  •   Redmine
  •   Fisheye
  •   Asana

Интересно? Заходи на http://job.fotostrana.ru   6 из 50
Платформа
  •   FreeBSD (местами Debian Linux)
  •   nginx
  •   Apache + mod_php + APC
  •   Memcached
  •   Percona server
  •   Собственные демоны




Интересно? Заходи на http://job.fotostrana.ru   7 из 50
Железо
  •   Средний сервер: 2 Xeon 16Gb RAM
  •   Сеть на Juniper
  •   300 Гб кластер memcached
  •   650 Гб базы данных MySQL
  •   750 Гб данных в памяти демонов
  •   50 Тб для хранения фотографий
  •   SSD где необходимо
  •   Сервера узкоспециализированные

Интересно? Заходи на http://job.fotostrana.ru   8 из 50
Релизы
  • Деплой раз в час (~30 секунд на 130
    серверов)
  • Есть QA отдел, но фактически тестирования
    практически нет
  • Новый функционал выкатываем на часть
    пользователей
  • PHP ошибки приходят в skype их автору 


Интересно? Заходи на http://job.fotostrana.ru   9 из 50
Мониторинг
  • Nagios + Cacti
  • Самописные модули мониторинга
  • Самописная система профилирования кода
    и запросов
  • Много смс уведомлений
  • Бизнес статистика/аналитика для
    менеджеров сервисов


Интересно? Заходи на http://job.fotostrana.ru   10 из 50
Резервное копирование
  • БД 3 раза в день
  • Демоны каждые 2 часа
  • Пользовательские фотографии раз в сутки




Интересно? Заходи на http://job.fotostrana.ru   11 из 50
Обработка запросов




Интересно? Заходи на http://job.fotostrana.ru   12 из 50
Интересно? Заходи на http://job.fotostrana.ru   13 из 50
Питомцы, профили, поиск…

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

Интересно? Заходи на http://job.fotostrana.ru      14 из 50
Питомцы             Профили               Поиск


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

Интересно? Заходи на http://job.fotostrana.ru           15 из 50
• 130 PHP серверов
                                                • 2.500 req/s
                                                • Среднее время
                                                  ответа 0.06 сек




Интересно? Заходи на http://job.fotostrana.ru    16 из 50
Управление серверами




Интересно? Заходи на http://job.fotostrana.ru   17 из 50
Отдача статики
  • Наша статика (css, js, swf, jpg…) из svn

  • Пользовательский контент (аватарки,
    фотки, превьюшки) – “Фотосхема”




Интересно? Заходи на http://job.fotostrana.ru   18 из 50
Содержимое статики:




                                            }
  • 800 css
  • 750 js
                                                      3 Гигабайта
  • 3200 swf
  • 48000 image

  • 5000 req/s
  • >1 Гбит/сек трафика в пике
Интересно? Заходи на http://job.fotostrana.ru   19 из 50
Сервер определяется
        на стороне PHP кода
        по IP клиента




Интересно? Заходи на http://job.fotostrana.ru   20 из 50
Интересно? Заходи на http://job.fotostrana.ru   21 из 50
Интересно? Заходи на http://job.fotostrana.ru   22 из 50
Интересное
  • Контроль версий статический файлов
  • Пробовали привязывать пользователей по
    географическому признаку
  • Lazyloader для динамической подгрузки js и
    css
  • 5 виртуальных субдоменов на каждый
    сервер


Интересно? Заходи на http://job.fotostrana.ru   23 из 50
Фотосхема
  • 14 Тб - объем пользовательских фотографий
  • +60 Гб (или 250.000) фотографий в сутки
  • 4000 req/s
  • >850 Мбит/сек трафика в пике




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




Интересно? Заходи на http://job.fotostrana.ru   25 из 50
Интересное
  • Проблема холодного старта
  • Файлы реально удаляются с диска




Интересно? Заходи на http://job.fotostrana.ru   26 из 50
Хранение данных
  •   MySQL
  •   Memcached
  •   Lemon – самописное key-value хранилище
  •   Демоны на C++




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

                                                          • 14 серверов
                                                          • 100.000 / мин SELECT
                                                          • 40.000 / мин UPDATE




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


Интересно? Заходи на http://job.fotostrana.ru             28 из 50
Интересное
  •   Можем на живую менять схему БД
  •   Используем pconnect
  •   Не используем транзакции
  •   Не используем JOIN и вторичные ключи
  •   Нет шардинга
  •   Особое внимание индексам и адекватности
      запросов


Интересно? Заходи на http://job.fotostrana.ru   29 из 50
Управление репликами




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

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




Интересно? Заходи на http://job.fotostrana.ru   31 из 50
Интересное
  •   Это не хранилище данных!
  •   90% данных – кэш выборок из базы как есть
  •   Использовали ketama, отказались
  •   Рестарт сервера раз в несколько месяцев
  •   Локи на memcached::add




Интересно? Заходи на http://job.fotostrana.ru   32 из 50
Подходим к NoSQL
  MySQL плохо делает 3 вещи:

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

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

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




Интересно? Заходи на http://job.fotostrana.ru   33 из 50
Решение – NoSQL.


                                                  Lemon
  Lemon:
  • Простое key-value хранилище
  • Все данные в памяти
  • Периодический дамп данных на диск
  • key = (string namespace, int64 key)
  • Шардинг как запуск нескольких независимых
  инстансов, namespace привязан к серверу.

Интересно? Заходи на http://job.fotostrana.ru   34 из 50
Время обработки запроса




Интересно? Заходи на http://job.fotostrana.ru   35 из 50
Демоны
  Что сделали:
  • Модуль PHP для взаимодействия с демонами
  • Разработали протокол взаимодействия
  • Своя бинарная сериализация данных



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

Интересно? Заходи на http://job.fotostrana.ru   36 из 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), …)


Интересно? Заходи на http://job.fotostrana.ru             37 из 50
HTTP демоны-серверы




                     /user/123                      /chat/?userId=123




Интересно? Заходи на http://job.fotostrana.ru   38 из 50
HTTP демоны
  • Быстрее PHP, в 10 раз!
  • > 50% запросов на балансер попадают к
    демонам
  • Всего 7 серверов




Интересно? Заходи на http://job.fotostrana.ru   39 из 50
Мониторинг
  • Профилирование PHP кода, запросов в БД,
    memcache и других источников данных
  • Единая система бизнес статистики для
    менеджеров сервисов




Интересно? Заходи на http://job.fotostrana.ru   40 из 50
Профилирование - CStat
  •   Модуль для PHP
  •   Все данные в разделяемой памяти
  •   Сбор данных со всех серверов (по крону) и сохранение в БД
  •   Похожа на pinba и XHprof

  Пример:
  <?
  CStatStartUrl($requestUrl);
  // some code
  CStatStopUrl($isError);

  CStatStartDB($mode, $dbName, $_method, $table);
  // execute mysql_query
  CStatStopDB($isError, $rowCount);



Интересно? Заходи на http://job.fotostrana.ru       41 из 50
Статистика по URL




Интересно? Заходи на http://job.fotostrana.ru   42 из 50
Кол-во запросов по URL




Интересно? Заходи на http://job.fotostrana.ru   43 из 50
Профайлер для разработчика




Интересно? Заходи на http://job.fotostrana.ru   44 из 50
Статистика
  •   Реализована на очередях в разделяемой памяти (на каждом PHP
      сервере)
  •   Сбор данных из очереди со всех серверов (по крону) и их обработка
  •   Минимальное влияние на производительность скрипта
  •   История значений хранится в базе в нескольких таблицах, где они
      сгруппированы по периоду (час, день, месяц).
  •   Есть возможность считать уников (например кол-во уникальных
      пользователей загрузивших сегодня фотографии)


  С точки зрения разработчика:
  <?
  Statistics::increment($statsType, $userId, $field, $value);

  // Statistics::increment(MAIN_STATS, 2407325, ‘photos_upload_count’, 18);



Интересно? Заходи на http://job.fotostrana.ru              45 из 50
SharedQueue сервер
  Реализация очереди сообщений в оперативной памяти.

  • Демон на скриптовом сервере
  • Модуль для PHP
  • На данный момент 200 очередей

  Методы
  <?
  $result = SharedQueue::push($queueIndex, $data);

  $allData = SharedQueue::popAll($queueIndex, $serverList);



Интересно? Заходи на http://job.fotostrana.ru    46 из 50
Интерфейс статистики




Интересно? Заходи на http://job.fotostrana.ru   47 из 50
Интерфейс статистики




Интересно? Заходи на http://job.fotostrana.ru   48 из 50
Подводя итоги
  •   Нет преждевременной оптимизации
  •   Нет трендам, да цифрам
  •   Не бойтесь экспериментировать
  •   Проверяйте все сами
  •   Включайте мозг 




Интересно? Заходи на http://job.fotostrana.ru   49 из 50
Спасибо за внимание!




                             Вопросы


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

More Related Content

What's hot

Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"Yandex
 
Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поискAndrew Aksyonoff
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Andrew Mayorov
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...GeeksLab Odessa
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуАлександр Ежов
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»e-Legion
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Ontico
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaRoman Zykov
 
Илья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comИлья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comOntico
 
Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10OWASP Kyiv
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 

What's hot (19)

Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
 
Про качественный поиск
Про качественный поискПро качественный поиск
Про качественный поиск
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Haritonov
HaritonovHaritonov
Haritonov
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
CodeFest 2013. Иванов В. — Уменьшение расхода оперативной памяти в Java-прило...
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
 
Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»Юрий Буянов «Архитектура Goozy»
Юрий Буянов «Архитектура Goozy»
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 
Электронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark ScalaЭлектронная коммерция: от Hadoop к Spark Scala
Электронная коммерция: от Hadoop к Spark Scala
 
Илья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comИлья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.com
 
Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10Ihor Bliumental – Is There Life Outside OWASP Top-10
Ihor Bliumental – Is There Life Outside OWASP Top-10
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 

Viewers also liked

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложенийYandex
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...IT-Portfolio
 
Highload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексыHighload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексыPavel Egorov
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun PankovOntico
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...IT-Portfolio
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...IT-Portfolio
 
как строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы таксикак строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы таксиAndrew Minkin
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Ontico
 
Пишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камниПишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камниendeveit
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Badoo Development
 
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)Ontico
 

Viewers also liked (15)

13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 
2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений2013 09 17 архитектура веб-приложений
2013 09 17 архитектура веб-приложений
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
 
Highload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексыHighload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексы
 
Highload Begun Pankov
Highload Begun PankovHighload Begun Pankov
Highload Begun Pankov
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
 
как строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы таксикак строить архитектуру для отказоустойчивой службы такси
как строить архитектуру для отказоустойчивой службы такси
 
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
Twisted Framework - фреймворк для написания сетевых приложений на Python (Анд...
 
Пишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камниПишем свой сервис-агрегатор: архитектура, подводные камни
Пишем свой сервис-агрегатор: архитектура, подводные камни
 
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)Использование Hadoop в Badoo, Валерий Старынин (Badoo)
Использование Hadoop в Badoo, Валерий Старынин (Badoo)
 
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
 
Testing at Spotify
Testing at SpotifyTesting at Spotify
Testing at Spotify
 

Similar to 13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура проекта на 30 млн. пользователей", Дмитрий Смирнов (Фотострана)

Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Yandex
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruodnoklassniki.ru
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Ontico
 
Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Ontico
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Dmitry Degtyarev
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенкоYandex
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенкоYandex
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюринpgdayrussia
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Fwdays
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновOntico
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...Ontico
 
Конкурентная Разведка в Интернете
Конкурентная Разведка в ИнтернетеКонкурентная Разведка в Интернете
Конкурентная Разведка в ИнтернетеPositive Hack Days
 
Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...
Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...
Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...Exiterra Digital Agency 360º
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Ontico
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011CodeCamp
 

Similar to 13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура проекта на 30 млн. пользователей", Дмитрий Смирнов (Фотострана) (20)

Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"Алексей Захаров "Архитектура Яндекс.Фоток"
Алексей Захаров "Архитектура Яндекс.Фоток"
 
Cистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ruCистема внутренней статистики Odnoklassniki.ru
Cистема внутренней статистики Odnoklassniki.ru
 
Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"Дмитрий Дегтярев, "Хабикаса"
Дмитрий Дегтярев, "Хабикаса"
 
Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...Применение статистических методов и инструментов для анализа производительнос...
Применение статистических методов и инструментов для анализа производительнос...
 
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
Migrating from PHP/MySQL to Redis/Lua, my talk on High load++ (Russian)
 
20131105 романенко
20131105 романенко20131105 романенко
20131105 романенко
 
20131112федорроманенко
20131112федорроманенко20131112федорроманенко
20131112федорроманенко
 
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил ТюринPG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
PG Day'14 Russia, PostgreSQL в avito.ru, Михаил Тюрин
 
Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"Andrew Aksyonoff "Архитектура вокруг поиска"
Andrew Aksyonoff "Архитектура вокруг поиска"
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только одинSECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
SECON'2016. Сергей Аверин. Javascript-фреймворки:
 должен остаться только один
 
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только одинSECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
SECON'2016. Аверин Сергей, Javascript-фреймворки:
 должен остаться только один
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
 
Конкурентная Разведка в Интернете
Конкурентная Разведка в ИнтернетеКонкурентная Разведка в Интернете
Конкурентная Разведка в Интернете
 
Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...
Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...
Александр Садовский "Хороший веб-поиск для веб-мастеров" на конференции Optim...
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 
YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011YuryByyanov (e-legion) @ CodeCamp2011
YuryByyanov (e-legion) @ CodeCamp2011
 

More from IT-Portfolio

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...IT-Portfolio
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...IT-Portfolio
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...IT-Portfolio
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...IT-Portfolio
 

More from IT-Portfolio (7)

16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Highload...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Несколько...
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Шардинг в...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Инженерны...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Особенности р...
 

13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура проекта на 30 млн. пользователей", Дмитрий Смирнов (Фотострана)

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

Editor's Notes

  1. Не хватает DNS с round-robin (долго жили с ns от reg.ru) 2 х nginx (как они были резервированы) Возможно что отдельных слайдов про разбиение вообще не нужно.