Ограничение резьбы рельсов в производстве - PullRequest
0 голосов
/ 06 января 2019

Я работаю над приложением 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 Ответ

0 голосов
/ 06 января 2019

Обычно такие задачи называются с противодавлением . Максимальное количество потоков в системах UNIX может варьироваться от 10 КБ до максимально допустимых 500 КБ.

Наиболее распространенный способ справиться с обратным давлением - это подключить быструю очередь между ними (например, RabbitMQ или что-то в этом роде) и увеличить количество потребителей в очереди по мере увеличения нагрузки на запросы на выполнение.

100 / с - ничто, но если вы планируете обрабатывать тысячи одновременных соединений, я настоятельно рекомендую дважды переосмыслить язык выбора. Rails - это не программное обеспечение, созданное для такого рода задач. Руби тоже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...