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

«Мёртвый код: найти и обезвредить» — Данил Мухаметзянов, Badoo

Badoo Tech
February 15, 2020

«Мёртвый код: найти и обезвредить» — Данил Мухаметзянов, Badoo

Очередная встреча сообщества PHP-разработчиков в офисе Badoo.

Главная проблема легаси, которую мы решаем, — это то, что инженеры бесполезно тратят время на чтение мёртвого кода.

Причины его появления в новом коде — интенсивная продуктовая разработка с поддержкой API для сотен версий различных клиентских приложений.

Данил расскажет, какие меры мы предпринимаем, чтобы контролировать процесс появления не вызываемого в бою кода:

— как заботимся об удалении завершенных А/Б тестов
— контролируем все доступные версии клиентов
— поддерживаем чистоту API
— автоматически находим мертвый код и информируем об этом разработчиков

Badoo Tech

February 15, 2020
Tweet

More Decks by Badoo Tech

Other Decks in Programming

Transcript

  1. 1. Процессные • A/B тестирование • Многообразие клиентов • Фиче

    флаги 2. Исторические • Легаси Источники
  2. • Все продуктовые идеи проходят процедуру тестирования • 200 активных

    тестов • 2000 завершившихся тестов Процессные источники A/B Тестирование
  3. Клиент Сервер Я поддерживаю видеостримиг. Включить? Спасибо.
 Да / Нет

    300 Application features Процессные источники: Фиче флаги
  4. Недостатки xhprof • Требует изменения php кода • Дублирование данных

    • Человеческий фактор • Сложность изменения Источники: Легаси
  5. Методы: требования • Минимальные накладные расходы • Не требует изменения

    php кода • Работает везде (fpm / cli) • Обрабатывает форки • Сэмплирование из коробки • Форсирование из кода Источники: Легаси
  6. Методы: требования • Минимальные накладные расходы • Не требует изменения

    php кода • Работает везде (fpm / cli) • Обрабатывает форки • Сэмплирование из коробки • Форсирование из кода funcmap.so Источники: Легаси
  7. Принцип работы • RINIT • выставляем флаг сбора данных •

    создаем HashTable • инициализируем таймер • MSHUTDOWN • пишем данные из HashTable • Подменяем zend_execute_ex Источники: Легаси
  8. Конфигурация enabled = 1 logfile = /local/logs/funcmap/data_%pid%.log probability = 0

    ..100 flush_interval_sec = 200 funcmap_enabled(bool $flag) Источники: Легаси
  9. Альтернативы krakjoe/tombs • Отсутствие семплирования • Разделяемая память • Плохо

    учтена работа в cli • Сложность постобработки Источники: Легаси
  10. • Продумайте флоу удаления a/b тестов • Контролируйте устаревания нативных

    клиентов • Чистота API ведет к упрощению кода • Можно автоматизировать процесс поиска мертвого кода Выводы
  11. • github.com/badoo/funcmap • Highload: Как мы поддерживаем 100 разных версий

    клиентов в Badoo / Ярослав Голуб • Habr: Как устроено сплит-тестирование в Badoo • Tombs by Joe Watkins Ссылки