Как выполнить подпроцессы в Ruby максимально быстро?
У нас есть приложение Rails, которое взаимодействует с iOS и веб-клиентами. В настоящее время мы порождаем подпроцессы из контроллера Rails, используя Open3 для извлечения и отправки данных на сервер чата, который запускает node.js с MongoDB. Однако после нескольких дней работы мы обнаружили, что подпроцессы сделали наше приложение на Rails очень медленным и значительно увеличили загрузку процессора.
Мы знаем, что долгосрочное решение состоит в том, чтобы обернуть наш чат-сервер инфраструктурой REST API, такой как Express. Но в краткосрочной перспективе мы бы хотели быстро решить, как ускорить выполнение наших подпроцессов (порождение, выполнение и т. Д.).
Есть идеи?
1 ответ
Это очень распространенная проблема (отправка сообщений в фоновом режиме), но ваше решение не очень эффективно. Управление процессами сложно. В общем, вы хотите иметь процессор фоновых заданий или какую-то очередь сообщений. Zeromq, redis, отложенная работа и т. Д. Конечно, использование инфраструктуры REST API предпочтительнее, но это не единственное решение. Вот несколько вариантов для рассмотрения:
Для супер скорости, вы можете использовать что-то вроде:
Для общей обработки фоновых заданий: