Там, где rails не справляются
DESCRIPTION
Рельсы прекрасный инструмент, но в некоторых ситуациях они не справляются. В этом докладе рассказывается о таких ситуациях и одном из вариантов решенияTRANSCRIPT
![Page 2: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/2.jpg)
Как делали веб в древности?
● Программы на С● Кошмар и ужас● Баснословно долго и дорого● Сплошные велосипеды● Перл немножко облегчил
![Page 3: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/3.jpg)
Мир веб-приложений (PHP)
● малое время жизни программы● нет контроля за ресурсами● share nothing● внешняя персистентность (Mysql)● запрос-ответ● очень удобно делать магазинчики!● сборка мусора? Не слышали о таком
![Page 4: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/4.jpg)
Rails
● Всё то же самое, но в совершенстве● Самое правильное расслоение● Самый читаемый код● Web 1.5
![Page 5: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/5.jpg)
Веб меняется
● Растут нагрузки● Запрос-ответ,ответ,ответ● Просто ответ, ответ, ответ
![Page 6: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/6.jpg)
Масштабируемся железом?
20 мс CPU на обработку запроса8 ядер400 RPS — максимум
![Page 7: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/7.jpg)
Масштабируемся железом?
Если запросы дергают сеть, то при 100 МБ на воркер и 32 ГБ, лимит по памяти — 300-500 одновременных соединений
![Page 8: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/8.jpg)
C10K?
Не слышали
![Page 9: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/9.jpg)
C100K, C1M?
Можно забыть
![Page 10: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/10.jpg)
Масштабируемся железом?
Расти с 10 до 100 серверов окРасти со 100 до 1000 серверов — не ок
![Page 11: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/11.jpg)
Что лимитирует производительность?
● Память● CPU● Ненужные обращения к ресурсам
![Page 12: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/12.jpg)
Что с запросами и ответами?
● Сервер теперь сам шлет данные клиенту● Подключенные клиенты (!)● Состояние в памяти (!)● Все достижения PHP рушатся как
карточный домик
![Page 13: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/13.jpg)
Как бы так обслуживать клиентовиз одной копии программы?
![Page 14: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/14.jpg)
Варианты
● Eventmachine● Twisted● Node.js
![Page 15: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/15.jpg)
Проблемы
● Управление ресурсами● Обработка ошибок● Управление ресурсами● Контроль нагрузки● Управление ресурсами● Управление ресурсами
![Page 16: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/16.jpg)
Ресурсы
● Память● Внешние соединения● Память● Локальное железо (диски и т.п.)● Память
![Page 17: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/17.jpg)
Внезапно вы можете перегрузить собственный сервер!
![Page 18: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/18.jpg)
Ошибки
● Как обрабатывать?● Как отпускать ресурсы?● Как освобождать память?
![Page 19: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/19.jpg)
Утечка ресурсов — бич долгоживущей программы
![Page 20: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/20.jpg)
Контроль нагрузки
● Глубокая тема● Надо уметь говорить нет: HTTP 503● Иногда лучше подольше, да понадежнее● Back pressure
![Page 21: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/21.jpg)
Erlang
● четкий● резкий
![Page 22: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/22.jpg)
Erlang
● multicore● изоляция данных, клиентов и проблем● удобный само-мониторинг● концепция процессов
![Page 23: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/23.jpg)
Где может пригодиться?
● онлайн игры● pub/sub, кометы и прочие мессенеджеры● брокеры рекламы, ссылок и т.п.● долгоживущие серверные задачи● прочие in-memory API сервисы
![Page 24: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/24.jpg)
Ruby/Python
● Привычно● Нет multicore● Кооперативный
шедулинг● Единая память● stop-world GC● плохая
интроспекция
Erlang
● Отлежавшаяся технология
● true multicore● вытесняющий
шедулинг● нет пауз в GC● hot code reload● изоляция
ресурсов и ошибок● интроспекция
![Page 25: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/25.jpg)
Erlang
● Обработка данных в памяти● Легко управляемое состояние системы● Опциональная сериализация в БД● Централизованная запись● Упрощенное развертывание (одна
программа)● Смена привычек (выкинуть delayed_job)● Одна из самых совершенных VM
![Page 26: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/26.jpg)
Как это визуализировать?
![Page 27: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/27.jpg)
Веб-интерфейсы
● JS + HTML + HTTP API● Erlang + Bootstrap (Nitrogen)
![Page 28: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/28.jpg)
Nitrogen
● Выбор для админского интерфейса● Ни строчки JS● Всё управление с сервера● DSL не только для генерации, но и для
модификации● Активное состояние страницы
![Page 29: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/29.jpg)
Проблемы Erlang
● Беда с ORM (на уровне Rails 0.5)● Бизнес-код очень говорливый● Непривычные логи
![Page 30: Там, где Rails не справляются](https://reader033.vdocuments.mx/reader033/viewer/2022051013/54923189b479598e6a8b561a/html5/thumbnails/30.jpg)
Резюме
● Рельсы очень круто● Иногда не очень● Иногда Eventmachine спасает● Иногда нет● Тогда может спасти эрланг● Подключенные клиенты, C100K и т.п.