13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...IT-Portfolio
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура проекта на 30 млн. пользователей", Дмитрий Смирнов (ведущий разработчик Фотостраны).
Презентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге.
Дмитрий Смирнов, Ведущий разработчик компании «Фотострана»: «30 млн. пользователей - как правильно строить архитектуру?»
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...IT-Portfolio
13 октября, DEV {web} - конференция о Highload веб-разработке. «Грабли при масштабировании веб-приложения, на которые очень легко наступить», Евгений Коковихин (системный архитектор WapStart)
Аннотация
Что происходит при росте приложения с 1М до 50М хитов в сутки. С какими проблемами можно столкнуться, когда серверов становится больше одного. О чем важно помнить при проектировании приложения, способного масштабироваться.
Подробно
Когда мы сделали первую публичную версию plus1.wapstart.ru, она помещалась на один сервер и была соответствующим образом спроектирована. Потом нагрузка начала расти, а мы начинали наступать на грабли. В докладе будет рассказано о наиболее типичных "граблях", что возможно позволит избежать их другими разработчиками при проектировании приложения.
О чем пойдет речь (кратко):
* балансировка нагрузки;
* кеширование данных и прогрев кешей;
* работа с сетью;
* сессии;
* файлы, загружаемые пользователями;
* работа с СУБД.
Мы пишем на PHP, используем фреймворк OnPHP, СУБД Postgres.
Биография
Родился в несуществующем городе несуществующей страны. Первый мобильный телефон увидел в 1997 году. С детства любил программировать, последние 4 года посвятил развитию рекламы в мобильном веб. Своими глазами видел эволюцию мобильных устройств и предпочтений рекламодателей.
Наколеночная автоматизация SEO процессов - Крыжановский АлександрЛеонид Гроховский
Содержание:
- Сбор доноров с различных площадок
- Автоматический и полуавтоматический парсинг контента
- Сравниваем индексы поисковых систем
- Создаем макрос
- Анализ анкор-листа
Более подробную информацию Вы можете получить на полном курсе SEO: http://www.topexpert.pro/seo-kurs.html
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура п...IT-Portfolio
13 октября, DEV {web} - конференция о Highload веб-разработке. "Архитектура проекта на 30 млн. пользователей", Дмитрий Смирнов (ведущий разработчик Фотостраны).
Презентация с технической секции #BitByte - фестиваля профессионального развития, который прошел 19 мая в Санкт-Петербурге.
Дмитрий Смирнов, Ведущий разработчик компании «Фотострана»: «30 млн. пользователей - как правильно строить архитектуру?»
13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при ма...IT-Portfolio
13 октября, DEV {web} - конференция о Highload веб-разработке. «Грабли при масштабировании веб-приложения, на которые очень легко наступить», Евгений Коковихин (системный архитектор WapStart)
Аннотация
Что происходит при росте приложения с 1М до 50М хитов в сутки. С какими проблемами можно столкнуться, когда серверов становится больше одного. О чем важно помнить при проектировании приложения, способного масштабироваться.
Подробно
Когда мы сделали первую публичную версию plus1.wapstart.ru, она помещалась на один сервер и была соответствующим образом спроектирована. Потом нагрузка начала расти, а мы начинали наступать на грабли. В докладе будет рассказано о наиболее типичных "граблях", что возможно позволит избежать их другими разработчиками при проектировании приложения.
О чем пойдет речь (кратко):
* балансировка нагрузки;
* кеширование данных и прогрев кешей;
* работа с сетью;
* сессии;
* файлы, загружаемые пользователями;
* работа с СУБД.
Мы пишем на PHP, используем фреймворк OnPHP, СУБД Postgres.
Биография
Родился в несуществующем городе несуществующей страны. Первый мобильный телефон увидел в 1997 году. С детства любил программировать, последние 4 года посвятил развитию рекламы в мобильном веб. Своими глазами видел эволюцию мобильных устройств и предпочтений рекламодателей.
Наколеночная автоматизация SEO процессов - Крыжановский АлександрЛеонид Гроховский
Содержание:
- Сбор доноров с различных площадок
- Автоматический и полуавтоматический парсинг контента
- Сравниваем индексы поисковых систем
- Создаем макрос
- Анализ анкор-листа
Более подробную информацию Вы можете получить на полном курсе SEO: http://www.topexpert.pro/seo-kurs.html
In this last years a lot of high traffic web sites have been built in PHP. One of the main problem to design a distributed PHP architecture is how to share session data between multiple servers. In this presentation we showed the most used solutions to scale a PHP application along multiple servers. We presented different solutions to share session data using open source solutions (nfs, databases, memcached, redis, etc). Moreover we talk about Zend Server Cluster Manager, an enterprise ready Web Application Server for running and managing an HA Cluster of PHP servers.
Scaling a High Traffic Web Application: Our Journey from Java to PHP120bi
What makes an application scale? What should you worry about early on and what can wait?
Over the last 3 years, Achievers has learned many lessons and gained fundamental knowledge on scaling our SaaS platform. CTO Dr. Aris Zakinthinos will present and discuss the decisions we’ve made including language choice, server architecture, and much more; join us while we share tips, tricks, and things to absolutely avoid.
Throughout the evening you will have the opportunity to talk to the development team behind the Achievers Platform and ask questions on scaling best practices.
This is part of an introductory course to Big Data Tools for Artificial Intelligence. These slides introduce students to Apache Hadoop, DFS, and Map Reduce.
Redis is a NoSQL technology that rides a fine line between database and in-memory cache. Redis also offers "remote data structures", which gives it a significant advantage over other in-memory databases. This session will cover several PHP clients for Redis, and how to use them for caching, data modeling and generally improving application throughput.
High Performance Php My Sql Scaling TechniquesZendCon
This talk will discuss issues and solutions when attempting to scale PHP and MySQL to high volume websites (such as digg.com). It will discuss some of the problems at hand, and go into (at a high level) some of the solutions, such as using memcache, DB partitioning, etc. As well as how to handle these solutions within PHP.
В «Одноклассниках» логируются любые действия пользователей, любой вызов классов и методов, любые взаимодействия компонентов системы. Через несколько минут эти данные уже видны на графиках системы статистики. Данные собирает, хранит и обрабатывет хранилище данных, построенное на базе MS SQL Server.
Для адмистраторов, разработчиков и менеджеров построены универсальные интерактивные графики. Эти графики можно настроить так, чтобы они показывали любую подвыборку данных, агрегированных по периодам, начиная с 5 минут и заканчивая годом. Из графиков составлены тематические страницы (дэшборды), которые наглядно показывают состояние всего сайта или его отдельного компонента.
В докладе будут рассмотрены архитектура, основные компоненты и примененные алгоритмы обработки данных.
Хотите, чтобы ваш сайт вышел на первые места в поисковиках, но не знаете, с чего начать?
Базовый курс — для начинающих в SEO. Идеален для маркетологов, специалистов по рекламе, а также владельцев сайтов и бизнесов. Курс дает информацию о принципах работы поисковых систем и предлагает практическое руководство по завоеванию ТОП10 «Яндекса» и других поисковиков.
Программа семинара:
Понятие поискового продвижения сайта
Введение в поисковые системы (ПС):
- Поведение пользователей при работе с ПС
- Типизация поисковых запросов (+ геозависимость)
- Методика подбора запросов
- Введение в оценку эффективности запроса
- Анализ конкурентов
- Формирование стратегии продвижения<
Индексация сайта ПС
Маркетинговый подход к SEO
Основные методы поискового продвижения сайта:
- Ретроспектива методов поискового продвижения
- Основные фазы продвижения сайта
- Работа с внутренними факторами
- Работа с внешними факторами
- Введение в поведенческие факторы
- Апдейты и скорость продвижения сайта
- Штрафные санкции поисковых систем в отношении сайтов
- Если сайт не выходит в ТОП
Выполнение работ по продвижению сайта в системе SeoPult.
Подробнее: https://www.cybermarketing.ru
Яндекс.Фотки – современный фотохостинг. В докладе идет речь об общих архитектурных принципах его построения, загрузке и обработке фотографий, механизме распределенного выполнения заданий, API для взаимодействия с внешним миром.
Andrew Aksyonoff "Архитектура вокруг поиска"Fwdays
Начиная с определенного масштаба, вокруг любого базового поискового движка плюс рядом с ним неизбежно вырастает изрядная куча всяких интересных прослоек и сервисов. Особенно, когда одним лишь поиском по ключевым словам (либо вообще булевым, либо с простеньким ранжированием по формуле) дело ограничиваться перестает. Расскажу, как сегодня выглядит архитектура сервисов “вокруг и около поиска” у нас в Авито (числа и слова для привлечения внимания: 40M+ активных объявлений, тысячи RPS, ML ранжирование, пляски с анализом и доставкой данных, и всё такое).
"Применение потоковых алгоритмов для составления портрета аудитории".
Международная научно-практическая конференция International Conference on Big Data and its Applications (ICBDA) выросла из мероприятия Big Data Russia и проводится один раз в год, объединяя на одной площадке создателей новых технологий в области больших данных, представителей бизнеса, а также научных сотрудников и молодых ученых.
Организаторы: Rusbase и Global Innovation Labs.
Организаторы ICBDA благодарят Data-Centric Alliance (DCA) за поддержку мероприятия, а также отдельное спасибо Artox Media и NVIDIA.
In this last years a lot of high traffic web sites have been built in PHP. One of the main problem to design a distributed PHP architecture is how to share session data between multiple servers. In this presentation we showed the most used solutions to scale a PHP application along multiple servers. We presented different solutions to share session data using open source solutions (nfs, databases, memcached, redis, etc). Moreover we talk about Zend Server Cluster Manager, an enterprise ready Web Application Server for running and managing an HA Cluster of PHP servers.
Scaling a High Traffic Web Application: Our Journey from Java to PHP120bi
What makes an application scale? What should you worry about early on and what can wait?
Over the last 3 years, Achievers has learned many lessons and gained fundamental knowledge on scaling our SaaS platform. CTO Dr. Aris Zakinthinos will present and discuss the decisions we’ve made including language choice, server architecture, and much more; join us while we share tips, tricks, and things to absolutely avoid.
Throughout the evening you will have the opportunity to talk to the development team behind the Achievers Platform and ask questions on scaling best practices.
This is part of an introductory course to Big Data Tools for Artificial Intelligence. These slides introduce students to Apache Hadoop, DFS, and Map Reduce.
Redis is a NoSQL technology that rides a fine line between database and in-memory cache. Redis also offers "remote data structures", which gives it a significant advantage over other in-memory databases. This session will cover several PHP clients for Redis, and how to use them for caching, data modeling and generally improving application throughput.
High Performance Php My Sql Scaling TechniquesZendCon
This talk will discuss issues and solutions when attempting to scale PHP and MySQL to high volume websites (such as digg.com). It will discuss some of the problems at hand, and go into (at a high level) some of the solutions, such as using memcache, DB partitioning, etc. As well as how to handle these solutions within PHP.
В «Одноклассниках» логируются любые действия пользователей, любой вызов классов и методов, любые взаимодействия компонентов системы. Через несколько минут эти данные уже видны на графиках системы статистики. Данные собирает, хранит и обрабатывет хранилище данных, построенное на базе MS SQL Server.
Для адмистраторов, разработчиков и менеджеров построены универсальные интерактивные графики. Эти графики можно настроить так, чтобы они показывали любую подвыборку данных, агрегированных по периодам, начиная с 5 минут и заканчивая годом. Из графиков составлены тематические страницы (дэшборды), которые наглядно показывают состояние всего сайта или его отдельного компонента.
В докладе будут рассмотрены архитектура, основные компоненты и примененные алгоритмы обработки данных.
Хотите, чтобы ваш сайт вышел на первые места в поисковиках, но не знаете, с чего начать?
Базовый курс — для начинающих в SEO. Идеален для маркетологов, специалистов по рекламе, а также владельцев сайтов и бизнесов. Курс дает информацию о принципах работы поисковых систем и предлагает практическое руководство по завоеванию ТОП10 «Яндекса» и других поисковиков.
Программа семинара:
Понятие поискового продвижения сайта
Введение в поисковые системы (ПС):
- Поведение пользователей при работе с ПС
- Типизация поисковых запросов (+ геозависимость)
- Методика подбора запросов
- Введение в оценку эффективности запроса
- Анализ конкурентов
- Формирование стратегии продвижения<
Индексация сайта ПС
Маркетинговый подход к SEO
Основные методы поискового продвижения сайта:
- Ретроспектива методов поискового продвижения
- Основные фазы продвижения сайта
- Работа с внутренними факторами
- Работа с внешними факторами
- Введение в поведенческие факторы
- Апдейты и скорость продвижения сайта
- Штрафные санкции поисковых систем в отношении сайтов
- Если сайт не выходит в ТОП
Выполнение работ по продвижению сайта в системе SeoPult.
Подробнее: https://www.cybermarketing.ru
Яндекс.Фотки – современный фотохостинг. В докладе идет речь об общих архитектурных принципах его построения, загрузке и обработке фотографий, механизме распределенного выполнения заданий, API для взаимодействия с внешним миром.
Andrew Aksyonoff "Архитектура вокруг поиска"Fwdays
Начиная с определенного масштаба, вокруг любого базового поискового движка плюс рядом с ним неизбежно вырастает изрядная куча всяких интересных прослоек и сервисов. Особенно, когда одним лишь поиском по ключевым словам (либо вообще булевым, либо с простеньким ранжированием по формуле) дело ограничиваться перестает. Расскажу, как сегодня выглядит архитектура сервисов “вокруг и около поиска” у нас в Авито (числа и слова для привлечения внимания: 40M+ активных объявлений, тысячи RPS, ML ранжирование, пляски с анализом и доставкой данных, и всё такое).
"Применение потоковых алгоритмов для составления портрета аудитории".
Международная научно-практическая конференция International Conference on Big Data and its Applications (ICBDA) выросла из мероприятия Big Data Russia и проводится один раз в год, объединяя на одной площадке создателей новых технологий в области больших данных, представителей бизнеса, а также научных сотрудников и молодых ученых.
Организаторы: Rusbase и Global Innovation Labs.
Организаторы ICBDA благодарят Data-Centric Alliance (DCA) за поддержку мероприятия, а также отдельное спасибо Artox Media и NVIDIA.
SQL-боттлнеки: поиск и устранение узких мест при масштабировании, Михаил Нови...Mail.ru Group
Вы начинаете новый проект. Устанавливаете веб-фреймворк, ORM-фреймворк, пишете модели, делаете запросы к БД. Всё идет хорошо. Потом к вам приходит 100 000 пользователей — и проект падает под нагрузкой. Ваши действия?
Такая ситуация была у нас полгода назад. Я расскажу, как мы нашли из нее выход, покажу наши подходы к поиску узких мест, сервисы, которые в этом помогают. И поясню, почему ванильный ORM — это зло.
Презентация с Открытого семинара . Ведущий — Евгений Романовский, инженер-программист веб-студии СКБ Контур. Видео с выступления доступно тут http://it-eburg.com/text/article/opyt_raboty_s_freimvorkom_aspnet_mvc/
3. Интересно? Заходи на http://job.fotostrana.ru 3 из 50
— 35 000 000 зарегистрированных пользователей
— 1 500 000 уникальных посетителей в день.
— Больше 150 человек в команде
— Входим в ТОП-20 сайтов рунета
4. Интересно? Заходи на http://job.fotostrana.ru 4 из 50
О чем расскажу?
• Общая архитектура и платформа
• Используемые технологии
• Обработка запросов
• Отдача статики
• Хранение данных
• Мониторинг
5. Интересно? Заходи на http://job.fotostrana.ru 5 из 50
Общие цифры
• Один дата-центр
• Более 200 физических серверов
• В пике суммарный трафик больше 3 Гбит/c
• 70 Мб PHP кода
• 3 Гб статики
6. Интересно? Заходи на http://job.fotostrana.ru 6 из 50
Разработка
• PHP, в основе лежал Zend Framework
• C(++) демоны и модули для PHP
• SVN (есть проблемы, хотим Git)
• Google Docs
• Redmine
• Fisheye
• Asana
7. Интересно? Заходи на http://job.fotostrana.ru 7 из 50
Платформа
• FreeBSD (местами Debian Linux)
• nginx
• Apache + mod_php + APC
• Memcached
• Percona server
• Собственные демоны
8. Интересно? Заходи на http://job.fotostrana.ru 8 из 50
Железо
• Средний сервер: 2 Xeon 16Gb RAM
• Сеть на Juniper
• 300 Гб кластер memcached
• 650 Гб базы данных MySQL
• 750 Гб данных в памяти демонов
• 50 Тб для хранения фотографий
• SSD где необходимо
• Сервера узкоспециализированные
9. Интересно? Заходи на http://job.fotostrana.ru 9 из 50
Релизы
• Деплой раз в час (~30 секунд на 130
серверов)
• Есть QA отдел, но фактически тестирования
практически нет
• Новый функционал выкатываем на часть
пользователей
• PHP ошибки приходят в skype их автору
10. Интересно? Заходи на http://job.fotostrana.ru 10 из 50
Мониторинг
• Nagios + Cacti
• Самописные модули мониторинга
• Самописная система профилирования кода
и запросов
• Много смс уведомлений
• Бизнес статистика/аналитика для
менеджеров сервисов
11. Интересно? Заходи на http://job.fotostrana.ru 11 из 50
Резервное копирование
• БД 3 раза в день
• Демоны каждые 2 часа
• Пользовательские фотографии раз в сутки
23. Интересно? Заходи на http://job.fotostrana.ru 23 из 50
Интересное
• Контроль версий статический файлов
• Пробовали привязывать пользователей по
географическому признаку
• Lazyloader для динамической подгрузки js и
css
• 5 виртуальных субдоменов на каждый
сервер
24. Интересно? Заходи на http://job.fotostrana.ru 24 из 50
Фотосхема
• 14 Тб - объем пользовательских фотографий
• +60 Гб (или 250.000) фотографий в сутки
• 4000 req/s
• >850 Мбит/сек трафика в пике
26. Интересно? Заходи на http://job.fotostrana.ru 26 из 50
Интересное
• Проблема холодного старта
• Файлы реально удаляются с диска
27. Интересно? Заходи на http://job.fotostrana.ru 27 из 50
Хранение данных
• MySQL
• Memcached
• Lemon – самописное key-value хранилище
• Демоны на C++
28. Интересно? Заходи на http://job.fotostrana.ru 28 из 50
картинка про alter таблички на 30кк записей (15Гбайт)
• 14 серверов
• 100.000 / мин SELECT
• 40.000 / мин UPDATE
MySQL
29. Интересно? Заходи на http://job.fotostrana.ru 29 из 50
Интересное
• Можем на живую менять схему БД
• Используем pconnect
• Не используем транзакции
• Не используем JOIN и вторичные ключи
• Нет шардинга
• Особое внимание индексам и адекватности
запросов
31. Интересно? Заходи на http://job.fotostrana.ru 31 из 50
• 5 серверов
• 300 Гбайт RAM
• 32.000 req/s
Memcached
32. Интересно? Заходи на http://job.fotostrana.ru 32 из 50
Интересное
• Это не хранилище данных!
• 90% данных – кэш выборок из базы как есть
• Использовали ketama, отказались
• Рестарт сервера раз в несколько месяцев
• Локи на memcached::add
33. Интересно? Заходи на http://job.fotostrana.ru 33 из 50
MySQL плохо делает 3 вещи:
• Удаление большого количества данных
• Очень частые изменения данных
• Частые выборки
Подходим к NoSQL
34. Интересно? Заходи на http://job.fotostrana.ru 34 из 50
Решение – NoSQL.
Lemon
Lemon:
• Простое key-value хранилище
• Все данные в памяти
• Периодический дамп данных на диск
• key = (string namespace, int64 key)
• Шардинг как запуск нескольких независимых
инстансов, namespace привязан к серверу.
36. Интересно? Заходи на http://job.fotostrana.ru 36 из 50
Демоны
Что сделали:
• Модуль PHP для взаимодействия с демонами
• Разработали протокол взаимодействия
• Своя бинарная сериализация данных
Всего разных демонов больше 30:
• Гости, контакты, мессенджер, питомцы, поиск,
встречи, голосвание, нотификации…
37. Интересно? Заходи на 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), …)
38. Интересно? Заходи на http://job.fotostrana.ru 38 из 50
HTTP демоны-серверы
/chat/?userId=123/user/123
39. Интересно? Заходи на http://job.fotostrana.ru 39 из 50
• Быстрее PHP, в 10 раз!
• > 50% запросов на балансер попадают к
демонам
• Всего 7 серверов
HTTP демоны
40. Интересно? Заходи на http://job.fotostrana.ru 40 из 50
Мониторинг
• Профилирование PHP кода, запросов в БД,
memcache и других источников данных
• Единая система бизнес статистики для
менеджеров сервисов
41. Интересно? Заходи на http://job.fotostrana.ru 41 из 50
Профилирование - CStat
• Модуль для PHP
• Все данные в разделяемой памяти
• Сбор данных со всех серверов (по крону) и сохранение в БД
• Похожа на pinba и XHprof
Пример:
<?
CStatStartUrl($requestUrl);
// some code
CStatStopUrl($isError);
CStatStartDB($mode, $dbName, $_method, $table);
// execute mysql_query
CStatStopDB($isError, $rowCount);
44. Интересно? Заходи на http://job.fotostrana.ru 44 из 50
Профайлер для разработчика
45. Интересно? Заходи на http://job.fotostrana.ru 45 из 50
Статистика
• Реализована на очередях в разделяемой памяти (на каждом PHP
сервере)
• Сбор данных из очереди со всех серверов (по крону) и их обработка
• Минимальное влияние на производительность скрипта
• История значений хранится в базе в нескольких таблицах, где они
сгруппированы по периоду (час, день, месяц).
• Есть возможность считать уников (например кол-во уникальных
пользователей загрузивших сегодня фотографии)
С точки зрения разработчика:
<?
Statistics::increment($statsType, $userId, $field, $value);
// Statistics::increment(MAIN_STATS, 2407325, ‘photos_upload_count’, 18);
46. Интересно? Заходи на http://job.fotostrana.ru 46 из 50
SharedQueue сервер
Реализация очереди сообщений в оперативной памяти.
• Демон на скриптовом сервере
• Модуль для PHP
• На данный момент 200 очередей
Методы
<?
$result = SharedQueue::push($queueIndex, $data);
$allData = SharedQueue::popAll($queueIndex, $serverList);
49. Интересно? Заходи на http://job.fotostrana.ru 49 из 50
Подводя итоги
• Нет преждевременной оптимизации
• Нет трендам, да цифрам
• Не бойтесь экспериментировать
• Проверяйте все сами
• Включайте мозг
50. Интересно? Заходи на http://job.fotostrana.ru 50 из 50
Вопросы
Спасибо за внимание!
Editor's Notes
Не хватает DNS с round-robin (долго жили с ns от reg.ru)
2х nginx (как они были резервированы)
Возможно что отдельных слайдов про разбиение вообще не нужно.