Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Perl undead!
как мы делали сложный
проект на perl5 и что из
этого вышло
Даниил Подольский
CTO inCaller.org
ex-CTO AdCamp.ru
Немного о себе
• Системный администратор со стажем 20 лет
Немного о себе
• Системный администратор со стажем 20 лет
• начинал на ассемблере х86
• последняя прочитанная книжка о процессорах
инструкциях и регистрах - i386
Немного о себе
• Системный администратор со стажем 20 лет
• начинал на ассемблере х86
• последняя прочитанная книжка о процессорах
инструкциях и регистрах - i386
• Пишу/читаю на C, C++, Perl5, Java, Groovy,
Lua,Go
Немного о себе
• Системный администратор со стажем 20 лет
• начинал на ассемблере х86
• последняя прочитанная книжка о процессорах
инструкциях и регистрах - i386
• Пишу/читаю на C, C++, Perl5, Java, Groovy,
Lua,Go
• Сейчас руковожу разработкой проекта на Go
Немного о себе
• Люблю Perl5
Немного о себе
• Люблю Perl5
• Правда-правда!
• Даже имею несколько опубликованных на
CPAN модулей
Немного о себе
• Люблю Perl5
• Правда-правда!
• Даже имею несколько опубликованных на
CPAN модулей
• Не читал Modern Perl
Немного о себе
• Люблю Perl5
• Правда-правда!
• Даже имею несколько опубликованных на
CPAN модулей
• Не читал Modern Perl
• Фактически - не пишу на современном перле
О чем и зачем этот доклад
• О том, как я расстался с Perl
О чем и зачем этот доклад
• О том, как я расстался с Perl
• Я хочу поделиться опытом проигранных
сражений
О чем и зачем этот доклад
• О том, как я расстался с Perl
• Я хочу поделиться опытом проигранных
сражений
• И предостеречь “молодежь”
О чем и зачем этот доклад
• О том, как я расстался с Perl
• Я хочу поделиться опытом проигранных
сражений
• И предостеречь “молодежь”
• Хоть и осознаю, что в этом нет смысла
Предыстория
• Setup.Ru
Предыстория
• Setup.Ru
• Perl 5
Предыстория
• Setup.Ru
• Perl 5
• mod_perl
Предыстория
• Setup.Ru
• Perl 5
• mod_perl
• системный администратор и архитектор
Предыстория
• Setup.Ru
• Perl 5
• mod_perl
• системный администратор и архитектор
• файловое хранилище: perl + postgres
Предыстория
• AdCamp.Ru
Предыстория
• AdCamp.Ru
• RTB SSP
Предыстория
• AdCamp.Ru
• RTB SSP
• Специфическая задача - умный proxy
Предыстория
• AdCamp.Ru
• RTB SSP
• Специфическая задача - умный proxy
• Жесткие требования к скорости
Предыстория
• AdCamp.Ru
• RTB SSP
• Специфическая задача - умный proxy
• Жесткие требования к скорости
• Высокие нагрузки
Предыстория
• AdCamp.Ru
• RTB SSP
• Специфическая задача - умный proxy
• Жесткие требования к скорости
• Высокие нагрузки
• Команда перловиков
Предыстория
• 2013 - системный администратор и архитектор
Предыстория
• 2013 - системный администратор и архитектор
• 2014 - технический директор
Стадии развития проекта:

отрицание
• AnyEvent, Mojo, XML, JSON
Стадии развития проекта:

отрицание
• AnyEvent, Mojo, XML, JSON
• масса всего всякого XS
Стадии развития проекта:

отрицание
• AnyEvent, Mojo, XML, JSON
• масса всего всякого XS
• чтение кода ночами
Стадии развития проекта:

отрицание
• AnyEvent, Mojo, XML, JSON
• масса всего всякого XS
• чтение кода ночами
• “мы - программисты, мы любим писать

сложный код”
Стадии развития проекта:

отрицание
• AnyEvent, Mojo, XML, JSON
• масса всего всякого XS
• чтение кода ночами
• “мы - программисты, мы любим писать

сложный код”
• “все языки одинаковы”
Стадии развития проекта:

отрицание
• попытки профилирования
Стадии развития проекта:

отрицание
• попытки профилирования
• NYT profiler
Стадии развития проекта:

отрицание
• попытки профилирования
• NYT profiler
• внедрение statsd
Стадии развития проекта:

отрицание
• попытки профилирования
• NYT profiler
• внедрение statsd
• event-driven программы очень тяжело
профилировать
Стадии развития проекта:

гнев
• Монолитное приложение
Стадии развития проекта:

гнев
• Монолитное приложение
• так делают java-программисты
Стадии развития проекта:

гнев
• Монолитное приложение
• так делают java-программисты
• так делать не надо
Стадии развития проекта:

гнев
• Монолитное приложение
• так делают java-программисты
• так делать не надо
• Копирование массивов при передаче параметров
Стадии развития проекта:

