Perl, и с чем его едят. Доклад нашего Главного Инженера...

41
У меня тоже есть свой modern Perl Нет ни одного пути не сделать это Александр Чистяков, главный инженер Git in Sky, 2014

description

30 мая состоялся большой съезд всех питерских айтишных митапов (регулярно встречающихся групп по той или иной IT теме). Наш ГИ (Главный Инженер) представлял там митап DevOps-40, который родился с участием нашей компании. Презентация была посвящена языку Perl и нашим двум крупным клиентам, которые используют приложения на нем в production…

Transcript of Perl, и с чем его едят. Доклад нашего Главного Инженера...

Page 1: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

У меня тоже естьсвой modern Perl

Нет ни одного пути не сделать это

Александр Чистяков, главный инженер Git in Sky,

2014

Page 2: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Сверим часы

§ > 2014-й§ > Perl

У меня тоже есть свой modern Perl. 2014

Page 3: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Пожалуйста, не расходитесь!

§ Предыдущий слайд не полностьюотражает мой опыт

§ Да, Perl сломан, и его нельзя починить(см. http://goo.gl/O7OS1X )

§ Однажды мы проехали 2600 километровна минивэне с вырванной стойкой - “сломан”не означает “не может передвигаться”

§ Кстати, мой ноутбук сломан :(

У меня тоже есть свой modern Perl. 2014

Page 4: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

В чем плюсы Perl

§ Perl-разработчика не удивишь ездой свырванной стойкой (впрочем, большинствоязыков на “P” такие)

§ Perl-разработчика легко найти — они всепоименно занесены в Красную книгу

§ У некоторых заказчиков сформированазащитно-подсознательная травматическаясвязь с Perl

У меня тоже есть свой modern Perl. 2014

Page 5: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Прекратите смеяться, вы не в цирке!

§ Как во все это ввязался я:§ Деньги§ Челлендж§ Если не я, то кто?§ Если я не умею эксплуатировать

продукты на Perl, что я тогда вообще умею?

У меня тоже есть свой modern Perl. 2014

Page 6: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Куда именно я ввязался

§ Setup.ru:§ Конструктор сайтов§ Моя роль — инженер по эксплуатации

§ AdCamp:

§ Мобильная рекламная сеть§ Моя роль — релиз-инженер, разработчик

У меня тоже есть свой modern Perl. 2014

Page 7: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

В дальнейшем роли перемешались

§ Мое глубокое убеждение:§ Невозможно эффективно эксплуатировать

проект, не принимая участия в его

разработке§ И наоборот

У меня тоже есть свой modern Perl. 2014

Page 8: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Традиционно приписываемые Perl проблемы

§ Perl сложно читать и понимать§ Perl «глючит и тормозит»§ ^ Леха, мы помним!§ Perl сдох§ (В качестве фокус-группы были использованы

участники элитного(tm) чата)

У меня тоже есть свой modern Perl. 2014

Page 9: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Начну со второго проекта

§ Мобильная рекламная сеть§ Оказывается, показ рекламы — достаточно сложная задача:

§ Запутанные бизнес-правила§ Интеграция с контрагентами, которые сами не знают,

чего хотят§ Необходимость релизиться часто и быстро§ Highload, что бы это ни значило

У меня тоже есть свой modern Perl. 2014

Page 10: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Взгляд разработчика, мнимые проблемы

§ Perl легко читать, если его писала не обезьяна§ К несчастью, многие Perl-программисты считают своим

долгом использовать какие-нибудь свои коронные вещи, понятные только им

§ К счастью, modern Perl это не мертвый верблюд,

а живые лоси, мыши и другие обитатели леса!

У меня тоже есть свой modern Perl. 2014

Page 11: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Modern Perl

§ Moose и производные:§ Всё то, что было в нормальных

ОО языках еще 10+ лет назад, и

чего нет в ядре языка до сих пор§ Миксины («роли»), method modifiers,

проперти, и т.п.

У меня тоже есть свой modern Perl. 2014

Page 12: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Проблемы становятся локальнее

§ Лично я быстро теряю контекст в ОО системах

на “скриптовых” (динамически типизированных)

языках (хочу, чтобы все было в одном файле)§ ^ Потому что пишу в ViM§ Кроме того, я помню, что объект в Perl — это просто

blessed hash, и все время нарушаю инкапсуляцию

У меня тоже есть свой modern Perl. 2014

Page 13: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Новые вызовы для modern Perl-разработчика

§ Highload -> C10K problem§ Кроме того, seasoned Perl developer'ам нравится решать

сложные, как им кажется, задачи§ Под сложными задачами они понимают погружение в

callback hell (Brooks is rolling in his grave and he is not even dead yet!)

§ К счастью, есть AnyEvent

У меня тоже есть свой modern Perl. 2014

Page 14: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

AnyEvent

§ Позволяет погрузиться в callback hell

совершенно незаметным для разработчика

образом§ Код отлично пишется и читается§ Разработчик ничего не подозревает

до выхода своего шедевра в продакшн

У меня тоже есть свой modern Perl. 2014

Page 15: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Взгляд эксплуатационщика

§ Выход в продакшн:§ Сервисы втыкают§ Все бегают и орут§ Никто не знает, что происходит

§ Спокойно, сейчас всё будет!

§ Нужно просто сделать профайлинг!

У меня тоже есть свой modern Perl. 2014

Page 16: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Как сделать профайлинг

§ Старый добрый PMP:§ http://poormansprofiler.org/§ По сути, старый добрый gdb + обертка на

shell§ (Почти) универсальный

cэмплирующий профайлер

У меня тоже есть свой modern Perl. 2014

Page 17: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Чего же мы ждем?

§ Собрали сэмплы, проанализировали§ Виновник найден, вот он:§ Perl_runops_standard§ Здесь приложение проводит больше

всего времени§ Этот вызов просто выполняет все

перловые опкоды ;(

У меня тоже есть свой modern Perl. 2014

Page 18: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Переходим к плану Б, он ведь есть?

§ Даже в такой старой экосистеме, как Java/JVM,

есть сэмплирующий профайлер§ Неужели в modern Perl его нет?§ СЮРПРИИИЗ!§ Мы соберем свой собственный, используя

схему из журнала “Радио”

У меня тоже есть свой modern Perl. 2014

Page 19: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Профайлер своими руками

§ Нам понадобятся:§ Активные датчики§ Агрегатор§ Коллектор/хранилище§ Что-то, что рисует графики§ Дэшборд

У меня тоже есть свой modern Perl. 2014

Page 20: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

StatsD/Graphite

§ Ничего изобретать не придется:§ StatsD — простой протокол обмена телеметрической

информацией§ Клиенты и серверы на любом языке, в том числе на Perl

и C (кстати, он сейчас сломан, я засабмитил патч)§ Graphite — RRD-like хранилище + инфраструктура для

рисования графиков

У меня тоже есть свой modern Perl. 2014

Page 21: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Дэшборд

§ Раньше я всегда использовал GDash (он хорошо скриптуется)§ Потом мне показали Grafana (спасибо, Андрюха!)§ Grafana вообще не скриптуется, но отлично конфигурируется

вручную прямо через веб§ Оказалось, что типичный шаблон работы с графиками в

сложном проекте предполагает довольно частые переконфигурирования — скриптовать долго

У меня тоже есть свой modern Perl. 2014

Page 22: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Промежуточный итог

§ В код относительно небольшой кровью внедрены таймеры

§ Теперь на продакшн есть красивые графики зависимости времени исполнения запроса от времени

§ Виновный найден и призван к порядку

У меня тоже есть свой modern Perl. 2014

Page 23: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Не очень-то призрачная угроза

§ Сложная бизнес-логика порождает ошибки*§ *коллеги-программисты, конечно же, а вовсе

не логика, но чем сложнее логика, тем больше ошибок

§ Шокирующее открытие: логи никто не читает!§ Лог-коллектор? Серьезно?

У меня тоже есть свой modern Perl. 2014

Page 24: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Давайте подумаем

§ Мы правда хотим из приложения писать плохо структурированную информацию в файл, потом разбивать этот файл на строки, пересылать их для анализа куда-то (где их, возможно, не примут из-за C10K+ problem), разбирать их там централизованно и там же искать корреляции?

§ youaredoingitwrong.jpg

У меня тоже есть свой modern Perl. 2014

Page 25: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Как же быть?

§ Ошибки надо классифицировать по месту их появления

§ Хорошая классификация ошибок — залог правильной интепретации результата

§ Например:§ rotator.total.errors.log_fatal_calls.rotator11-test-11081§ сервис-тип_ошибки-сервер-порт

У меня тоже есть свой modern Perl. 2014

Page 26: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Ура, счастье!

У меня тоже есть свой modern Perl. 2014

Page 27: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Callback hell strikes back

§ Odd number of hash elements in <some unknown module> at <some unknown string>

§ Сначала у этих загадочных надписей даже не было стектрейса! (а это похуже, чем вырванная вилка)

§ На предложение включить стектрейс коллеги-разработчики сказал, что Carp::Always течет!

§ (Забегая вперед — стектрейс не поможет)

У меня тоже есть свой modern Perl. 2014

Page 28: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Нам срочно нужен хороший memory profiler!

§ Требования:§ Работать в production окружении§ Ладно, хотя бы в 1/10 production окружения§ Кстати, про 1/10 production окружения:§ Отогнать 10% трафика со staging на production путем

зеркалирования было отличной идеей

У меня тоже есть свой modern Perl. 2014

Page 29: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

And we need to go deeper

§ Извините, я все время отвлекаюсь§ Как отзеркалировать 10% трафика с продакшна в

стейджинг?§ emproxy и аналоги — стильно, модно, молодежно!§ Старый добрый nginx!§ Wait...what?

У меня тоже есть свой modern Perl. 2014

Page 30: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Как это делается в nginx

§ Способ придуман коллегой @yavorovich_da, инженером по эксплуатации AdCamp

§ В nginx заводится отдельный апстрим, на который направляется 10% трафика

§ Этот апстрим всегда отвечает 503 с минимальным таймаутом, при этом проксируя запрос на staging

§ Боевой прокси, получая 503, идет к боевому сервису

У меня тоже есть свой modern Perl. 2014

Page 31: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Окей, теперь у нас есть тестовая площадка

§ Вернемся к memory profiler§ Где же он, где?§ Подозреваю, что в случае Perl — там же, где и

сэмплирующий профайлер, а значит, ответ мы уже знаем

§ Ответ — StatsD

У меня тоже есть свой modern Perl. 2014

Page 32: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Самолет своими руками

§ Нам понадобятся:§ perlbrew (по-вашему это будет RVM)§ Исходники Perl§ statsd-c-client (мой патч, кстати, принят)§ Небольшие изменения в аллокаторе Perl

У меня тоже есть свой modern Perl. 2014

Page 33: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Итого

§ http://goo.gl/FJqAhG§ Не многопоточное§ Места расстановки датчиков подобраны

экспериментально методом “работает-не трогай”

§ Но оно работает!

У меня тоже есть свой modern Perl. 2014

Page 34: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Краса и гордость

У меня тоже есть свой modern Perl. 2014

Page 35: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Некоторые случайные факты

§ StatsD-сервис придется устаовить на той же машине, совершенно незачем гонять 10-20 тысяч событий в секунду по сети

§ Реализация стектрейсов, используемая в AnyEvent, никуда не течет (в комментариях к ней как раз ругают Carp::Always)

§ Управление памятью в Perl — оно какое-то эээ...

У меня тоже есть свой modern Perl. 2014

Page 36: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Окей, включили стектрейсы

§ Вы помните, про callback hell, да?§ У нас в системе появляются неучтенные ошибки,

которые валятся в логи, который никто не читает§ Стектрейс при этом не говорит ни о чем§ Предупрежден — значит вооружен§ Выход: кастомный appender для Log4Perl, который

репортит счетчик строчек в StatsD

У меня тоже есть свой modern Perl. 2014

Page 37: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Кажется, деплоймент под контролем

§ Кстати, а как в Perl следить за сервисами?§ В Perl есть ubic§ Это такой bluepill (почти), но на Perl§ Что сделает ubic, если сервис умер?§ Через заданное время периодический

процесс форкнет еще один процесс, который стартует всех мертвецов (WTF?)

У меня тоже есть свой modern Perl. 2014

Page 38: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Синхронная модель vs асинхронная модель

§ У меня есть опыт переписывания сервиса отдачи файлов с синхронной модели на асинхронную

§ Лейтенси ВОЗРОСЛА (не верьте тем, кто говорит что асинхронная модель БЫСТРЕЕ)

§ Зато существенно упало потребление памяти§ И я стал контролировать все стадии процесса

(попробуйте в mod_perl вернуть из хэндлера неожиданный результат — будет смешно)

У меня тоже есть свой modern Perl. 2014

Page 39: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Выводы:

§ Мой modern Perl — это не только модули с CPAN и модные фреймворки

§ Но еще и молоток, при помощи которого можно заставить работать

§ Любое достаточно крупное животное

У меня тоже есть свой modern Perl. 2014

Page 40: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

Традиционный слайд

§ DevOps-40: Уберите детей от экранов!

У меня тоже есть свой modern Perl. 2014

Page 41: Perl, и с чем его едят. Доклад нашего Главного Инженера (ГИ) Александра Чистякова

С вами был Александр Чистяков,главный инженер Git in Sky

[email protected]://gitinsky.com

http://meetup.com/DevOps-40

Пожалуйста, ваши вопросы.

Спасибо за внимание!

http://devconf.ru/offers/ - ПРОГОЛОСУЙТЕ, ПОЖАЛУЙСТА,ЗА МОИ ЗАЯВКИ!