SlideShare a Scribd company logo
Erlang в 
настоящем продакшне 
Максим Лапшин 
Эрливидео 
max@erlyvideo.ru
Пишем про ФП, но 
пишем не на ФП?
• Бизнесу нужен продукт, а не софт 
• Программистам интересно писать софт 
• Нет опыта в продакшне, значит небезопасно 
делать продукт на таком софте 
• Бизнес избегает ФП 
• Без коммерческого применения нет опыта 
• Замкнутый цикл
Опасения бизнеса в 
непредсказуемости 
технологии
Эрланг годится для 
коммерческой 
разработки!
Эрливидео 
• Высоконагруженный видеостриминговый сервер 
(10 ГБит/с без проблем) 
• 5 лет разработки и успешной продажи ПО 
• Беспроблемный найм людей 
• Очень мало критичных багов (и те в C) 
• Крайне быстрая разработка 
• Без эрланга мы бы не справились!
Эрланг в продакшне 
• Надежно 
• Дешево 
• Предсказуемо 
• Имеет смысл использовать для коммерческого 
софта
Продакшн познается через 
год 
• Софт дорастает до использования живыми 
пользователями 
• Начинается поддержка старого кода 
• Приходят новые программисты, перед которыми 
стыдно за исходники 
• Пользователи создают нагрузку
Проблемы эксплуатации 
• Работа со своим и чужим кодом 
• Работа с багами на недевелоперских серверах 
• Поведение под нагрузкой
Поддержка старого кода 
• Через год даже свой код уже не вспомнить 
• Автора кода не достать, он пошел на IPO 
• Статической типизации в эрланге нет
Реалии старого кода 
• Код 10-летней давности запускается и работает 
• Очень сильная обратная совместимость между 
версиями VM 
• Немутабельность сильно помогает отладке 
• Не-OTP код — зло, OTP код — хорошо
Старый код в Эрливидео 
• Есть куски кода, которым по 5 лет 
• Иногда проводятся массовые рефакторинги 
• Интеграционные тесты помогают, юнит-тесты нет
Борьба с багами 
• 95% падений рантайма — нехватка памяти 
• Нехватка памяти почти всегда — нехватка 
контроля за пайплайном данных 
• Остальное лечится чтением стектрейсов сверху 
вниз, потому что let it fail 
• Если пишем хорошо, то ошибки изолируются по 
процессам
Алгоритмы багфикса 
• По нажатию кнопки «загрузить логи», система 
сама пакует всё 
• Пользователи всегда вырезают самое 
интересное из логов, их логи мы не читаем 
• Изучаем стектрейсы и периодический дамп 
самых прожорливых процессов 
• Пытаемся восстановить ситуацию у себя. Если не 
можем, идем на сервер заказчика
Авральные работы на 
сервере 
• recon, htop в помощь что бы понять, какой ресурс 
сожран 
• to_erl дает больший контроль, чем другие варианты 
(remsh и ssh) 
• erlang:processes() что бы найти самого обжору 
• ищем причину утечки памяти и/или тормозов 
• непроходимость в пайплайне данных -> утечка 
памяти
Интроспекция 
• supervisor:which_children/1 для обхода структуры 
• sys:get_state/1 что бы добраться до нутра 
• lager:pr/2 для изучения состояния 
• lager:md/1 для тегирования логов 
• самодельные хелперы: ems_debug:top(binary)
Само-мониторинг 
• На сервера не набегаешься 
• Система должна сама себя мониторить 
• Поиск источника багов 
• Поиск потенциальных тормозов (для highload)
Мониторинги 
• Потребление памяти (раз в 10 секунд) 
• Мониторинг длин очередей 
• Мониторинг размера ets таблиц 
• Внутренние очереди 
• Контроль за тем, что данные втекают не быстрее, 
чем вытекают
Capacity control 
• Что бы не лопнуть, надо уметь отказываться 
• Поиск утечек памяти и багов показывает 
бутылочные горлышки 
• Узкие места должны сообщать о собственной 
загрузке 
• Без обратного контроля можно быстро, но 
недолго
Работа под нагрузкой 
• Эрланг — одна из нескольких multicore 
платформ 
• Можно получить линейное ускорение по ядрам 
• Интроспекция на живом продакшне под полной 
нагрузкой 
• Как всё не затормозить?
Шаги на пути к Highload 
• Развязывание узких мест: одно ядро не может, а 
10 смогут 
• Ускорение линейного кода 
• Перенос данных в память
Развязывание узких мест 
• Singleton это узкое место, потому что одно ядро 
• gen_server:call сам по себе не спасает 
• Нужно разносить однопроцессные сервисы на 
несколько ядер 
• Способы: пулы, шардирование, ets 
• ETS — это очень быстро и эффективно
Примеры 
распараллеливания 
• У одного открытого файла пул процессов, 
читающих с диска 
• В comet сервере шардинг процессов 
мониторинга по hash(channel_id) % pool_size 
• Подписка через ets типа bag: по ключу много 
значений сразу
Профилирование 
• Возможность профилировать отдельный процесс 
• В эрланге оно всё так себе 
• Анализ стектрейсов 
• Тайминги в заголовках HTTP ответов 
• Не особо много хитростей
ETS для памяти 
• In-memory database 
• Великолепно масштабируется на 40-70 ядер 
• Прекрасно годится для отдачи готовых данных 
• Рекомендуется вместе с zerocopy протоколами 
• Вторичные индексы руками
Примеры в Эрливидео 
• Раздача live потоков: данные готовятся заранее, 
укладываются в ets таблицы. 20 Гбит/с без 
надрыва 
• Стриминг файлов с диска: пляски с бубном и 
10-15 Гбит/с можно
Архитектура стриминга с 
диска 
• В линуксе синхронное чтение с диска, тред на запрос. 
• Держим 50 или 1000 одновременных запросов к диску 
• Процесс файла — арбитр между динамическим пулом 
процессов ридеров 
• Ридеры идут в лимитированную очередь с таймаутом: N 
одновременных запросов и M в ожидании 
• Мониторинг загрузки диска и времени чтения 
• Спасибо POSIX API
Продакшн 
• Писать код на Эрланге интересно 
• Возможно устранять баги в бою 
• Можно поддерживать старый код и жить с ним 
• Можно делать крайне производительный код, 
притом очень быстро
Вопросы? 
Максим Лапшин 
max@erlyvideo.ru

