Целесообразно ли использовать Celluloid/Sidekiq & Rails 3.2 с MRI Ruby и приложением, ранее не предназначенным для обеспечения безопасности потоков?
У меня есть большой проект, работающий на MRI Ruby и Rails 3.2 для Passenger, с приложением, которое не было разработано с учетом безопасности потоков, и это приложение обрабатывает почтовые сообщения через DelayedJob, и база данных платит за это высокую цену.
Некоторые возможные проблемы упомянуты в sidekiq railscast http://railscasts.com/episodes/366-sidekiq включая:
- ограничение на соединение с базой данных (при использовании пула потоков, равного 1, предел соединения с БД должен быть удвоен)
- потокобезопасность (это, вероятно, пробка шоу)
- волоконно-безопасности? Это проблема с AR?
Итак, вопрос:
- Насколько жизнеспособным является сделать большой проект потокобезопасным, чтобы генерация почты работала в потоках внутри пассажирского процесса? (рассылки достаточно сложны, чтобы зависеть от AR)
- тот же вопрос при использовании sidekiq: "Насколько жизнеспособно сделать большой проект потокобезопасным, чтобы генерация почты работала с использованием sidekiq? (почтовые сообщения достаточно сложны, чтобы зависеть от AR)"
- кроме ограничения соединения с БД и безопасности потоков, есть ли что-то еще, чтобы рассмотреть или менее очевидные ошибки, которые я не смог предвидеть?
1 ответ
Я думаю, что вы здесь что-то путаете.
Я никогда не использовал sidekiq, но я не думаю, что вы должны включить thread_safe!
в вашем приложении Rails, чтобы использовать его.
AFAIK, это просто для обработки запроса, чтобы иметь блокировку или отсутствие блокировки в thread_safe! режим, поэтому процесс Rails может обрабатывать несколько запросов параллельно.
При использовании sidekiq это не должно быть одной из ваших проблем. Только ваш код обработки электронной почты должен быть поточно-ориентированным. Только тот, кто сопровождает проект, может ответить на этот вопрос.