現在の状況: 私は遅れている仕事の労働者N人のレールアプリを持っています。あるマシンにSSH要求を送信したいときはいつでも、私はその作業者のためのタスクを作成します。ワーカーは次のようなことを行います。Rails +遅延ジョブ:SSH接続プール
Net:SSH.start(hostname, username, :password => pass) do |ssh|
ssh.exec!(command)
end
そのようなタスクを1つずつ、または5〜10分以内に50回実行する。この場合、各タスクは個別の接続を開きます。これは効果的ではなく、接続が多すぎるためにターゲットサーバーによってブロックされることがあります。
私が欲しいもの:開いた接続をどこかに保存し、各作業者が再利用しました。ファイル/データベース/キャッシュ内の接続を格納
- は、彼らが 直列化可能でないとして可能ではないことになります。各ワーカーは、何とかしてから接続を取得しているので、ちょうど私がを試してみました何
ssh.exec!(command)
を実行します
解決方法はありますか?他のアイデア?ありがとう!!
あなたのタスクをしばらく保持しているのですか、SSHタスクをただ非同期化していますか? –
タスクは実際には遅延されていませんが、キューに追加されたものです。たとえば、sshコマンドの束が実行され、次にタスクB(5-10分)、次にタスクC(再びssh要求)が実行される操作Aがあります。 –