More Related Content

KEY
Erlang&rails
Max Lapshin
 
PDF
Erlang ruby
Yuri Zhloba
 
KEY
Что и почему писать на Erlang
Max Lapshin
 
PDF
Erlang мгновенное просветление
Maxim Sokhatsky
 
PDF
Алексей Туля - А нужен ли вам erlang?
Minsk Linux User Group
 
PDF
Максим Лапшин — введение в Erlang
Александр Ежов
 
PDF
Как устроен мониторинг в Badoo
Uptime Community
 
KEY
Отличие Erlang от объектных языков
Max Lapshin
 
Erlang&rails
Max Lapshin
 
Erlang ruby
Yuri Zhloba
 
Что и почему писать на Erlang
Max Lapshin
 
Erlang мгновенное просветление
Maxim Sokhatsky
 
Алексей Туля - А нужен ли вам erlang?
Minsk Linux User Group
 
Максим Лапшин — введение в Erlang
Александр Ежов
 
Как устроен мониторинг в Badoo
Uptime Community
 
Отличие Erlang от объектных языков
Max Lapshin
 

What's hot (20)

PDF
Лев Валкин — Кое-что про Erlang
Yury Yurevich
 
KEY
Erlang for Yandex
Max Lapshin
 
PDF
Опыт использования Erlang в разработке многопользовательской игры
Yuri Zhloba
 
PDF
My talk on administering PostgreSQL
Alex Chistyakov
 
PPT
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
it-people
 
PDF
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
 
PDF
Erlang railsclub - 1
Max Lapshin
 
PDF
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Badoo Development
 
PDF
Автоматизированные рефакторинги: AST, FST и все-все-все
Кирилл Борисов
 
PDF
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
PDF
My talk on PgDay Russia 2014
Alex Chistyakov
 
PPTX
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest
 
PDF
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON
 
PDF
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Daniel Podolsky
 
PPTX
Why we did not choose Hadoop
Serguei Gitinsky
 
PPTX
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Anton Baranov
 
PDF
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON
 
PDF
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Yandex
 
PDF
Sivko
kuchinskaya
 
PDF
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
Лев Валкин — Кое-что про Erlang
Yury Yurevich
 
Erlang for Yandex
Max Lapshin
 
Опыт использования Erlang в разработке многопользовательской игры
Yuri Zhloba
 
My talk on administering PostgreSQL
Alex Chistyakov
 
Автоматизированные рефакторинги: AST, FST и все-все-все - Кирилл Борисов, Яндекс
it-people
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Ontico
 
Erlang railsclub - 1
Max Lapshin
 
Илья Аблеев – Zabbix в Badoo: реагируем быстро и качественно
Badoo Development
 
Автоматизированные рефакторинги: AST, FST и все-все-все
Кирилл Борисов
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
My talk on PgDay Russia 2014
Alex Chistyakov
 
