Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
Golang в действии: Как нам удается писать highload приложение на (не?)подходящем языке
Next
Download to read offline and view in fullscreen.

Share

Ryazan

Download to read offline

как мы делали сложный проект на perl5 и что из этого вышло

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all
  • Be the first to like this

Ryazan

  1. 1. Perl undead! как мы делали сложный проект на perl5 и что из этого вышло Даниил Подольский CTO inCaller.org ex-CTO AdCamp.ru
  2. 2. Немного о себе • Системный администратор со стажем 20 лет
  3. 3. Немного о себе • Системный администратор со стажем 20 лет • начинал на ассемблере х86 • последняя прочитанная книжка о процессорах инструкциях и регистрах - i386
  4. 4. Немного о себе • Системный администратор со стажем 20 лет • начинал на ассемблере х86 • последняя прочитанная книжка о процессорах инструкциях и регистрах - i386 • Пишу/читаю на C, C++, Perl5, Java, Groovy, Lua,Go
  5. 5. Немного о себе • Системный администратор со стажем 20 лет • начинал на ассемблере х86 • последняя прочитанная книжка о процессорах инструкциях и регистрах - i386 • Пишу/читаю на C, C++, Perl5, Java, Groovy, Lua,Go • Сейчас руковожу разработкой проекта на Go
  6. 6. Немного о себе • Люблю Perl5
  7. 7. Немного о себе • Люблю Perl5 • Правда-правда! • Даже имею несколько опубликованных на CPAN модулей
  8. 8. Немного о себе • Люблю Perl5 • Правда-правда! • Даже имею несколько опубликованных на CPAN модулей • Не читал Modern Perl
  9. 9. Немного о себе • Люблю Perl5 • Правда-правда! • Даже имею несколько опубликованных на CPAN модулей • Не читал Modern Perl • Фактически - не пишу на современном перле
  10. 10. О чем и зачем этот доклад • О том, как я расстался с Perl
  11. 11. О чем и зачем этот доклад • О том, как я расстался с Perl • Я хочу поделиться опытом проигранных сражений
  12. 12. О чем и зачем этот доклад • О том, как я расстался с Perl • Я хочу поделиться опытом проигранных сражений • И предостеречь “молодежь”
  13. 13. О чем и зачем этот доклад • О том, как я расстался с Perl • Я хочу поделиться опытом проигранных сражений • И предостеречь “молодежь” • Хоть и осознаю, что в этом нет смысла
  14. 14. Предыстория • Setup.Ru
  15. 15. Предыстория • Setup.Ru • Perl 5
  16. 16. Предыстория • Setup.Ru • Perl 5 • mod_perl
  17. 17. Предыстория • Setup.Ru • Perl 5 • mod_perl • системный администратор и архитектор
  18. 18. Предыстория • Setup.Ru • Perl 5 • mod_perl • системный администратор и архитектор • файловое хранилище: perl + postgres
  19. 19. Предыстория • AdCamp.Ru
  20. 20. Предыстория • AdCamp.Ru • RTB SSP
  21. 21. Предыстория • AdCamp.Ru • RTB SSP • Специфическая задача - умный proxy
  22. 22. Предыстория • AdCamp.Ru • RTB SSP • Специфическая задача - умный proxy • Жесткие требования к скорости
  23. 23. Предыстория • AdCamp.Ru • RTB SSP • Специфическая задача - умный proxy • Жесткие требования к скорости • Высокие нагрузки
  24. 24. Предыстория • AdCamp.Ru • RTB SSP • Специфическая задача - умный proxy • Жесткие требования к скорости • Высокие нагрузки • Команда перловиков
  25. 25. Предыстория • 2013 - системный администратор и архитектор
  26. 26. Предыстория • 2013 - системный администратор и архитектор • 2014 - технический директор
  27. 27. Стадии развития проекта:
 отрицание • AnyEvent, Mojo, XML, JSON
  28. 28. Стадии развития проекта:
 отрицание • AnyEvent, Mojo, XML, JSON • масса всего всякого XS
  29. 29. Стадии развития проекта:
 отрицание • AnyEvent, Mojo, XML, JSON • масса всего всякого XS • чтение кода ночами
  30. 30. Стадии развития проекта:
 отрицание • AnyEvent, Mojo, XML, JSON • масса всего всякого XS • чтение кода ночами • “мы - программисты, мы любим писать
 сложный код”
  31. 31. Стадии развития проекта:
 отрицание • AnyEvent, Mojo, XML, JSON • масса всего всякого XS • чтение кода ночами • “мы - программисты, мы любим писать
 сложный код” • “все языки одинаковы”
  32. 32. Стадии развития проекта:
 отрицание • попытки профилирования
  33. 33. Стадии развития проекта:
 отрицание • попытки профилирования • NYT profiler
  34. 34. Стадии развития проекта:
 отрицание • попытки профилирования • NYT profiler • внедрение statsd
  35. 35. Стадии развития проекта:
 отрицание • попытки профилирования • NYT profiler • внедрение statsd • event-driven программы очень тяжело профилировать
  36. 36. Стадии развития проекта:
 гнев • Монолитное приложение
  37. 37. Стадии развития проекта:
 гнев • Монолитное приложение • так делают java-программисты
  38. 38. Стадии развития проекта:
 гнев • Монолитное приложение • так делают java-программисты • так делать не надо
  39. 39. Стадии развития проекта:
 гнев • Монолитное приложение • так делают java-программисты • так делать не надо • Копирование массивов при передаче параметров
  40. 40. Стадии развития проекта:
 гнев • Монолитное приложение • так делают java-программисты • так делать не надо • Копирование массивов при передаче параметров • замена хешей на перебор
  41. 41. Стадии развития проекта:
 гнев • Монолитное приложение • так делают java-программисты • так делать не надо • Копирование массивов при передаче параметров • замена хешей на перебор • замена регекспов на токенизаторы
  42. 42. Стадии развития проекта:
 торговля • ночные стрельбы
  43. 43. Стадии развития проекта:
 торговля • ночные стрельбы • оптимизация количества процессов
  44. 44. Стадии развития проекта:
 торговля • ночные стрельбы • оптимизация количества процессов • удаление лишних метрик (!)
  45. 45. Стадии развития проекта:
 торговля • ночные стрельбы • оптимизация количества процессов • удаление лишних метрик (!) • memcache
  46. 46. Стадии развития проекта:
 отчаяние • отсутствие оптимизатора
  47. 47. Стадии развития проекта:
 отчаяние • отсутствие оптимизатора • отсутствие семплирующего профайлера
  48. 48. Стадии развития проекта:
 отчаяние • отсутствие оптимизатора • отсутствие семплирующего профайлера • да вообще какого-либо пригодного для использования профайлера
  49. 49. Стадии развития проекта:
 отчаяние • отсутствие оптимизатора • отсутствие семплирующего профайлера • да вообще какого-либо пригодного для использования профайлера • threads are weird
  50. 50. Стадии развития проекта:
 отчаяние • отсутствие оптимизатора • отсутствие семплирующего профайлера • да вообще какого-либо пригодного для использования профайлера • threads are weird • IPC is weird
  51. 51. Стадии развития проекта:
 отчаяние • очень дорогой вызов функции
  52. 52. Стадии развития проекта:
 отчаяние • очень дорогой вызов функции • очень высокие накладные расходы на обслуживание очереди событий
  53. 53. Стадии развития проекта:
 отчаяние • очень дорогой вызов функции • очень высокие накладные расходы на обслуживание очереди событий • reordering?!
  54. 54. Стадии развития проекта:
 отчаяние • очень дорогой вызов функции • очень высокие накладные расходы на обслуживание очереди событий • reordering?! • Приложение захлебывается при высокой утилизации CPU
  55. 55. Стадии развития проекта:
 отчаяние • Основное время выполняется код, которого мы не писали • низкоэффективные структуры данных • современный perl - очень сложный язык • наверное, все же не все языки одинаковы • и уж точно разные VM и runtime
  56. 56. Стадии развития проекта:
 отчаяние • Основное время выполняется код, которого мы не писали
  57. 57. Стадии развития проекта:
 отчаяние • Основное время выполняется код, которого мы не писали • низкоэффективные структуры данных
  58. 58. Стадии развития проекта:
 отчаяние • Основное время выполняется код, которого мы не писали • низкоэффективные структуры данных • современный perl - очень сложный язык
  59. 59. Стадии развития проекта:
 отчаяние • Основное время выполняется код, которого мы не писали • низкоэффективные структуры данных • современный perl - очень сложный язык • наверное, все же не все языки одинаковы
  60. 60. Стадии развития проекта:
 отчаяние • Основное время выполняется код, которого мы не писали • низкоэффективные структуры данных • современный perl - очень сложный язык • наверное, все же не все языки одинаковы • и уж точно разные VM и runtime
  61. 61. Стадии развития проекта:
 смирение • Groovy
  62. 62. Стадии развития проекта:
 смирение • Groovy • увеличение производительности в 8 раз
  63. 63. Стадии развития проекта:
 смирение • Groovy • увеличение производительности в 8 раз • приложение перестало захлебываться
  64. 64. Стадии развития проекта:
 смирение • Groovy • увеличение производительности в 8 раз • приложение перестало захлебываться • nginx+lua
  65. 65. Стадии развития проекта:
 смирение • Groovy • увеличение производительности в 8 раз • приложение перестало захлебываться • nginx+lua • получилось не хуже
  66. 66. Стадии развития проекта:
 смирение • Groovy • увеличение производительности в 8 раз • приложение перестало захлебываться • nginx+lua • получилось не хуже • то есть - дело не в собственно асинхронности
  67. 67. Стадии развития проекта:
 смирение • Заказчик все равно закрыл проект
  68. 68. Стадии развития проекта:
 смирение • Заказчик все равно закрыл проект • и переписал все на scala
  69. 69. Что же делать?! или выводы • Никогда больше
  70. 70. Что же делать?! или выводы • Никогда больше • по результатам я выучил Go • Никакой асинхронности • запускать в голове стейт-машину - развлечение для дебилов
  71. 71. Что же делать?! или выводы • Никогда больше • по результатам я выучил Go • Никакой асинхронности
  72. 72. Что же делать?! или выводы • Никогда больше • по результатам я выучил Go • Никакой асинхронности • запускать в голове стейт-машину - развлечение для дебилов
  73. 73. Что же делать?! или выводы • Возможно, выход - в использовании функциональных языков
  74. 74. Что же делать?! или выводы • Возможно, выход - в использовании функциональных языков • и акторов
  75. 75. Что же делать?! или выводы • Возможно, выход - в использовании функциональных языков • и акторов • микросервисы - акторы для бедных
  76. 76. Вопросы?

как мы делали сложный проект на perl5 и что из этого вышло

Views

Total views

142

On Slideshare

0

From embeds

0

Number of embeds

0

Actions

Downloads

3

Shares

0

Comments

0

Likes

0

×