1

いくつかのドメインが登録されているかどうかをユーザーが確認できるRailsを使用してWebサイトを構築しています。ロジックは次のように設計されています。

  1. ページにテキストフィールドがあり、ユーザーはいくつかのドメイン名を入力できます
  2. ユーザーcheckがボタンをクリックすると、入力がサーバーに送信されます
  3. サーバーは入力を取得し、バックグラウンドタスク(別のプロセスで実行されます)を作成し、「今すぐチェックしています...」などのテキストをすぐにユーザーに返します
  4. バックグラウンドタスクは、ドメイン名を別のサイトに投稿し、応答を取得し、それを解析して有用な情報を取得してから、データをグロブルメモリハッシュに配置します(タスクには3秒かかります)
  5. このページには「checkingnow...」が含まれており、javascript関数があり、チェック結果を取得するようサーバーに要求します。結果が出るまで2秒ごとに実行されます。
  6. 「ステータス確認要求」を処理するためのアクションがサーバー側にあります。Globleメモリハッシュをチェックし、結果を見つけて返します。それ以外の場合は「[]」を返します。

(私はRails 2.3.8、delayed_jobを使用しています)

私はJava開発者でした。これは、Javaで行うことです。しかし、「遅延ジョブワーカー」と「レール」はプロセスが異なるため、「グロブルメモリハッシュ」を保持するのは難しいと感じました。

私のデザインはレールでは不可能ですか?チェック結果をデータベースまたは「memcached」のようなものに保存する必要がありますか?

そして、これらのバックグラウンドタスクを並行して実行できますか?

4

1 に答える 1

3

グローバル変数が表示されないのは、DelayedJobのワーカーとRailsのワーカーの間だけではありません。本番環境では、複数のRailsワーカープロセスも処理します。したがって、Railsでグローバル変数を設定したとしても、他のRailsワーカーには表示されません。

これは仕様によるものです。RailsとDelayedJobはステートレスリクエストのみを処理するため、RailsとDelayedJobの負荷を複数のマシンに分散できるという利点があります。また、データベースシステムやその他の永続ストレージを調べて、Webアプリケーションに必要なステートフル性を追加します。

私が収集したものから、Java Webアプリケーションは、バックグラウンドタスクを実行し、必要に応じてグローバル変数を設定できるスレッドモデルを使用する場合があります。しかし、それはまたあなたを単一のマシンに制限します。スケールアップする必要がある場合はどうしますか?

この場合、Memcachedは実際には本当に良いソリューションのように聞こえます。インストールが簡単で、セットアップもほとんど必要なく、Rails内からも簡単に使用できます。

于 2010-07-11T09:41:43.143 に答える