CodeFest 2012. Аксёнов А. — Как мы разрабатываем Sphinx
CodeFest
 
SECON'2016. Тюменцев Евгений, Разработка надежных параллельных, распределенны...
SECON
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Daniel Podolsky
 
Why we did not choose Hadoop
Serguei Gitinsky
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Anton Baranov
 
SECON'2016. Васильков Василий, Серверное программирование сегодня
SECON
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Yandex
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Yandex
 
Ad

Viewers also liked (12)

PDF
Максим Харченко. Erlang lincx
Alina Dolgikh
 
PDF
Eugene Burmako
Volha Banadyseva
 
PPTX
F# Eye For The C# Guy - f(by) Minsk 2014
Phillip Trelford
 
PDF
Denis Lebedev. Non functional swift.
Alina Dolgikh
 
PPT
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
rit2011
 
PDF
Алексей Воинов — Языки программирования
Yandex
 
PDF
Все, что вы хотели знать о Rebar, но ленились прочитать
Yuri Zhloba
 
PDF
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest
 
PPTX
Дополненная реальность через веб камеру
Михаил Кокорев
 
PDF
Heather Miller
Volha Banadyseva
 
PDF
Tame cloud complexity with F#-powered DSLs
Yan Cui
 
PDF
Краткое введение в Erlang/OTP
Alexander Byndyu
 
Максим Харченко. Erlang lincx
Alina Dolgikh
 
Eugene Burmako
Volha Banadyseva
 
F# Eye For The C# Guy - f(by) Minsk 2014
Phillip Trelford
 
Denis Lebedev. Non functional swift.
Alina Dolgikh
 
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
rit2011
 
Алексей Воинов — Языки программирования
Yandex
 
Все, что вы хотели знать о Rebar, но ленились прочитать
Yuri Zhloba
 
CodeFest 2012. Трескин М. — Разработка Web-приложений на Comet-сервере Nitrogen
CodeFest
 
Дополненная реальность через веб камеру
Михаил Кокорев
 
Heather Miller
Volha Banadyseva
 
Tame cloud complexity with F#-powered DSLs
Yan Cui
 
Краткое введение в Erlang/OTP
Alexander Byndyu
 
Ad

Similar to Максим Лапшин. Erlang production (20)

PPT
Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Ла...
Ontico
 
KEY
Erlyvideo — сервер потокового видео.
Max Lapshin
 
ODP
GetDev.NET: Снова Эрланг
Maxim Krentovskiy
 
PDF
Там, где Rails не справляются
Max Lapshin
 
PPTX
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ontico
 
PDF
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
PDF
Erlang, который мы потеряли
Ivan Grishaev
 
PDF
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
PDF
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Fwdays
 
PDF
Баннерокрутилка на Erlang
Artyom Gavrichenkov
 
PDF
“Чем хорош Erlang вообще и для веб-разработки в частности?”

Olga Lavrentieva
 
PDF
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Ontico
 
PDF
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
FProg
 
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
PPT
Макс Лапшин Erlyvideo
Siel01
 
PDF
Павел Брылов, Skype
Ontico
 
PDF
Денис Иванов
CodeFest
 
PPTX
Breaking logs
Ilya Sergeev
 
PDF
Max Lapshin Erlyvideo V1
guest092df8
 
PPTX
Daemons In Web on #devrus
Alex Chistyakov
 
Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Ла...
Ontico
 
Erlyvideo — сервер потокового видео.
Max Lapshin
 
GetDev.NET: Снова Эрланг
Maxim Krentovskiy
 
Там, где Rails не справляются
Max Lapshin
 
Проектирование высоконагруженного масштабируемого веб-сервиса в облаке на при...
Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
Erlang, который мы потеряли
Ivan Grishaev
 
"YT — новая платформа распределённых вычислений". Максим Бабенко, Яндекс.
Yandex
 
Maksym Bezuglyi "Universal highload patterns on a specific example of a game ...
Fwdays
 
Баннерокрутилка на Erlang
Artyom Gavrichenkov
 
“Чем хорош Erlang вообще и для веб-разработки в частности?”

Olga Lavrentieva
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Ontico
 
Дмитрий Грошев, Фёдор Гоголев. Erlang и Haskell в production: проблемы и решения
FProg
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Макс Лапшин Erlyvideo
Siel01
 
Павел Брылов, Skype
Ontico
 
Денис Иванов
CodeFest
 
Breaking logs
Ilya Sergeev
 
Max Lapshin Erlyvideo V1
guest092df8
 
Daemons In Web on #devrus
Alex Chistyakov
 

