31
Там, где рельсы не справляются Макс Лапшин [email protected]

Там, где Rails не справляются

Embed Size (px)

DESCRIPTION

Рельсы прекрасный инструмент, но в некоторых ситуациях они не справляются. В этом докладе рассказывается о таких ситуациях и одном из вариантов решения

Citation preview

Page 1: Там, где Rails не справляются

Там, где рельсы несправляются

Макс Лапшин[email protected]

Page 2: Там, где Rails не справляются

Как делали веб в древности?

● Программы на С● Кошмар и ужас● Баснословно долго и дорого● Сплошные велосипеды● Перл немножко облегчил

Page 3: Там, где Rails не справляются

Мир веб-приложений (PHP)

● малое время жизни программы● нет контроля за ресурсами● share nothing● внешняя персистентность (Mysql)● запрос-ответ● очень удобно делать магазинчики!● сборка мусора? Не слышали о таком

Page 4: Там, где Rails не справляются

Rails

● Всё то же самое, но в совершенстве● Самое правильное расслоение● Самый читаемый код● Web 1.5

Page 5: Там, где Rails не справляются

Веб меняется

● Растут нагрузки● Запрос-ответ,ответ,ответ● Просто ответ, ответ, ответ

Page 6: Там, где Rails не справляются

Масштабируемся железом?

20 мс CPU на обработку запроса8 ядер400 RPS — максимум

Page 7: Там, где Rails не справляются

Масштабируемся железом?

Если запросы дергают сеть, то при 100 МБ на воркер и 32 ГБ, лимит по памяти — 300-500 одновременных соединений

Page 8: Там, где Rails не справляются

C10K?

Не слышали

Page 9: Там, где Rails не справляются

C100K, C1M?

Можно забыть

Page 10: Там, где Rails не справляются

Масштабируемся железом?

Расти с 10 до 100 серверов окРасти со 100 до 1000 серверов — не ок

Page 11: Там, где Rails не справляются

Что лимитирует производительность?

● Память● CPU● Ненужные обращения к ресурсам

Page 12: Там, где Rails не справляются

Что с запросами и ответами?

● Сервер теперь сам шлет данные клиенту● Подключенные клиенты (!)● Состояние в памяти (!)● Все достижения PHP рушатся как

карточный домик

Page 13: Там, где Rails не справляются

Как бы так обслуживать клиентовиз одной копии программы?

Page 14: Там, где Rails не справляются

Варианты

● Eventmachine● Twisted● Node.js

Page 15: Там, где Rails не справляются

Проблемы

● Управление ресурсами● Обработка ошибок● Управление ресурсами● Контроль нагрузки● Управление ресурсами● Управление ресурсами

Page 16: Там, где Rails не справляются

Ресурсы

● Память● Внешние соединения● Память● Локальное железо (диски и т.п.)● Память

Page 17: Там, где Rails не справляются

Внезапно вы можете перегрузить собственный сервер!

Page 18: Там, где Rails не справляются

Ошибки

● Как обрабатывать?● Как отпускать ресурсы?● Как освобождать память?

Page 19: Там, где Rails не справляются

Утечка ресурсов — бич долгоживущей программы

Page 20: Там, где Rails не справляются

Контроль нагрузки

● Глубокая тема● Надо уметь говорить нет: HTTP 503● Иногда лучше подольше, да понадежнее● Back pressure

Page 21: Там, где Rails не справляются

Erlang

● четкий● резкий

Page 22: Там, где Rails не справляются

Erlang

● multicore● изоляция данных, клиентов и проблем● удобный само-мониторинг● концепция процессов

Page 23: Там, где Rails не справляются

Где может пригодиться?

● онлайн игры● pub/sub, кометы и прочие мессенеджеры● брокеры рекламы, ссылок и т.п.● долгоживущие серверные задачи● прочие in-memory API сервисы

Page 24: Там, где Rails не справляются

Ruby/Python

● Привычно● Нет multicore● Кооперативный

шедулинг● Единая память● stop-world GC● плохая

интроспекция

Erlang

● Отлежавшаяся технология

● true multicore● вытесняющий

шедулинг● нет пауз в GC● hot code reload● изоляция

ресурсов и ошибок● интроспекция

Page 25: Там, где Rails не справляются

Erlang

● Обработка данных в памяти● Легко управляемое состояние системы● Опциональная сериализация в БД● Централизованная запись● Упрощенное развертывание (одна

программа)● Смена привычек (выкинуть delayed_job)● Одна из самых совершенных VM

Page 26: Там, где Rails не справляются

Как это визуализировать?

Page 27: Там, где Rails не справляются

Веб-интерфейсы

● JS + HTML + HTTP API● Erlang + Bootstrap (Nitrogen)

Page 28: Там, где Rails не справляются

Nitrogen

● Выбор для админского интерфейса● Ни строчки JS● Всё управление с сервера● DSL не только для генерации, но и для

модификации● Активное состояние страницы

Page 29: Там, где Rails не справляются

Проблемы Erlang

● Беда с ORM (на уровне Rails 0.5)● Бизнес-код очень говорливый● Непривычные логи

Page 30: Там, где Rails не справляются

Резюме

● Рельсы очень круто● Иногда не очень● Иногда Eventmachine спасает● Иногда нет● Тогда может спасти эрланг● Подключенные клиенты, C100K и т.п.

Page 31: Там, где Rails не справляются

Вопросы?

Макс Лапшин[email protected]