SlideShare a Scribd company logo
«Грабли» при масштабировании
       веб-приложения




  или «что происходит при росте с 1М до 80М хитов в сутки».
     Евгений Коковихин, ведущий разработчик Wapstart.
Кто мы?

• Компания WapStart – владелец крупнейшей в России мобильной
  рекламной сети Plus1 WapStart и каталога мобильных сайтов
  Top WapStart.
• Компания оказывает услуги тысячам издателей мобильных
  сайтов и приложений.
• Ежемесячная рекламная емкость WapStart - свыше 2 млрд.
  показов, число уникальных посетителей - более 13 миллионов
  в месяц.
• Компания WapStart владеет передовыми технологиями
  таргетинга и анализа аудитории, позволяющими проводить
  рекламные кампании с высокой рентабельностью инвестиций.
                                            © Отдел маркетинга.
Эту картинку я нашел в интернете
… и эту
Задачи, которые решает plus1.wapstart.ru
•   Поиск подходящих баннеров для пользователя.
•   Сортировка баннеров по релевантности и стоимости.
•   Подсчет денег.
•   Администрирование баннеров и рекламных площадок.
•   Сбор и анализ статистики.
ПО, которое используются
                   в plus1.wapstart.ru

•   PHP 5.3 (5.4) / php-fpm
•   postgresql 9.2
•   nginx
•   memcache
•   Freebsd (fronts)
•   Debian (farms)
Конфигурация железа: было
Хорошо:                 мир
• Хорошо работает при
  небольшой нагрузке;
• Все очень просто.


Плохо:
• Разные требования
  к железу у разных
  ролей;
• Сложно отлавливать
  баги и искать узкие
  места из-за влияния
  других подсистем.
Конфигурация железа: стало
               мир         Хорошо:
                           • все еще просто;
                           • легко добавлять и
                             убирать железо;
                           • железо разделено по
                             ролям.

  Проблемы:                 Плохо:
  • сессии;                 • Вывод железа из
  • картинки /                продакшена
    пользовательские файлы;   в случае отказа
  • sql запросы,              не автоматизирован.
    модифицирующие данные
Конфигурация железа: инстансы
             мир
Статистика (1)
Хорошо:                   Плохо:
• выборки очень просты;   • медленно;
• все понятно;            • сложно удалять старые
                            сырые данные;
                          • сложно
                            масштабировать.

                          Проблемы:
                          • Однажды мы начали
                            писать быстрее, чем
                            смогли обрабатывать;
                          • Внешние ключи не
                            только полезны, но и
                            вредны.
Статистика (2)
   Хорошо:
   • выборки очень просты;
   • все понятно;
   Плохо:
   • Временные таблицы надо чистить;
Статистика (3)
Хорошо:
• Аггрегация работает годно;


Плохо:
• Данные в дневные таблицы попадают
  не одновременно с часовыми (переживем).
Биллинг: было
Утро:                                         Вечер:


 Рекламодатель                                Рекламодатель
   100 рублей                                   50 рублей

                  Владелец сайта                               Владелец сайта
                    100 рублей                                   120 рублей




Рекламодатель                                Рекламодатель
  150 рублей                                   70 рублей

                 Владелец сайта                               Владелец сайта
                   10 рублей                                    12 рублей




Рекламодатель                                Рекламодатель
  180 рублей                                   100 рублей

                 Владелец сайта                               Владелец сайта
                   20 рублей                                    30 рублей
Биллинг: стало

                Счет         сумма                              Счет     сумма
                User 1            1 000                         User 1        1 100

                User 2             100                          User 2         200

                User 3             100                          User 3         500

                System             150                          System        3 000

                …                    …                          …                …

                …                    …                          …                …




         time            Credit_bill_id   Debet_bill_id   Amount          comment

         …               User_1           User_2          100             за клики

         …               …                …               …               …


Проблема:
• Проводок слишком много.
Мониторим всё
1.   Состояние логов
2.   Аггрегация ошибок и отправка их почтой
3.   Цветные графики
4.   Особо критичные триггеры по sms.
Борьба за быстродействие:



•   клиенты хотят получать баннер быстро;
•   клиенты получают баннеры синхронно;
•   аренда оборудования - это дорого.
Борьба за быстродействие: было
                     Плохо:
      onPHP cache
       (memcache)    •Иногда ходим в базу;
                     •Используем родные объекты
                     onPHP – медленная сборка.
     DB (Postgres)

                     Проблема:
                     •Однажды оно перестало
                     помещаться в кеш.