More from Alina Dolgikh (19)

PDF
Reactive streams. Slava Schmidt
Alina Dolgikh
 
PDF
Scala for the doubters. Максим Клыга
Alina Dolgikh
 
PDF
Orm на no sql через jpa. Павел Вейник
Alina Dolgikh
 
PDF
No sql unsuccessful_story. Владимир Зеленкевич
Alina Dolgikh
 
PDF
Java Concurrency in Practice
Alina Dolgikh
 
PPTX
Appium + selenide comaqa.by. Антон Семенченко
Alina Dolgikh
 
PDF
Cracking android app. Мокиенко Сергей
Alina Dolgikh
 
PDF
David Mertz. Type Annotations. PyCon Belarus 2015
Alina Dolgikh
 
PDF
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Alina Dolgikh
 
PDF
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
Alina Dolgikh
 
PDF
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Alina Dolgikh
 
PDF
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
Alina Dolgikh
 
PDF
Austin Bingham. Transducers in Python. PyCon Belarus
Alina Dolgikh
 
PDF
Austin Bingham. Python Refactoring. PyCon Belarus
Alina Dolgikh
 
PPTX
Пиар в стартапе: извлекаем максимум пользы. Алексей Лартей
Alina Dolgikh
 
PDF
Подготовка проекта к первому раунду инвестиций. Дмитрий Поляков
Alina Dolgikh
 
PPT
Как составлять правильный тизер для инвесторов? Никита Рогозин
Alina Dolgikh
 
PDF
Startup belarus pres_khamiankova
Alina Dolgikh
 
PPTX
Pr talk lartey
Alina Dolgikh
 
Reactive streams. Slava Schmidt
Alina Dolgikh
 
Scala for the doubters. Максим Клыга
Alina Dolgikh
 
Orm на no sql через jpa. Павел Вейник
Alina Dolgikh
 
No sql unsuccessful_story. Владимир Зеленкевич
Alina Dolgikh
 
Java Concurrency in Practice
Alina Dolgikh
 
Appium + selenide comaqa.by. Антон Семенченко
Alina Dolgikh
 
Cracking android app. Мокиенко Сергей
Alina Dolgikh
 
David Mertz. Type Annotations. PyCon Belarus 2015
Alina Dolgikh
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Alina Dolgikh
 
Кирилл Борисов. Code style_checking_v2. PyCon Belarus 2015
Alina Dolgikh
 
Володимир Гоцик. Getting maximum of python, django with postgres 9.4. PyCon B...
Alina Dolgikh
 
Андрей Солдатенко. Разработка высокопроизводительныx функциональных тестов д...
Alina Dolgikh
 
Austin Bingham. Transducers in Python. PyCon Belarus
Alina Dolgikh
 
Austin Bingham. Python Refactoring. PyCon Belarus
Alina Dolgikh
 
Пиар в стартапе: извлекаем максимум пользы. Алексей Лартей
Alina Dolgikh
 
Подготовка проекта к первому раунду инвестиций. Дмитрий Поляков
Alina Dolgikh
 
Как составлять правильный тизер для инвесторов? Никита Рогозин
Alina Dolgikh
 
Startup belarus pres_khamiankova
Alina Dolgikh
 
Pr talk lartey
Alina Dolgikh
 

