Slide 1

Slide 1 text

Систематизация оптимизации Александр Малащицкий ведущий разработчик команды «Платформа»

Slide 2

Slide 2 text

Что такое SuperJob? 1 млн пользователей в день 25 млн резюме в базе 2 млн приглашений в месяц

Slide 3

Slide 3 text

Как было раньше

Slide 4

Slide 4 text

Инструменты • Pinba

Slide 5

Slide 5 text

Pinba

Slide 6

Slide 6 text

Pinba: детализация

Slide 7

Slide 7 text

Инструменты • Pinba
 • Письмо

Slide 8

Slide 8 text

Письмо Top URL по кол-ву запросов Top requests ============ 7529 GET www.superjob.ru/resume/views-21813258.html 6952 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 6391 GET api.superjob.ru/2.11/resumes/received/?status=0&keywords=&count=100&page=0 5991 GET api.superjob.ru/2.0/notifications/?count=50&with_friends_resumes=1 5977 GET api.superjob.ru/2.0/resumes/received/?page=14&count=100&only_new_received=1&status=0&types= 5905 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 5649 GET api.superjob.ru/2.0/resumes/received/29411277/?page=0&count=100 5585 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 5581 GET api.superjob.ru/2.0/resumes/?town=12&payment_to=23000&age_from=18&age_to=35&count=100&perio 5491 GET api.superjob.ru/2.0/resumes/received/27727241/?status=0&page=0&count=100 5292 GET api.superjob.ru/2.11/resumes/?keyword=%D0%90%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%8 5261 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 5182 GET api.superjob.ru/2.0/resumes/?town=12&payment_to=23000&age_from=18&age_to=35&count=100&perio 4960 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 4797 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 4773 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 4686 GET api.superjob.ru/2.0/notifications/?count=50&with_friends_resumes=1 4242 GET api.superjob.ru/2.0/notifications/?count=50&with_friends_resumes=1 4065 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 3961 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 3904 GET www.superjob.ru/resume/search_resume.html?sbmit=1&show_refused=0&keywords%5B0%5D%5Bskwc%5D= 3881 GET api.superjob.ru/2.0/notifications/?count=50&with_friends_resumes=1 3840 GET api.superjob.ru/2.0/messages/list/?page=0&count=100 3782 GET www.superjob.ru/resume/search_resume.html?sbmit=1&show_refused=0&keywords%5B0%5D%5Bskwc%5D= 3779 GET www.superjob.ru/resume/search_resume.html?sbmit=1&show_refused=0&keywords%5B0%5D%5Bskwc%5D= 3754 GET api.superjob.ru/2.0/notifications/?count=50&with_friends_resumes=1 3702 GET www.superjob.ru/resume/search_resume.html?sbmit=1&detail_search=1&strict_type_of_work=&keyw

Slide 9

Slide 9 text

Оценка результата оптимизации

Slide 10

Slide 10 text

Инструменты • Pinba
 • Письмо
 • «На глазок»

Slide 11

Slide 11 text

Редизайн

Slide 12

Slide 12 text

Перевод сайта на новый API Старая версия Новая версия

Slide 13

Slide 13 text

Перевод сайта на новый API Старая версия Новая версия

Slide 14

Slide 14 text

Apache JMeter

Slide 15

Slide 15 text

Сравнение потребления ресурсов Старый Новый

Slide 16

Slide 16 text

Curl + Logger

Slide 17

Slide 17 text

Curl + Logger

Slide 18

Slide 18 text

Blackfire

Slide 19

Slide 19 text

Из чего состоит Blackfire

Slide 20

Slide 20 text

Из чего состоит Blackfire • Probe


Slide 21

Slide 21 text

Из чего состоит Blackfire • Probe
 • Агент


Slide 22

Slide 22 text

Из чего состоит Blackfire • Probe
 • Агент
 • Компаньон

Slide 23

Slide 23 text

Blackfire: интерфейс

Slide 24

Slide 24 text

Оптимизация фильтров «на глазок» 684 ms 376 ms

Slide 25

Slide 25 text

Оптимизация бутстрапа CPU: 66.6ms Mem: 5.9M CPU: 38.8ms Mem: 4.3M -42% -28%

Slide 26

Slide 26 text

Собираем метрики

Slide 27

Slide 27 text

Метрики: количество и скорость

Slide 28

Slide 28 text

Метрики: сумма

Slide 29

Slide 29 text

Метрики: детализация работы Полезная работа Начальная загрузка

Slide 30

Slide 30 text

phpspy

Slide 31

Slide 31 text

phpspy: стек-трейс

Slide 32

Slide 32 text

phpspy: флеймграф

Slide 33

Slide 33 text

Диаграмма до оптимизации

Slide 34

Slide 34 text

Лишнее соединение с базой данных

Slide 35

Slide 35 text

Диаграмма после оптимизации

Slide 36

Slide 36 text

Оптимизировали начальную загрузку

Slide 37

Slide 37 text

Использование сервисов PHP

Slide 38

Slide 38 text

Анализ PHP кода

Slide 39

Slide 39 text

Агрегированный флеймграф

Slide 40

Slide 40 text

Разбили по эндпоинтам

Slide 41

Slide 41 text

Диаграмма поиска вакансий

Slide 42

Slide 42 text

Диаграмма поиска вакансий 21%

Slide 43

Slide 43 text

Путь оптимизатора Графана phpspy Оптимизация

Slide 44

Slide 44 text

А точно нужен PROD?

Slide 45

Slide 45 text

Разница графов на разном окружении PROD DEV

Slide 46

Slide 46 text

Overhead от phpspy

Slide 47

Slide 47 text

phpspy CPU overhead

Slide 48

Slide 48 text

Что дали нам все эти исследования

Slide 49

Slide 49 text

Как в итоге оптимизировать?

Slide 50

Slide 50 text

Как в итоге оптимизировать? Измеряй 1

Slide 51

Slide 51 text

Как в итоге оптимизировать? Измеряй Анализируй 1 2

Slide 52

Slide 52 text

Как в итоге оптимизировать? Измеряй Анализируй Оценивай 1 2 3

Slide 53

Slide 53 text

Спасибо!

Slide 54

Slide 54 text

Ссылки на ресурсы Blackfire https://blackfire.io/ Phpspy https://github.com/adsr/phpspy Pinba http://pinba.org/ Apache JMeter https://jmeter.apache.org/