Ограничение резьбы рельсов в производстве

Я работаю над приложением 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 - это не программное обеспечение, созданное для такого рода задач. Ни один не Руби.

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