Максим Лапшин. Erlang production

  • 1. Erlang в настоящем продакшне Максим Лапшин Эрливидео [email protected]
  • 2. Пишем про ФП, но пишем не на ФП?
  • 3. • Бизнесу нужен продукт, а не софт • Программистам интересно писать софт • Нет опыта в продакшне, значит небезопасно делать продукт на таком софте • Бизнес избегает ФП • Без коммерческого применения нет опыта • Замкнутый цикл
  • 4. Опасения бизнеса в непредсказуемости технологии
  • 5. Эрланг годится для коммерческой разработки!
  • 6. Эрливидео • Высоконагруженный видеостриминговый сервер (10 ГБит/с без проблем) • 5 лет разработки и успешной продажи ПО • Беспроблемный найм людей • Очень мало критичных багов (и те в C) • Крайне быстрая разработка • Без эрланга мы бы не справились!
  • 7. Эрланг в продакшне • Надежно • Дешево • Предсказуемо • Имеет смысл использовать для коммерческого софта
  • 8. Продакшн познается через год • Софт дорастает до использования живыми пользователями • Начинается поддержка старого кода • Приходят новые программисты, перед которыми стыдно за исходники • Пользователи создают нагрузку
  • 9. Проблемы эксплуатации • Работа со своим и чужим кодом • Работа с багами на недевелоперских серверах • Поведение под нагрузкой
  • 10. Поддержка старого кода • Через год даже свой код уже не вспомнить • Автора кода не достать, он пошел на IPO • Статической типизации в эрланге нет
  • 11. Реалии старого кода • Код 10-летней давности запускается и работает • Очень сильная обратная совместимость между версиями VM • Немутабельность сильно помогает отладке • Не-OTP код — зло, OTP код — хорошо
  • 12. Старый код в Эрливидео • Есть куски кода, которым по 5 лет • Иногда проводятся массовые рефакторинги • Интеграционные тесты помогают, юнит-тесты нет
  • 13. Борьба с багами • 95% падений рантайма — нехватка памяти • Нехватка памяти почти всегда — нехватка контроля за пайплайном данных • Остальное лечится чтением стектрейсов сверху вниз, потому что let it fail • Если пишем хорошо, то ошибки изолируются по процессам
  • 14. Алгоритмы багфикса • По нажатию кнопки «загрузить логи», система сама пакует всё • Пользователи всегда вырезают самое интересное из логов, их логи мы не читаем • Изучаем стектрейсы и периодический дамп самых прожорливых процессов • Пытаемся восстановить ситуацию у себя. Если не можем, идем на сервер заказчика
  • 15. Авральные работы на сервере • recon, htop в помощь что бы понять, какой ресурс сожран • to_erl дает больший контроль, чем другие варианты (remsh и ssh) • erlang:processes() что бы найти самого обжору • ищем причину утечки памяти и/или тормозов • непроходимость в пайплайне данных -> утечка памяти
  • 16. Интроспекция • supervisor:which_children/1 для обхода структуры • sys:get_state/1 что бы добраться до нутра • lager:pr/2 для изучения состояния • lager:md/1 для тегирования логов • самодельные хелперы: ems_debug:top(binary)
  • 17. Само-мониторинг • На сервера не набегаешься • Система должна сама себя мониторить • Поиск источника багов • Поиск потенциальных тормозов (для highload)
  • 18. Мониторинги • Потребление памяти (раз в 10 секунд) • Мониторинг длин очередей • Мониторинг размера ets таблиц • Внутренние очереди • Контроль за тем, что данные втекают не быстрее, чем вытекают
  • 19. Capacity control • Что бы не лопнуть, надо уметь отказываться • Поиск утечек памяти и багов показывает бутылочные горлышки • Узкие места должны сообщать о собственной загрузке • Без обратного контроля можно быстро, но недолго
  • 20. Работа под нагрузкой • Эрланг — одна из нескольких multicore платформ • Можно получить линейное ускорение по ядрам • Интроспекция на живом продакшне под полной нагрузкой • Как всё не затормозить?
  • 21. Шаги на пути к Highload • Развязывание узких мест: одно ядро не может, а 10 смогут • Ускорение линейного кода • Перенос данных в память
  • 22. Развязывание узких мест • Singleton это узкое место, потому что одно ядро • gen_server:call сам по себе не спасает • Нужно разносить однопроцессные сервисы на несколько ядер • Способы: пулы, шардирование, ets • ETS — это очень быстро и эффективно
  • 23. Примеры распараллеливания • У одного открытого файла пул процессов, читающих с диска • В comet сервере шардинг процессов мониторинга по hash(channel_id) % pool_size • Подписка через ets типа bag: по ключу много значений сразу
  • 24. Профилирование • Возможность профилировать отдельный процесс • В эрланге оно всё так себе • Анализ стектрейсов • Тайминги в заголовках HTTP ответов • Не особо много хитростей
  • 25. ETS для памяти • In-memory database • Великолепно масштабируется на 40-70 ядер • Прекрасно годится для отдачи готовых данных • Рекомендуется вместе с zerocopy протоколами • Вторичные индексы руками
  • 26. Примеры в Эрливидео • Раздача live потоков: данные готовятся заранее, укладываются в ets таблицы. 20 Гбит/с без надрыва • Стриминг файлов с диска: пляски с бубном и 10-15 Гбит/с можно
  • 27. Архитектура стриминга с диска • В линуксе синхронное чтение с диска, тред на запрос. • Держим 50 или 1000 одновременных запросов к диску • Процесс файла — арбитр между динамическим пулом процессов ридеров • Ридеры идут в лимитированную очередь с таймаутом: N одновременных запросов и M в ожидании • Мониторинг загрузки диска и времени чтения • Спасибо POSIX API
  • 28. Продакшн • Писать код на Эрланге интересно • Возможно устранять баги в бою • Можно поддерживать старый код и жить с ним • Можно делать крайне производительный код, притом очень быстро