Upgrade to Pro — share decks privately, control downloads, hide ads and more …

«Систематизация оптимизации» — Александр Малащицкий (Superjob)

D6757b8bae86f78fd914692bf49b79f2?s=47 Badoo Tech
September 21, 2019

«Систематизация оптимизации» — Александр Малащицкий (Superjob)

Badoo PHP Meetup #3

Александр поделится опытом покрытия метриками нагруженного приложения и развития системного подхода в поиске проблемных мест и их оптимизации.
Основные тезисы:

Чем плоха оптимизация без метрик, и почему Blackfire — не панацея;
С каких метрик начала команда, как их хранит и как чуть не утонула в их количестве;
К какому набору метрик пришли, и как он помогает находить проблемные места;
Как в Superjob используют PHPSpy для снятия профайлинга с продакшена, и почему профайлинг — ещё одна метрика;
Как сделать оптимизацию частью жизненного цикла разработки.

D6757b8bae86f78fd914692bf49b79f2?s=128

Badoo Tech

September 21, 2019
Tweet

Transcript

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

  2. Что такое SuperJob? 1 млн пользователей в день 25 млн

    резюме в базе 2 млн приглашений в месяц
  3. Как было раньше

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

  5. Pinba

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

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

  8. Письмо 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
  9. Оценка результата оптимизации

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

  11. Редизайн

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

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

  14. Apache JMeter

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

  16. Curl + Logger

  17. Curl + Logger

  18. Blackfire

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

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


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


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

  23. Blackfire: интерфейс

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

  25. Оптимизация бутстрапа CPU: 66.6ms Mem: 5.9M CPU: 38.8ms Mem: 4.3M

    -42% -28%
  26. Собираем метрики

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

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

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

  30. phpspy

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

  32. phpspy: флеймграф

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

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

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

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

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

  38. Анализ PHP кода

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

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

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

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

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

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

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

  46. Overhead от phpspy

  47. phpspy CPU overhead

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

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

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

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

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

  53. Спасибо!

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

    JMeter https://jmeter.apache.org/