Является ли Thin параллельным при использовании с Rails/ActiveRecord?

наше приложение Rails 4 работает на thin -s 16 ... многопроцессорном сервере с Apache в качестве внешнего интерфейса и его обратным прокси-сервером, обрабатывающим внутренние запросы. Все работает отлично и хорошо, производительность в порядке для нашего количества пользователей.

Поскольку все работает сразу «из коробки», я особо не беспокоился о том, как на самом деле работает Thin. Недавно я наткнулся на все преимущества Fibers и EventMachine и много читал об этом.

Thin использует EventMachine для обработки запросов Rack. Таким образом, по замыслу он сможет обрабатывать несколько запросов параллельно с помощью одного процесса ruby. К сожалению, в то время как документация Thin достаточно функциональна, чтобы вы могли запустить сервер за несколько минут работы, в ней довольно мало информации о внутренней работе.

Прав ли я, предполагая, что все разговоры о «параллелизме» становятся спорными, как только я запускаю Thin с Rails? ActiveRecord, драйверы БД, обработка шаблонов и т. д., скорее всего, не поддерживают EM, не используют волокна и т. д., поэтому в любом случае будут блокировать один процесс, в то же время используя большую часть времени обработки на стороне сервера в тяжелых БД. Приложения.

Все мои исследования, кажется, ведут к этому заключению; к сожалению, сайт/документы Thin ничего не говорят об этом. Честно говоря, я сбит с толку, как слово «одновременно» вообще появляется здесь...

Может ли кто-нибудь прояснить это для меня? Я упустил какую-то фундаментальную часть информации или это «параллелизм», рекламируемый на http://code.macournoyer.com/thin/ имел в виду созданные вручную серверы Rack, которые не используют Rails или другое «тяжелое» промежуточное ПО?

Спасибо!


person AnoE    schedule 05.11.2015    source источник


Ответы (1)


Вы правы, при использовании с Rails это не будет параллельно. Любой вызов драйвера/файловой системы db заблокирует весь интерпретатор ruby. Это может быть частично изменено в Rails 5, но пока вам просто нужно запустить много рабочих процессов.

person Dmitry Sokurenko    schedule 05.11.2015
comment
Спасибо, что подтвердили мои подозрения. - person AnoE; 05.11.2015