гнев
• Монолитное приложение
• так делают java-программисты
• так делать не надо
• Копирование массивов при передаче параметров
• замена хешей на перебор
Стадии развития проекта:

гнев
• Монолитное приложение
• так делают java-программисты
• так делать не надо
• Копирование массивов при передаче параметров
• замена хешей на перебор
• замена регекспов на токенизаторы
Стадии развития проекта:

торговля
• ночные стрельбы
Стадии развития проекта:

торговля
• ночные стрельбы
• оптимизация количества процессов
Стадии развития проекта:

торговля
• ночные стрельбы
• оптимизация количества процессов
• удаление лишних метрик (!)
Стадии развития проекта:

торговля
• ночные стрельбы
• оптимизация количества процессов
• удаление лишних метрик (!)
• memcache
Стадии развития проекта:

отчаяние
• отсутствие оптимизатора
Стадии развития проекта:

отчаяние
• отсутствие оптимизатора
• отсутствие семплирующего профайлера
Стадии развития проекта:

отчаяние
• отсутствие оптимизатора
• отсутствие семплирующего профайлера
• да вообще какого-либо пригодного для
использования профайлера
Стадии развития проекта:

отчаяние
• отсутствие оптимизатора
• отсутствие семплирующего профайлера
• да вообще какого-либо пригодного для
использования профайлера
• threads are weird
Стадии развития проекта:

отчаяние
• отсутствие оптимизатора
• отсутствие семплирующего профайлера
• да вообще какого-либо пригодного для
использования профайлера
• threads are weird
• IPC is weird
Стадии развития проекта:

отчаяние
• очень дорогой вызов функции
Стадии развития проекта:

отчаяние
• очень дорогой вызов функции
• очень высокие накладные расходы на
обслуживание очереди событий
Стадии развития проекта:

отчаяние
• очень дорогой вызов функции
• очень высокие накладные расходы на
обслуживание очереди событий
• reordering?!
Стадии развития проекта:

отчаяние
• очень дорогой вызов функции
• очень высокие накладные расходы на
обслуживание очереди событий
• reordering?!
• Приложение захлебывается при высокой
утилизации CPU
Стадии развития проекта:

отчаяние
• Основное время выполняется код, которого мы
не писали
• низкоэффективные структуры данных
• современный perl - очень сложный язык
• наверное, все же не все языки одинаковы
• и уж точно разные VM и runtime
Стадии развития проекта:

отчаяние
• Основное время выполняется код, которого мы
не писали
Стадии развития проекта:

отчаяние
• Основное время выполняется код, которого мы
не писали
• низкоэффективные структуры данных
Стадии развития проекта:

отчаяние
• Основное время выполняется код, которого мы
не писали
• низкоэффективные структуры данных
• современный perl - очень сложный язык
Стадии развития проекта:

отчаяние
• Основное время выполняется код, которого мы
не писали
• низкоэффективные структуры данных
• современный perl - очень сложный язык
• наверное, все же не все языки одинаковы
Стадии развития проекта:

отчаяние
• Основное время выполняется код, которого мы
не писали
• низкоэффективные структуры данных
• современный perl - очень сложный язык
• наверное, все же не все языки одинаковы
• и уж точно разные VM и runtime
Стадии развития проекта:

смирение
• Groovy
Стадии развития проекта:

смирение
• Groovy
• увеличение производительности в 8 раз
Стадии развития проекта:

смирение
• Groovy
• увеличение производительности в 8 раз
• приложение перестало захлебываться
Стадии развития проекта:

смирение
• Groovy
• увеличение производительности в 8 раз
• приложение перестало захлебываться
• nginx+lua
Стадии развития проекта:

смирение
• Groovy
• увеличение производительности в 8 раз
• приложение перестало захлебываться
• nginx+lua
• получилось не хуже
Стадии развития проекта:

смирение
• Groovy
• увеличение производительности в 8 раз
• приложение перестало захлебываться
• nginx+lua
• получилось не хуже
• то есть - дело не в собственно асинхронности
Стадии развития проекта:

смирение
• Заказчик все равно закрыл проект
Стадии развития проекта:

смирение
• Заказчик все равно закрыл проект
• и переписал все на scala
Что же делать?!
или выводы
• Никогда больше
Что же делать?!
или выводы
• Никогда больше
• по результатам я выучил Go
• Никакой асинхронности
• запускать в голове стейт-машину - развлечение
для дебилов
Что же делать?!
или выводы
• Никогда больше
• по результатам я выучил Go
• Никакой асинхронности
Что же делать?!
или выводы
• Никогда больше
• по результатам я выучил Go
• Никакой асинхронности
• запускать в голове стейт-машину - развлечение
для дебилов
Что же делать?!
или выводы
• Возможно, выход - в использовании
функциональных языков
Что же делать?!
или выводы
• Возможно, выход - в использовании
функциональных языков
• и акторов
Что же делать?!
или выводы
• Возможно, выход - в использовании
функциональных языков
• и акторов
• микросервисы - акторы для бедных
Вопросы?

More Related Content

Ryazan