Как выполнить подпроцессы в Ruby максимально быстро?

У нас есть приложение Rails, которое взаимодействует с iOS и веб-клиентами. В настоящее время мы порождаем подпроцессы из контроллера Rails, используя Open3 для извлечения и отправки данных на сервер чата, который запускает node.js с MongoDB. Однако после нескольких дней работы мы обнаружили, что подпроцессы сделали наше приложение на Rails очень медленным и значительно увеличили загрузку процессора.

Мы знаем, что долгосрочное решение состоит в том, чтобы обернуть наш чат-сервер инфраструктурой REST API, такой как Express. Но в краткосрочной перспективе мы бы хотели быстро решить, как ускорить выполнение наших подпроцессов (порождение, выполнение и т. Д.).

Есть идеи?

1 ответ

Это очень распространенная проблема (отправка сообщений в фоновом режиме), но ваше решение не очень эффективно. Управление процессами сложно. В общем, вы хотите иметь процессор фоновых заданий или какую-то очередь сообщений. Zeromq, redis, отложенная работа и т. Д. Конечно, использование инфраструктуры REST API предпочтительнее, но это не единственное решение. Вот несколько вариантов для рассмотрения:

Для супер скорости, вы можете использовать что-то вроде:

http://zeromq.org/

Для общей обработки фоновых заданий:

https://www.ruby-toolbox.com/categories/Background_Jobs

Другие вопросы по тегам