Ограничение резьбы рельсов в производстве
Я работаю над приложением Uber Like/ Cab. Я использую Action Cable для этой цели. После создания нового сервера заказов получите список из 10 ближайших водителей и отправьте каждому по очереди детали заказа (с паузой в 40 секунд).
Thread.new do
nearest_drivers.each do |id|
order_data_for_driver = { ... }
ActionCable.server.broadcast("driver_#{id}", order_data_for_driver)
sleep 40
Thread.exit if order.reload.canceled_by_user || order.trip
end
cancel_data = {canceled_by_timeout: true }
ActionCable.server.broadcast("order_#{order.id}", cancel_data )
end
Есть ли ограничение на количество потоков, которые рельсы в производственном режиме могут запускать одновременно? Например, если 100 пользователей будут создавать новые заказы. Какое изящное решение можно использовать?
1 ответ
Обычно такого рода задачи называют противодействием. Максимальное количество потоков в системах UNIX может варьироваться от 10 КБ до максимально допустимых 500 КБ.
Наиболее распространенный способ справиться с обратным давлением - подключить быструю очередь между ними (например, RabbitMQ или что-то в этом роде) и увеличить количество потребителей в очереди по мере увеличения загрузки запросов на продолжение.
100 / с - ничто, но если вы планируете обрабатывать тысячи одновременных подключений, я настоятельно рекомендую дважды переосмыслить выбранный язык. Rails - это не программное обеспечение, созданное для такого рода задач. Ни один не Руби.