Борьба за быстродействие: как хотели.
                  get model_id=42&gateway_id=1&region_id=199
                  VALUE model_id=42&gateway_id=1&region_id=199 0 256
                  a:2:{i:0;O:11:"PlainBanner":13:
                  {s:15:"PlainBannerid";i:31;s:17:"PlainBannername";N;s:18:
                  "PlainBannertitle";N;s:20:"PlainBannercontent";N;s:30:"Pl
                  ainBannersingleLineContent";N;s:17:"PlainBannerlink";N;s:
                  20:"PlainBannerstateId";N;s:23:"PlainBannercampaignId";N;
                  s:19:"PlainBannertypeId";N;s:21:"PlainBannerpictures";a:0
                  :{}s:25:"PlainBannerfakePictures";a:0:
       Мemcache   {}s:17:"PlainBannerfake";b:0;s:32:"PlainBannershowOnlyWit
                  hGraphic";N;}i:1;O:11:"PlainBanner":13:
                  {s:15:"PlainBannerid";i:42;s:17:"PlainBannername";N;s:18:
                  "PlainBannertitle";N;s:20:"PlainBannercontent";N;s:30:"Pl
                  ainBannersingleLineContent";N;s:17:"PlainBannerlink";N;s:
                  20:"PlainBannerstateId";N;s:23:"PlainBannercampaignId";N;
                  s:19:"PlainBannertypeId";N;s:21:"PlainBannerpictures";a:0
                  :{}s:25:"PlainBannerfakePictures";a:0:
                  {}s:17:"PlainBannerfake";b:0;s:32:"PlainBannershowOnlyWit
                  hGraphic";N;}}
                  END



      Не взлетело :(
Борьба за быстродействие:
     как получилось
                       Вот так
                       работает!
            Проблемы:
 Мemcache   •Разбиратель запроса все еще
            может попасть в базу;
            •Редкий траффик идет в базу
            целиком;
            •За преднаполненным кешем
            надо следить.
Борьба за быстродействие:
                       проект “рыба”!
Обычная работа:
                            •   Все хорошо, пока траффик
                                равномерный.
                            •   Любой редкий траффик идет в
                                базу целиком и делает плохо.
                            •   Много редкого траффика делает
                                очень плохо.
Пришла “Индия”:
Борьба за быстродействие:
                  проект “рыба”!




•   Никогда не ходим в базу.
•   Ключ нормализуется.
•   Вместо базы может быть любой “наполнятор”.
•   …, но иногда падает :(
Мониторинг (2)
          и как мы раньше жили без pinba?
•   Меряем именно то, что происходит на проде;
•   Меряем все, что происходит на проде;
•   Можем измерять бизнес-метрики;
•   Красивые графики.
Резюме:
•   Разработка – процесс итеративный.
•   Ошибки бывают, не бойтесь ошибаться.
•   Не надо думать на 3 года вперед, все равно все изменится.
•   Мониторинг – наше всё.
•   Сила в простых вещах. Когда все просто – это легко поддерживать
    и модифицировать.
Wapstart:
•   http://wapstart.ru/ https://plus1.wapstart.ru/
•   Продажи: sales@co.wapstart.ru
•   Разработка: dev@co.wapstart.ru
•   github: https://github.com/Wapstart
•   Habr: http://habrahabr.ru/company/wapstart/



                                                     Я:
                                                     •    Mail/jabber: dovg@dovg.ru
                                                     •    Github: https://github.com/dovg
                                                     •    Habr: http://habrahabr.ru/users/dovg/
                                                     •    Vk: http://vk.com/id2082364




                                      Вопросы?

More Related Content

What's hot

Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Badoo Development
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
Sergey Xek
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
Ontico
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
GeeksLab Odessa
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
Roman Dvornov
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
it-people
 
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Yandex
 
Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...
Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...
Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...
Дмитрий Шахов
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
CodeFest
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
Andrey Smirnov
 
Исерсон Илья. Золотая маска: как увеличить продажи, когда топ уже ваш
Исерсон Илья. Золотая маска: как увеличить продажи, когда топ уже вашИсерсон Илья. Золотая маска: как увеличить продажи, когда топ уже ваш
Исерсон Илья. Золотая маска: как увеличить продажи, когда топ уже ваш
Дмитрий Шахов
 
Как устроен поиск
Как устроен поискКак устроен поиск
Как устроен поискAndrew Aksyonoff
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Yandex
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Andrew Mayorov
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 
Илья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comИлья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.com
Ontico
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Ontico
 
Осваиваем 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
 
Скорость работы интернет магазина
Скорость работы интернет магазинаСкорость работы интернет магазина
Скорость работы интернет магазина
Тарасов Константин
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012Alex Chistyakov
 

What's hot (20)

Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
Доклад Сергея Аверина на DevConf 2013. "Распространенные ошибки применения ба...
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)Конструктор / Денис Паясь (Яндекс)
Конструктор / Денис Паясь (Яндекс)
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
Олег Мохов "Куда движется вёрстка и верстальщики Яндекса"
 
Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...
Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...
Петренко Дмитрий. Как построить серверное обеспечение для pbn без футпринтов ...
 
Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Remote Highload
Remote HighloadRemote Highload
Remote Highload
 
Исерсон Илья. Золотая маска: как увеличить продажи, когда топ уже ваш
Исерсон Илья. Золотая маска: как увеличить продажи, когда топ уже вашИсерсон Илья. Золотая маска: как увеличить продажи, когда топ уже ваш
Исерсон Илья. Золотая маска: как увеличить продажи, когда топ уже ваш
 
Как устроен поиск
Как устроен поискКак устроен поиск
Как устроен поиск
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.Синяя Борода. История одного проекта.
Синяя Борода. История одного проекта.
 
Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 
Илья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.comИлья Космодемьянский, PostgreSQL-Consulting.com
Илья Космодемьянский, PostgreSQL-Consulting.com
 
Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)Про качественный поиск (Андрей Аксенов)
Про качественный поиск (Андрей Аксенов)
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
 
Скорость работы интернет магазина
Скорость работы интернет магазинаСкорость работы интернет магазина
Скорость работы интернет магазина
 
Mysql replication DevConf 2012
Mysql replication DevConf 2012Mysql replication DevConf 2012
Mysql replication DevConf 2012
 

Similar to 13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при масштабировании, на которые очень легко наступить", Евгений Коковихин

E Kokovikhin - devconf 2012
E Kokovikhin - devconf 2012 E Kokovikhin - devconf 2012
E Kokovikhin - devconf 2012
Evgeny Kokovikhin
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
yaevents
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Yandex
 
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...CodeFest
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016
Roman Ivliev
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
Ontico
 
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEАртём Кудзев
 
Кругом обман или использование стандартных протоколов для нестандартных вещей
Кругом обман или использование стандартных протоколов для нестандартных вещейКругом обман или использование стандартных протоколов для нестандартных вещей
Кругом обман или использование стандартных протоколов для нестандартных вещей
Alexander Klestoff
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest
 
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
Ontico
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Sergey Platonov
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайт
Alexander Mazurov
 
Новая почта Рамблера (Андрей Шетухин)
Новая почта Рамблера (Андрей Шетухин)Новая почта Рамблера (Андрей Шетухин)
Новая почта Рамблера (Андрей Шетухин)Ontico
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
Alexander Syrotenko
 
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Yandex
 
Баннерокрутилка на Erlang
Баннерокрутилка на ErlangБаннерокрутилка на Erlang
Баннерокрутилка на ErlangArtyom Gavrichenkov
 
«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...
«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...
«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...MDDay_4
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услуга
SQADays_2009_Piter
 

Similar to 13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при масштабировании, на которые очень легко наступить", Евгений Коковихин (20)

E Kokovikhin - devconf 2012
E Kokovikhin - devconf 2012 E Kokovikhin - devconf 2012
E Kokovikhin - devconf 2012
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
Mihail Korepanov
Mihail KorepanovMihail Korepanov
Mihail Korepanov
 
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
Михаил Корепанов "Скорость рендеринга страниц: исследования, замеры, автомати...
 
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
CodeFest 2012. Ивлиев Р. — Аккуратно переезжаем, или тестирование в проектах ...
 
Всему своё время Highload Junior 2016
Всему своё время   Highload Junior  2016Всему своё время   Highload Junior  2016
Всему своё время Highload Junior 2016
 
Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)Всему своё время / Роман Ивлиев (Банки.ру)
Всему своё время / Роман Ивлиев (Банки.ру)
 
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IEКак сделать веб-карту, сохранить здоровье и возненавидеть IE
Как сделать веб-карту, сохранить здоровье и возненавидеть IE
 
Кругом обман или использование стандартных протоколов для нестандартных вещей
Кругом обман или использование стандартных протоколов для нестандартных вещейКругом обман или использование стандартных протоколов для нестандартных вещей
Кругом обман или использование стандартных протоколов для нестандартных вещей
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем SphinxCodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
 
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
Оптимизация производительности фронтенда / Игорь Алексеенко (HTML Academy)
 
Андрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кодаАндрей Карпов, Приватные байки от разработчиков анализатора кода
Андрей Карпов, Приватные байки от разработчиков анализатора кода
 
Построение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайтПостроение аналитического хранилища на 100 петабайт
Построение аналитического хранилища на 100 петабайт
 
Новая почта Рамблера (Андрей Шетухин)
Новая почта Рамблера (Андрей Шетухин)Новая почта Рамблера (Андрей Шетухин)
Новая почта Рамблера (Андрей Шетухин)
 
Little Service in 2h
Little Service in 2hLittle Service in 2h
Little Service in 2h
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
Олег Мохов "Куда идём мы с Пятачком, или О том, куда движется вёрстка и верст...
 
Баннерокрутилка на Erlang
Баннерокрутилка на ErlangБаннерокрутилка на Erlang
Баннерокрутилка на Erlang
 
«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...
«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...
«тестирование для программистов. или «есть ли жизнь без тестировщиков» ( рома...
 
Юрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услугаЮрий Цыганенко, QA как услуга
Юрий Цыганенко, QA как услуга
 

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
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
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
 
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
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
IT-Portfolio
 

More from IT-Portfolio (11)

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 веб-разработке, "Эксплуат...
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
 
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 веб-разработке, "Шардинг в...
 
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 веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 

13 октября, DEV {web} - конференция о Highload веб-разработке. "Грабли при масштабировании, на которые очень легко наступить", Евгений Коковихин

  • 1. «Грабли» при масштабировании веб-приложения или «что происходит при росте с 1М до 80М хитов в сутки». Евгений Коковихин, ведущий разработчик Wapstart.
  • 2. Кто мы? • Компания WapStart – владелец крупнейшей в России мобильной рекламной сети Plus1 WapStart и каталога мобильных сайтов Top WapStart. • Компания оказывает услуги тысячам издателей мобильных сайтов и приложений. • Ежемесячная рекламная емкость WapStart - свыше 2 млрд. показов, число уникальных посетителей - более 13 миллионов в месяц. • Компания WapStart владеет передовыми технологиями таргетинга и анализа аудитории, позволяющими проводить рекламные кампании с высокой рентабельностью инвестиций. © Отдел маркетинга.
  • 3. Эту картинку я нашел в интернете
  • 5. Задачи, которые решает plus1.wapstart.ru • Поиск подходящих баннеров для пользователя. • Сортировка баннеров по релевантности и стоимости. • Подсчет денег. • Администрирование баннеров и рекламных площадок. • Сбор и анализ статистики.
  • 6. ПО, которое используются в plus1.wapstart.ru • PHP 5.3 (5.4) / php-fpm • postgresql 9.2 • nginx • memcache • Freebsd (fronts) • Debian (farms)
  • 7. Конфигурация железа: было Хорошо: мир • Хорошо работает при небольшой нагрузке; • Все очень просто. Плохо: • Разные требования к железу у разных ролей; • Сложно отлавливать баги и искать узкие места из-за влияния других подсистем.
  • 8. Конфигурация железа: стало мир Хорошо: • все еще просто; • легко добавлять и убирать железо; • железо разделено по ролям. Проблемы: Плохо: • сессии; • Вывод железа из • картинки / продакшена пользовательские файлы; в случае отказа • sql запросы, не автоматизирован. модифицирующие данные
  • 10. Статистика (1) Хорошо: Плохо: • выборки очень просты; • медленно; • все понятно; • сложно удалять старые сырые данные; • сложно масштабировать. Проблемы: • Однажды мы начали писать быстрее, чем смогли обрабатывать; • Внешние ключи не только полезны, но и вредны.
  • 11. Статистика (2) Хорошо: • выборки очень просты; • все понятно; Плохо: • Временные таблицы надо чистить;
  • 12. Статистика (3) Хорошо: • Аггрегация работает годно; Плохо: • Данные в дневные таблицы попадают не одновременно с часовыми (переживем).
  • 13. Биллинг: было Утро: Вечер: Рекламодатель Рекламодатель 100 рублей 50 рублей Владелец сайта Владелец сайта 100 рублей 120 рублей Рекламодатель Рекламодатель 150 рублей 70 рублей Владелец сайта Владелец сайта 10 рублей 12 рублей Рекламодатель Рекламодатель 180 рублей 100 рублей Владелец сайта Владелец сайта 20 рублей 30 рублей
  • 14. Биллинг: стало Счет сумма Счет сумма User 1 1 000 User 1 1 100 User 2 100 User 2 200 User 3 100 User 3 500 System 150 System 3 000 … … … … … … … … time Credit_bill_id Debet_bill_id Amount comment … User_1 User_2 100 за клики … … … … … Проблема: • Проводок слишком много.
  • 15. Мониторим всё 1. Состояние логов 2. Аггрегация ошибок и отправка их почтой 3. Цветные графики 4. Особо критичные триггеры по sms.
  • 16. Борьба за быстродействие: • клиенты хотят получать баннер быстро; • клиенты получают баннеры синхронно; • аренда оборудования - это дорого.
  • 17. Борьба за быстродействие: было Плохо: onPHP cache (memcache) •Иногда ходим в базу; •Используем родные объекты onPHP – медленная сборка. DB (Postgres) Проблема: •Однажды оно перестало помещаться в кеш.
  • 18. Борьба за быстродействие: как хотели. get model_id=42&gateway_id=1&region_id=199 VALUE model_id=42&gateway_id=1&region_id=199 0 256 a:2:{i:0;O:11:"PlainBanner":13: {s:15:"PlainBannerid";i:31;s:17:"PlainBannername";N;s:18: "PlainBannertitle";N;s:20:"PlainBannercontent";N;s:30:"Pl ainBannersingleLineContent";N;s:17:"PlainBannerlink";N;s: 20:"PlainBannerstateId";N;s:23:"PlainBannercampaignId";N; s:19:"PlainBannertypeId";N;s:21:"PlainBannerpictures";a:0 :{}s:25:"PlainBannerfakePictures";a:0: Мemcache {}s:17:"PlainBannerfake";b:0;s:32:"PlainBannershowOnlyWit hGraphic";N;}i:1;O:11:"PlainBanner":13: {s:15:"PlainBannerid";i:42;s:17:"PlainBannername";N;s:18: "PlainBannertitle";N;s:20:"PlainBannercontent";N;s:30:"Pl ainBannersingleLineContent";N;s:17:"PlainBannerlink";N;s: 20:"PlainBannerstateId";N;s:23:"PlainBannercampaignId";N; s:19:"PlainBannertypeId";N;s:21:"PlainBannerpictures";a:0 :{}s:25:"PlainBannerfakePictures";a:0: {}s:17:"PlainBannerfake";b:0;s:32:"PlainBannershowOnlyWit hGraphic";N;}} END Не взлетело :(
  • 19. Борьба за быстродействие: как получилось Вот так работает! Проблемы: Мemcache •Разбиратель запроса все еще может попасть в базу; •Редкий траффик идет в базу целиком; •За преднаполненным кешем надо следить.
  • 20. Борьба за быстродействие: проект “рыба”! Обычная работа: • Все хорошо, пока траффик равномерный. • Любой редкий траффик идет в базу целиком и делает плохо. • Много редкого траффика делает очень плохо. Пришла “Индия”:
  • 21. Борьба за быстродействие: проект “рыба”! • Никогда не ходим в базу. • Ключ нормализуется. • Вместо базы может быть любой “наполнятор”. • …, но иногда падает :(
  • 22. Мониторинг (2) и как мы раньше жили без pinba? • Меряем именно то, что происходит на проде; • Меряем все, что происходит на проде; • Можем измерять бизнес-метрики; • Красивые графики.
  • 23. Резюме: • Разработка – процесс итеративный. • Ошибки бывают, не бойтесь ошибаться. • Не надо думать на 3 года вперед, все равно все изменится. • Мониторинг – наше всё. • Сила в простых вещах. Когда все просто – это легко поддерживать и модифицировать.
  • 24. Wapstart: • http://wapstart.ru/ https://plus1.wapstart.ru/ • Продажи: sales@co.wapstart.ru • Разработка: dev@co.wapstart.ru • github: https://github.com/Wapstart • Habr: http://habrahabr.ru/company/wapstart/ Я: • Mail/jabber: dovg@dovg.ru • Github: https://github.com/dovg • Habr: http://habrahabr.ru/users/dovg/ • Vk: http://vk.com/id2082364 Вопросы?