Развертывание среды RubyonRails для промышленного использования.Методы, технологии, приемы.Антон Веснин (locum.ru)
Что такое промышленное использование?≠Промышленное использованиеЗапуск в режиме разработки(production)(development)
Что такое промышленное использование?≠Промышленное использованиеЗапуск в режиме разработки(production)(development)- Подробное логирование- Отладочная информация
Что такое промышленное использование?≠Промышленное использованиеЗапуск в режиме разработки(production)(development)- Стабильность- Производительность- Поддержка и развитие- Подробное логирование- Отладочная информация
Элементы системыСервер приложенийКод приложенияБаза данныхДополнительные приложения (прокси, memcached и т.п.)
Автоматизация процесса размещения новой версии кодаCapistrano- Сохранение копии предыдущей версии- Загрузка новой версии кода- Изменения в базе данных (по необходимости)- Перезапуск сервера приложений Откат на предыдущую версию в случае сбояАвтоматизация процесса размещения новой версии кодаУдобства:- Система релизов- Легко создавать свои методы и задачиНеудобство:- Требует специальной структуры директорий на сервере и ssh-доступ
Mongrelhttp://github.com/fauna/mongrelMongrel 0Proxy — серверMongrel 1Mongrel 2Mongrel 3ПользователиMongrel NСвязь между Mongrel и proxy-сервером через tcp-порт
Mongrelhttp://github.com/fauna/mongrelПлюсы:- Простота: один сервер — один запрос- Сервера не связаны между собой- Легко увеличить количество серверов- Работает с JAVA и JRuby
Mongrelhttp://github.com/fauna/mongrelПлюсы:- Простота: один сервер — один запрос- Сервера не связаны между собой- Легко увеличить количество серверов- Работает с JAVA и JRubyМинусы:- Потребление оперативной памяти- Долгий перезапуск- Проблемы с разграничением прав на tcp-порты
Thinhttp://code.macournoyer.com/thin/Thin 0Proxy — серверThin 1Thin 2Thin 3Thin NСвязь между Thin и proxy сервером через TCP-порт или UNIX-сокетЧерез сокет - быстрее
Thinhttp://code.macournoyer.com/thin/Плюсы:- Быстрее чем Mongrel- Может работать через Unix-сокет- Просто увеличить количество серверов
Thinhttp://code.macournoyer.com/thin/Плюсы:- Быстрее чем Mongrel- Может работать через Unix-сокет- Просто увеличить количество серверовМинусы:- Потребление оперативной памяти- Долгий перезапуск
Unicornhttp://unicorn.bogomips.org Более технологичен:Есть мастер-процесс и много процессов обработчиковМастер следит за обработчиками, балансирует нагрузку
Unicornhttp://unicorn.bogomips.org ОбработчикUnicornMasterОбработчикProxyсерверРазделяемый сокетОбработчикПользователиОбработчик
Преимущества такого подхода:1. Мастер всегда знает кто из обработчиков свободен2. Мастер может остановить обработчик по необходимости3.Если один из обработчиков аварийно завершился, почти мгновенно запускается новый4.Процесс перезапуска приложения можно сделать почти незаметным для пользователя
Перезапуск Unicorn с новой версией кодаProxyсерверРазделяемый сокетОбработчикПользователиUnicornMasterОбработчикОбработчикОбработчик
(этап 1)АдминистраторUSR2 сигналProxyсерверРазделяемый сокетОбработчикПользователиUnicornMasterОбработчикОбработчикОбработчик
(этап 2)НовыйUnicornMasterProxyсерверРазделяемый сокетОбработчикПользователиUnicornMasterОбработчикОбработчикОбработчик
(этап 3)ОбработчикНовыйUnicornMasterОбработчикОбработчикОбработчикProxyсерверРазделяемый сокетОбработчикПользователиUnicornMasterОбработчикОбработчикОбработчик
(этап 3)ОбработчикНовыйUnicornMasterОбработчикОбработчикОбработчикProxyсерверQUITсигналРазделяемый сокетОбработчикПользователиUnicornMasterОбработчикОбработчикОбработчик
(Перезапуск Unicornзавершен)ОбработчикНовыйUnicornMasterОбработчикОбработчикОбработчикProxyсерверРазделяемый сокетПользователи
Unicornhttp://unicorn.bogomips.org Плюсы:- Решается проблема долгой перезагрузки- Стабильность за счет мгновенного перезапуска обработчиков- Проще отслеживать нештатные ситуации
Unicornhttp://unicorn.bogomips.org Плюсы:- Решается проблема долгой перезагрузки- Стабильность за счет мгновенного перезапуска обработчиков- Проще отслеживать нештатные ситуацииМинусы:- Потребление памяти больше чем у thin
Passenger или mod railshttp://modrails.comОсобенности:- Не является самостоятельным сервером- Модуль для Apache 2 и Nginx- Рассчитан на запуск большого количества rails-приложений
Passenger или mod railshttp://modrails.comПлюсы:- Удобен для хостинг-серверов- Позволяет сократить единовременное потребление памяти- Возможность указать альтернативную версию ruby
Passenger или mod railshttp://modrails.comПлюсы:- Удобен для хостинг-серверов- Позволяет сократить единовременное потребление памяти- Возможность указать альтернативную версию rubyМинусы:- Не так быстр как thin- В случае работы с Nginx при нагрузке периодически возникают проблемы- Недостаточно возможностей лимитировать ресурсы
Jruby и Rails- Большое количество j2ee серверов- Возможность использовать java-классы из ruby
Организация отдачи статики Все рассмотренные сервера приложений могут отдавать статикуОрганизация отдачи статики- Все рассмотренные сервера приложений могут отдавать статику- Ни один из них не будет делать это действительно хорошо- Статические файлы должен отдавать быстрый веб-сервер (nginx, lighttpd, etc)
Организация отдачи статики- Все рассмотренные сервера приложений могут отдавать статику- Ни один из них не будет делать это действительно хорошо- Статические файлы должен отдавать быстрый веб-сервер (nginx, lighttpd, etc)- Организация отдачи статических данных после обработки запроса rails-кодом- X-Sedn-File и X-Accel-Redirect
Общие выводыМного проектов и не постоянная загрузка — Passenger
Общие выводыМного проектов и не постоянная загрузка — PassengerПостоянная нагрузка и критичен период простоя при перезапуска — Unicorn
Общие выводыМного проектов и не постоянная загрузка — PassengerПостоянная нагрузка и критичен период простоя при перезапуска — UnicornКритично потребление памяти и редки обновления — Thin или Unicorn
Общие выводыМного проектов и не постоянная загрузка — PassengerПостоянная нагрузка и критичен период простоя при перезапуска — UnicornКритично потребление памяти и редки обновления — Thin или Unicorn+Статические данные всегда отдаются веб-сервером
Спасибо за внимание!Вопросы?
Антон Веснинavesnin@locum.rulocum.ruПрезентация в электронном виде:labs.locum.ru/rit.ppt
антон веснин Rails Application Servers
антон веснин Rails Application Servers

антон веснин Rails Application Servers