SlideShare a Scribd company logo
1 of 41
Download to read offline
У меня тоже есть
свой modern Perl
Нет ни одного пути не сделать это
Александр Чистяков,
главный инженер Git in Sky,
2014
Сверим часы
§ > 2014-й
§ > Perl
У меня тоже есть свой modern Perl. 2014
Пожалуйста, не расходитесь!
§ Предыдущий слайд не полностью
отражает мой опыт
§ Да, Perl сломан, и его нельзя починить
(см. http://goo.gl/O7OS1X )
§ Однажды мы проехали 2600 километров
на минивэне с вырванной стойкой - “сломан”
не означает “не может передвигаться”
§ Кстати, мой ноутбук сломан :(
У меня тоже есть свой modern Perl. 2014
В чем плюсы Perl
§ Perl-разработчика не удивишь ездой с
вырванной стойкой (впрочем, большинство
языков на “P” такие)
§ Perl-разработчика легко найти — они все
поименно занесены в Красную книгу
§ У некоторых заказчиков сформирована
защитно-подсознательная травматическая
связь с Perl
У меня тоже есть свой modern Perl. 2014
Прекратите смеяться, вы не в цирке!
§ Как во все это ввязался я:
§ Деньги
§ Челлендж
§ Если не я, то кто?
§ Если я не умею эксплуатировать
продукты на Perl, что я тогда вообще умею?
У меня тоже есть свой modern Perl. 2014
Куда именно я ввязался
§ Setup.ru:
§ Конструктор сайтов
§ Моя роль — инженер по эксплуатации
§ AdCamp:
§ Мобильная рекламная сеть
§ Моя роль — релиз-инженер, разработчик
У меня тоже есть свой modern Perl. 2014
В дальнейшем роли перемешались
§ Мое глубокое убеждение:
§ Невозможно эффективно эксплуатировать
проект, не принимая участия в его
разработке
§ И наоборот
У меня тоже есть свой modern Perl. 2014
Традиционно приписываемые Perl проблемы
§ Perl сложно читать и понимать
§ Perl «глючит и тормозит»
§ ^ Леха, мы помним!
§ Perl сдох
§ (В качестве фокус-группы были использованы
участники элитного(tm) чата)
У меня тоже есть свой modern Perl. 2014
Начну со второго проекта
§ Мобильная рекламная сеть
§ Оказывается, показ рекламы — достаточно сложная задача:
§ Запутанные бизнес-правила
§ Интеграция с контрагентами, которые сами не знают,
чего хотят
§ Необходимость релизиться часто и быстро
§ Highload, что бы это ни значило
У меня тоже есть свой modern Perl. 2014
Взгляд разработчика, мнимые проблемы
§ Perl легко читать, если его писала не обезьяна
§ К несчастью, многие Perl-программисты считают своим
долгом использовать какие-нибудь свои коронные вещи,
понятные только им
§ К счастью, modern Perl это не мертвый верблюд,
а живые лоси, мыши и другие обитатели леса!
У меня тоже есть свой modern Perl. 2014
Modern Perl
§ Moose и производные:
§ Всё то, что было в нормальных
ОО языках еще 10+ лет назад, и
чего нет в ядре языка до сих пор
§ Миксины («роли»), method modifiers,
проперти, и т.п.
У меня тоже есть свой modern Perl. 2014
Проблемы становятся локальнее
§ Лично я быстро теряю контекст в ОО системах
на “скриптовых” (динамически типизированных)
языках (хочу, чтобы все было в одном файле)
§ ^ Потому что пишу в ViM
§ Кроме того, я помню, что объект в Perl — это просто
blessed hash, и все время нарушаю инкапсуляцию
У меня тоже есть свой modern Perl. 2014
Новые вызовы для 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
AnyEvent
§ Позволяет погрузиться в callback hell
совершенно незаметным для разработчика
образом
§ Код отлично пишется и читается
§ Разработчик ничего не подозревает
до выхода своего шедевра в продакшн
У меня тоже есть свой modern Perl. 2014
Взгляд эксплуатационщика
§ Выход в продакшн:
§ Сервисы втыкают
§ Все бегают и орут
§ Никто не знает, что происходит
§ Спокойно, сейчас всё будет!
§ Нужно просто сделать профайлинг!
У меня тоже есть свой modern Perl. 2014
Как сделать профайлинг
§ Старый добрый PMP:
§ http://poormansprofiler.org/
§ По сути, старый добрый gdb + обертка на
shell
§ (Почти) универсальный
cэмплирующий профайлер
У меня тоже есть свой modern Perl. 2014
Чего же мы ждем?
§ Собрали сэмплы, проанализировали
§ Виновник найден, вот он:
§ Perl_runops_standard
§ Здесь приложение проводит больше
всего времени
§ Этот вызов просто выполняет все
перловые опкоды ;(
У меня тоже есть свой modern Perl. 2014
Переходим к плану Б, он ведь есть?
§ Даже в такой старой экосистеме, как Java/JVM,
есть сэмплирующий профайлер
§ Неужели в modern Perl его нет?
§ СЮРПРИИИЗ!
§ Мы соберем свой собственный, используя
схему из журнала “Радио”
У меня тоже есть свой modern Perl. 2014
Профайлер своими руками
§ Нам понадобятся:
§ Активные датчики
§ Агрегатор
§ Коллектор/хранилище
§ Что-то, что рисует графики
§ Дэшборд
У меня тоже есть свой modern Perl. 2014
StatsD/Graphite
§ Ничего изобретать не придется:
§ StatsD — простой протокол обмена телеметрической
информацией
§ Клиенты и серверы на любом языке, в том числе на Perl
и C (кстати, он сейчас сломан, я засабмитил патч)
§ Graphite — RRD-like хранилище + инфраструктура для
рисования графиков
У меня тоже есть свой modern Perl. 2014
Дэшборд
§ Раньше я всегда использовал GDash (он хорошо скриптуется)
§ Потом мне показали Grafana (спасибо, Андрюха!)
§ Grafana вообще не скриптуется, но отлично конфигурируется
вручную прямо через веб
§ Оказалось, что типичный шаблон работы с графиками в
сложном проекте предполагает довольно частые
переконфигурирования — скриптовать долго
У меня тоже есть свой modern Perl. 2014
Промежуточный итог
§ В код относительно небольшой кровью
внедрены таймеры
§ Теперь на продакшн есть красивые
графики зависимости времени
исполнения запроса от времени
§ Виновный найден и призван к порядку
У меня тоже есть свой modern Perl. 2014
Не очень-то призрачная угроза
§ Сложная бизнес-логика порождает ошибки*
§ *коллеги-программисты, конечно же, а вовсе
не логика, но чем сложнее логика, тем
больше ошибок
§ Шокирующее открытие: логи никто не читает!
§ Лог-коллектор? Серьезно?
У меня тоже есть свой modern Perl. 2014
Давайте подумаем
§ Мы правда хотим из приложения писать плохо
структурированную информацию в файл,
потом разбивать этот файл на строки,
пересылать их для анализа куда-то (где их,
возможно, не примут из-за C10K+ problem),
разбирать их там централизованно и там
же искать корреляции?
§ youaredoingitwrong.jpg
У меня тоже есть свой modern Perl. 2014
Как же быть?
§ Ошибки надо классифицировать по месту их
появления
§ Хорошая классификация ошибок — залог
правильной интепретации результата
§ Например:
§ rotator.total.errors.log_fatal_calls.rotator11-test-11081
§ сервис-тип_ошибки-сервер-порт
У меня тоже есть свой modern Perl. 2014
Ура, счастье!
У меня тоже есть свой modern Perl. 2014
Callback hell strikes back
§ Odd number of hash elements in <some unknown
module> at <some unknown string>
§ Сначала у этих загадочных надписей даже не было
стектрейса! (а это похуже, чем вырванная вилка)
§ На предложение включить стектрейс коллеги-
разработчики сказал, что Carp::Always течет!
§ (Забегая вперед — стектрейс не поможет)
У меня тоже есть свой modern Perl. 2014
Нам срочно нужен хороший memory profiler!
§ Требования:
§ Работать в production окружении
§ Ладно, хотя бы в 1/10 production окружения
§ Кстати, про 1/10 production окружения:
§ Отогнать 10% трафика со staging на production путем
зеркалирования было отличной идеей
У меня тоже есть свой modern Perl. 2014
And we need to go deeper
§ Извините, я все время отвлекаюсь
§ Как отзеркалировать 10% трафика с продакшна в
стейджинг?
§ emproxy и аналоги — стильно, модно, молодежно!
§ Старый добрый nginx!
§ Wait...what?
У меня тоже есть свой modern Perl. 2014
Как это делается в nginx
§ Способ придуман коллегой @yavorovich_da,
инженером по эксплуатации AdCamp
§ В nginx заводится отдельный апстрим, на который
направляется 10% трафика
§ Этот апстрим всегда отвечает 503 с минимальным
таймаутом, при этом проксируя запрос на staging
§ Боевой прокси, получая 503, идет к боевому сервису
У меня тоже есть свой modern Perl. 2014
Окей, теперь у нас есть тестовая площадка
§ Вернемся к memory profiler
§ Где же он, где?
§ Подозреваю, что в случае Perl — там же, где и
сэмплирующий профайлер, а значит, ответ мы
уже знаем
§ Ответ — StatsD
У меня тоже есть свой modern Perl. 2014
Самолет своими руками
§ Нам понадобятся:
§ perlbrew (по-вашему это будет RVM)
§ Исходники Perl
§ statsd-c-client (мой патч, кстати, принят)
§ Небольшие изменения в аллокаторе Perl
У меня тоже есть свой modern Perl. 2014
Итого
§ http://goo.gl/FJqAhG
§ Не многопоточное
§ Места расстановки датчиков подобраны
экспериментально методом
“работает-не трогай”
§ Но оно работает!
У меня тоже есть свой modern Perl. 2014
Краса и гордость
У меня тоже есть свой modern Perl. 2014
Некоторые случайные факты
§ StatsD-сервис придется устаовить на той же машине,
совершенно незачем гонять 10-20 тысяч событий
в секунду по сети
§ Реализация стектрейсов, используемая в AnyEvent,
никуда не течет (в комментариях к ней как раз
ругают Carp::Always)
§ Управление памятью в Perl — оно какое-то эээ...
У меня тоже есть свой modern Perl. 2014
Окей, включили стектрейсы
§ Вы помните, про callback hell, да?
§ У нас в системе появляются неучтенные ошибки,
которые валятся в логи, который никто не читает
§ Стектрейс при этом не говорит ни о чем
§ Предупрежден — значит вооружен
§ Выход: кастомный appender для Log4Perl, который
репортит счетчик строчек в StatsD
У меня тоже есть свой modern Perl. 2014
Кажется, деплоймент под контролем
§ Кстати, а как в Perl следить за сервисами?
§ В Perl есть ubic
§ Это такой bluepill (почти), но на Perl
§ Что сделает ubic, если сервис умер?
§ Через заданное время периодический
процесс форкнет еще один процесс, который
стартует всех мертвецов (WTF?)
У меня тоже есть свой modern Perl. 2014
Синхронная модель vs асинхронная модель
§ У меня есть опыт переписывания сервиса отдачи
файлов с синхронной модели на асинхронную
§ Лейтенси ВОЗРОСЛА (не верьте тем, кто говорит
что асинхронная модель БЫСТРЕЕ)
§ Зато существенно упало потребление памяти
§ И я стал контролировать все стадии процесса
(попробуйте в mod_perl вернуть из хэндлера
неожиданный результат — будет смешно)
У меня тоже есть свой modern Perl. 2014
Выводы:
§ Мой modern Perl — это не только модули с
CPAN и модные фреймворки
§ Но еще и молоток, при помощи которого
можно заставить работать
§ Любое достаточно крупное животное
У меня тоже есть свой modern Perl. 2014
Традиционный слайд
§ DevOps-40: Уберите детей от экранов!
У меня тоже есть свой modern Perl. 2014
С вами был Александр Чистяков,
главный инженер Git in Sky
alex@gitinsky.com
http://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за внимание!
http://devconf.ru/offers/ - ПРОГОЛОСУЙТЕ, ПОЖАЛУЙСТА,
ЗА МОИ ЗАЯВКИ!

More Related Content

What's hot

C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Ontico
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиковITCrowd Almaty
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыYuri Zhloba
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangYury Yurevich
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"Dev2Dev
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021Timur Shemsedinov
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)Ontico
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Fwdays
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработкеITCrowd Almaty
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...IT-Portfolio
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Anatoly Sharifulin
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромKirill Kovalchuk
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Ontico
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConAlex Chistyakov
 

What's hot (20)

C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Вредные советы для разработчиков
Вредные советы для разработчиковВредные советы для разработчиков
Вредные советы для разработчиков
 
Опыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игрыОпыт использования Erlang в разработке многопользовательской игры
Опыт использования Erlang в разработке многопользовательской игры
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про Erlang
 
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ruБаба-Яга против! — Роман Дворнов, Ostrovok.ru
Баба-Яга против! — Роман Дворнов, Ostrovok.ru
 
D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"D2D Pizza JS Илья Беда "Куда мы все катимся?"
D2D Pizza JS Илья Беда "Куда мы все катимся?"
 
Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021Node.js Меньше сложности, больше надежности Holy.js 2021
Node.js Меньше сложности, больше надежности Holy.js 2021
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
DevOps-трансформация Альфа-Банка / Антон Исанин (Альфа-Банк)
 
Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"Владислав Грязнов "Многозадачность в PHP"
Владислав Грязнов "Многозадачность в PHP"
 
Обучение фронтенд разработке
Обучение фронтенд разработкеОбучение фронтенд разработке
Обучение фронтенд разработке
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Java под нагр...
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
 
Как писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодеромКак писать на PHP и не стать быдло-кодером
Как писать на PHP и не стать быдло-кодером
 
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
Переосмысливая подход к инфраструктурному коду / Евгений Пивень (IPONWEB)
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPCon
 

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

Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!Roman Dvornov
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
 
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...Ruby Meditation
 
Ansible on a great Moscow DevOps CM battle
Ansible on a great Moscow DevOps CM battleAnsible on a great Moscow DevOps CM battle
Ansible on a great Moscow DevOps CM battleAlex Chistyakov
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...Arvids Godjuks
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoLev Walkin
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальNikita Borzykh
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на ErlangMax Lapshin
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang productionAlina Dolgikh
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаAlexander Kirillov
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаOpen-IT
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Fwdays
 

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

Баба Яга против!
Баба Яга против!Баба Яга против!
Баба Яга против!
 
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013
 
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
 
Ansible on a great Moscow DevOps CM battle
Ansible on a great Moscow DevOps CM battleAnsible on a great Moscow DevOps CM battle
Ansible on a great Moscow DevOps CM battle
 
Per! А что дальше?
Per! А что дальше?Per! А что дальше?
Per! А что дальше?
 
Joker2014
Joker2014Joker2014
Joker2014
 
Ryazan
RyazanRyazan
Ryazan
 
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...PHP libevent Daemons. A high performance and reliable solution. Practical exp...
PHP libevent Daemons. A high performance and reliable solution. Practical exp...
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Erlang and OCaml Experience at Echo
Erlang and OCaml Experience at EchoErlang and OCaml Experience at Echo
Erlang and OCaml Experience at Echo
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Vagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестивальVagrant: плагины и гастрономический фестиваль
Vagrant: плагины и гастрономический фестиваль
 
Что и почему писать на Erlang
Что и почему писать на ErlangЧто и почему писать на Erlang
Что и почему писать на Erlang
 
Максим Лапшин. Erlang production
Максим Лапшин. Erlang productionМаксим Лапшин. Erlang production
Максим Лапшин. Erlang production
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
Евгений Жарков "Как быть хорошим фронтенд-разработчиком"
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
 

More from Serguei Gitinsky

как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.Serguei Gitinsky
 
Управление IT командами. Нюансы и практики.
Управление IT командами. Нюансы и практики.Управление IT командами. Нюансы и практики.
Управление IT командами. Нюансы и практики.Serguei Gitinsky
 
Управление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктурыУправление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктурыSerguei Gitinsky
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose HadoopSerguei Gitinsky
 
Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...
Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...
Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...Serguei Gitinsky
 
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14Serguei Gitinsky
 
SmartOS @ Russian Open Source Summit 2014
SmartOS @ Russian Open Source Summit 2014SmartOS @ Russian Open Source Summit 2014
SmartOS @ Russian Open Source Summit 2014Serguei Gitinsky
 
Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014
Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014
Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014Serguei Gitinsky
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 

More from Serguei Gitinsky (11)

как из трех стоек сделать две.
как из трех стоек сделать две.как из трех стоек сделать две.
как из трех стоек сделать две.
 
Управление IT командами. Нюансы и практики.
Управление IT командами. Нюансы и практики.Управление IT командами. Нюансы и практики.
Управление IT командами. Нюансы и практики.
 
Управление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктурыУправление рисками при эксплуатации ИТ-инфраструктуры
Управление рисками при эксплуатации ИТ-инфраструктуры
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose Hadoop
 
Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...
Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...
Наши финские партнеры - большой ДЦ, построенный по современнейшим технологиям...
 
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
CFEngine, Puppet, Chef, SAltStack and Ansible Failover'14
 
SmartOS @ Russian Open Source Summit 2014
SmartOS @ Russian Open Source Summit 2014SmartOS @ Russian Open Source Summit 2014
SmartOS @ Russian Open Source Summit 2014
 
Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014
Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014
Stairway 2 heaven 2014. Grand Forum Business & IT in Moscow, 13 Feb 2014
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Stairway to Heaven
Stairway to HeavenStairway to Heaven
Stairway to Heaven
 
Git in Sky services intro
Git in Sky services introGit in Sky services intro
Git in Sky services intro
 

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

  • 1. У меня тоже есть свой modern Perl Нет ни одного пути не сделать это Александр Чистяков, главный инженер Git in Sky, 2014
  • 2. Сверим часы § > 2014-й § > Perl У меня тоже есть свой modern Perl. 2014
  • 3. Пожалуйста, не расходитесь! § Предыдущий слайд не полностью отражает мой опыт § Да, Perl сломан, и его нельзя починить (см. http://goo.gl/O7OS1X ) § Однажды мы проехали 2600 километров на минивэне с вырванной стойкой - “сломан” не означает “не может передвигаться” § Кстати, мой ноутбук сломан :( У меня тоже есть свой modern Perl. 2014
  • 4. В чем плюсы Perl § Perl-разработчика не удивишь ездой с вырванной стойкой (впрочем, большинство языков на “P” такие) § Perl-разработчика легко найти — они все поименно занесены в Красную книгу § У некоторых заказчиков сформирована защитно-подсознательная травматическая связь с Perl У меня тоже есть свой modern Perl. 2014
  • 5. Прекратите смеяться, вы не в цирке! § Как во все это ввязался я: § Деньги § Челлендж § Если не я, то кто? § Если я не умею эксплуатировать продукты на Perl, что я тогда вообще умею? У меня тоже есть свой modern Perl. 2014
  • 6. Куда именно я ввязался § Setup.ru: § Конструктор сайтов § Моя роль — инженер по эксплуатации § AdCamp: § Мобильная рекламная сеть § Моя роль — релиз-инженер, разработчик У меня тоже есть свой modern Perl. 2014
  • 7. В дальнейшем роли перемешались § Мое глубокое убеждение: § Невозможно эффективно эксплуатировать проект, не принимая участия в его разработке § И наоборот У меня тоже есть свой modern Perl. 2014
  • 8. Традиционно приписываемые Perl проблемы § Perl сложно читать и понимать § Perl «глючит и тормозит» § ^ Леха, мы помним! § Perl сдох § (В качестве фокус-группы были использованы участники элитного(tm) чата) У меня тоже есть свой modern Perl. 2014
  • 9. Начну со второго проекта § Мобильная рекламная сеть § Оказывается, показ рекламы — достаточно сложная задача: § Запутанные бизнес-правила § Интеграция с контрагентами, которые сами не знают, чего хотят § Необходимость релизиться часто и быстро § Highload, что бы это ни значило У меня тоже есть свой modern Perl. 2014
  • 10. Взгляд разработчика, мнимые проблемы § Perl легко читать, если его писала не обезьяна § К несчастью, многие Perl-программисты считают своим долгом использовать какие-нибудь свои коронные вещи, понятные только им § К счастью, modern Perl это не мертвый верблюд, а живые лоси, мыши и другие обитатели леса! У меня тоже есть свой modern Perl. 2014
  • 11. Modern Perl § Moose и производные: § Всё то, что было в нормальных ОО языках еще 10+ лет назад, и чего нет в ядре языка до сих пор § Миксины («роли»), method modifiers, проперти, и т.п. У меня тоже есть свой modern Perl. 2014
  • 12. Проблемы становятся локальнее § Лично я быстро теряю контекст в ОО системах на “скриптовых” (динамически типизированных) языках (хочу, чтобы все было в одном файле) § ^ Потому что пишу в ViM § Кроме того, я помню, что объект в Perl — это просто blessed hash, и все время нарушаю инкапсуляцию У меня тоже есть свой modern Perl. 2014
  • 13. Новые вызовы для 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
  • 14. AnyEvent § Позволяет погрузиться в callback hell совершенно незаметным для разработчика образом § Код отлично пишется и читается § Разработчик ничего не подозревает до выхода своего шедевра в продакшн У меня тоже есть свой modern Perl. 2014
  • 15. Взгляд эксплуатационщика § Выход в продакшн: § Сервисы втыкают § Все бегают и орут § Никто не знает, что происходит § Спокойно, сейчас всё будет! § Нужно просто сделать профайлинг! У меня тоже есть свой modern Perl. 2014
  • 16. Как сделать профайлинг § Старый добрый PMP: § http://poormansprofiler.org/ § По сути, старый добрый gdb + обертка на shell § (Почти) универсальный cэмплирующий профайлер У меня тоже есть свой modern Perl. 2014
  • 17. Чего же мы ждем? § Собрали сэмплы, проанализировали § Виновник найден, вот он: § Perl_runops_standard § Здесь приложение проводит больше всего времени § Этот вызов просто выполняет все перловые опкоды ;( У меня тоже есть свой modern Perl. 2014
  • 18. Переходим к плану Б, он ведь есть? § Даже в такой старой экосистеме, как Java/JVM, есть сэмплирующий профайлер § Неужели в modern Perl его нет? § СЮРПРИИИЗ! § Мы соберем свой собственный, используя схему из журнала “Радио” У меня тоже есть свой modern Perl. 2014
  • 19. Профайлер своими руками § Нам понадобятся: § Активные датчики § Агрегатор § Коллектор/хранилище § Что-то, что рисует графики § Дэшборд У меня тоже есть свой modern Perl. 2014
  • 20. StatsD/Graphite § Ничего изобретать не придется: § StatsD — простой протокол обмена телеметрической информацией § Клиенты и серверы на любом языке, в том числе на Perl и C (кстати, он сейчас сломан, я засабмитил патч) § Graphite — RRD-like хранилище + инфраструктура для рисования графиков У меня тоже есть свой modern Perl. 2014
  • 21. Дэшборд § Раньше я всегда использовал GDash (он хорошо скриптуется) § Потом мне показали Grafana (спасибо, Андрюха!) § Grafana вообще не скриптуется, но отлично конфигурируется вручную прямо через веб § Оказалось, что типичный шаблон работы с графиками в сложном проекте предполагает довольно частые переконфигурирования — скриптовать долго У меня тоже есть свой modern Perl. 2014
  • 22. Промежуточный итог § В код относительно небольшой кровью внедрены таймеры § Теперь на продакшн есть красивые графики зависимости времени исполнения запроса от времени § Виновный найден и призван к порядку У меня тоже есть свой modern Perl. 2014
  • 23. Не очень-то призрачная угроза § Сложная бизнес-логика порождает ошибки* § *коллеги-программисты, конечно же, а вовсе не логика, но чем сложнее логика, тем больше ошибок § Шокирующее открытие: логи никто не читает! § Лог-коллектор? Серьезно? У меня тоже есть свой modern Perl. 2014
  • 24. Давайте подумаем § Мы правда хотим из приложения писать плохо структурированную информацию в файл, потом разбивать этот файл на строки, пересылать их для анализа куда-то (где их, возможно, не примут из-за C10K+ problem), разбирать их там централизованно и там же искать корреляции? § youaredoingitwrong.jpg У меня тоже есть свой modern Perl. 2014
  • 25. Как же быть? § Ошибки надо классифицировать по месту их появления § Хорошая классификация ошибок — залог правильной интепретации результата § Например: § rotator.total.errors.log_fatal_calls.rotator11-test-11081 § сервис-тип_ошибки-сервер-порт У меня тоже есть свой modern Perl. 2014
  • 26. Ура, счастье! У меня тоже есть свой modern Perl. 2014
  • 27. Callback hell strikes back § Odd number of hash elements in <some unknown module> at <some unknown string> § Сначала у этих загадочных надписей даже не было стектрейса! (а это похуже, чем вырванная вилка) § На предложение включить стектрейс коллеги- разработчики сказал, что Carp::Always течет! § (Забегая вперед — стектрейс не поможет) У меня тоже есть свой modern Perl. 2014
  • 28. Нам срочно нужен хороший memory profiler! § Требования: § Работать в production окружении § Ладно, хотя бы в 1/10 production окружения § Кстати, про 1/10 production окружения: § Отогнать 10% трафика со staging на production путем зеркалирования было отличной идеей У меня тоже есть свой modern Perl. 2014
  • 29. And we need to go deeper § Извините, я все время отвлекаюсь § Как отзеркалировать 10% трафика с продакшна в стейджинг? § emproxy и аналоги — стильно, модно, молодежно! § Старый добрый nginx! § Wait...what? У меня тоже есть свой modern Perl. 2014
  • 30. Как это делается в nginx § Способ придуман коллегой @yavorovich_da, инженером по эксплуатации AdCamp § В nginx заводится отдельный апстрим, на который направляется 10% трафика § Этот апстрим всегда отвечает 503 с минимальным таймаутом, при этом проксируя запрос на staging § Боевой прокси, получая 503, идет к боевому сервису У меня тоже есть свой modern Perl. 2014
  • 31. Окей, теперь у нас есть тестовая площадка § Вернемся к memory profiler § Где же он, где? § Подозреваю, что в случае Perl — там же, где и сэмплирующий профайлер, а значит, ответ мы уже знаем § Ответ — StatsD У меня тоже есть свой modern Perl. 2014
  • 32. Самолет своими руками § Нам понадобятся: § perlbrew (по-вашему это будет RVM) § Исходники Perl § statsd-c-client (мой патч, кстати, принят) § Небольшие изменения в аллокаторе Perl У меня тоже есть свой modern Perl. 2014
  • 33. Итого § http://goo.gl/FJqAhG § Не многопоточное § Места расстановки датчиков подобраны экспериментально методом “работает-не трогай” § Но оно работает! У меня тоже есть свой modern Perl. 2014
  • 34. Краса и гордость У меня тоже есть свой modern Perl. 2014
  • 35. Некоторые случайные факты § StatsD-сервис придется устаовить на той же машине, совершенно незачем гонять 10-20 тысяч событий в секунду по сети § Реализация стектрейсов, используемая в AnyEvent, никуда не течет (в комментариях к ней как раз ругают Carp::Always) § Управление памятью в Perl — оно какое-то эээ... У меня тоже есть свой modern Perl. 2014
  • 36. Окей, включили стектрейсы § Вы помните, про callback hell, да? § У нас в системе появляются неучтенные ошибки, которые валятся в логи, который никто не читает § Стектрейс при этом не говорит ни о чем § Предупрежден — значит вооружен § Выход: кастомный appender для Log4Perl, который репортит счетчик строчек в StatsD У меня тоже есть свой modern Perl. 2014
  • 37. Кажется, деплоймент под контролем § Кстати, а как в Perl следить за сервисами? § В Perl есть ubic § Это такой bluepill (почти), но на Perl § Что сделает ubic, если сервис умер? § Через заданное время периодический процесс форкнет еще один процесс, который стартует всех мертвецов (WTF?) У меня тоже есть свой modern Perl. 2014
  • 38. Синхронная модель vs асинхронная модель § У меня есть опыт переписывания сервиса отдачи файлов с синхронной модели на асинхронную § Лейтенси ВОЗРОСЛА (не верьте тем, кто говорит что асинхронная модель БЫСТРЕЕ) § Зато существенно упало потребление памяти § И я стал контролировать все стадии процесса (попробуйте в mod_perl вернуть из хэндлера неожиданный результат — будет смешно) У меня тоже есть свой modern Perl. 2014
  • 39. Выводы: § Мой modern Perl — это не только модули с CPAN и модные фреймворки § Но еще и молоток, при помощи которого можно заставить работать § Любое достаточно крупное животное У меня тоже есть свой modern Perl. 2014
  • 40. Традиционный слайд § DevOps-40: Уберите детей от экранов! У меня тоже есть свой modern Perl. 2014
  • 41. С вами был Александр Чистяков, главный инженер Git in Sky alex@gitinsky.com http://gitinsky.com http://meetup.com/DevOps-40 Пожалуйста, ваши вопросы. Спасибо за внимание! http://devconf.ru/offers/ - ПРОГОЛОСУЙТЕ, ПОЖАЛУЙСТА, ЗА МОИ ЗАЯВКИ!