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

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

Badoo Tech
September 21, 2019

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

Badoo PHP Meetup #3

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

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

Badoo Tech

September 21, 2019
Tweet

More Decks by Badoo Tech

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. Pinba

    View Slide

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

    View Slide

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

    • Письмо

    View Slide

  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

    View Slide

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

    View Slide

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

    • Письмо

    • «На глазок»

    View Slide

  11. Редизайн

    View Slide

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

    View Slide

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

    View Slide

  14. Apache JMeter

    View Slide

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

    View Slide

  16. Curl + Logger

    View Slide

  17. Curl + Logger

    View Slide

  18. Blackfire

    View Slide

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

    View Slide

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


    View Slide

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

    • Агент


    View Slide

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

    • Агент

    • Компаньон

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. phpspy

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  46. Overhead от phpspy

    View Slide

  47. phpspy CPU overhead

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  53. Спасибо!

    View Slide

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

    View Slide