Herokuで複数のWebダイノを使用してRails3アプリを実行している場合は、
- アプリをヒットするたびに、通常は別のWebダイノに接続しますか?
- セッションは異なるWebダイノ間で機能しますか?
- さまざまなRailsセッションストア(ActionDispatch :: Session :: CookieStore、ActiveRecord :: SessionStore、およびActionDispatch :: Session :: CacheStore)で機能しますか?
Herokuで複数のWebダイノを使用してRails3アプリを実行している場合は、
つまり、はい-セッションは複数のWebダイノで機能します。
セッションはWebダイノ全体で機能します-Railのセッションサポートの設計により可能になるためです。どちらかといえば、Web dynoモデルは、まさにRailの水平方向のスケーリングが意図されていた方法です。
1.アプリを押すたびに、通常、別のWebダイノに接続しますか?
herokuのドキュメントに基づく:
ルーティングメッシュは、dynoマニフォールド内のアプリケーションのWeb dynoの場所を決定し、HTTPリクエストをこれらのdynoの1つに転送する役割を果たします。ダイノ選択は、ランダム選択アルゴリズムを使用して実行されます。
したがって、dynoの選択はランダムです...しかし、そのdynoにはアプリケーションがインストールされている必要があります。したがって、複数のdynoがある場合は、別のdynoに接続することになります(これにより、負荷分散と高可用性が促進されるため重要です)
2.セッションは異なるWebダイノ間で機能しますか?
はい。ほとんどのWebスタックは、次のようにしてセッションをサポートします。
したがって、このプロセスにより、すべてのインバウンドHTTPリクエストにセッションIDが含まれるため、セッションをサポートできます。セッションIDは、Webdynoがリクエストを処理するときにアクセスできます。
3.さまざまなRailsセッションストア(ActionDispatch :: Session :: CookieStore、ActiveRecord :: SessionStore、およびActionDispatch :: Session :: CacheStore)で機能しますか?
ActionDispatch :: Session::CookieStore はい。Cookieストアは、暗号化されたセッションデータをCookieとして保存します。そのため、ブラウザはすべてのセッションデータ(暗号化)をホストに送り返し、ホストはアプリ内で使用するために復号化されます。
ActiveRecord::SessionStore はい。Cookieストアは、暗号化されたセッションデータをデータベーステーブルに保存します。次に、IDがCookieとして割り当てられます。したがって、ブラウザはIDをホストに送信し、ホストはデータベースからセッションデータをロードするために使用されます。すべてのWebダイノはDBに接続しているため、これもサポートされていることを意味します。
ActionDispatch :: Session :: CacheStore はい。ただし、キャッシュストアサービス(MemCacheアドオンなど)が必要です。Cookieストアは、暗号化されたセッションデータをキャッシュストア(memcache)に保存します。これは、すべてのWebダイノ間で共有されるサービスです。次に、IDがCookieとして割り当てられます。そのため、ブラウザはIDをホストに送信し、ホストはキャッシュストア(memcache)からセッションデータをロードするために使用されます。
Herokuが同じWebdynoに連続してリクエストを送信するように努力しているとは思いません。私は間違っているかもしれませんし、彼らはある程度の努力をしていますが、たとえそうだとしても、セッション管理に頼るほど信頼できるものではないでしょう。
ただし、データは暗号化されたクライアント側のCookieに保存されるため、ActionDispatch :: Session::CookieStoreは確実に機能します。ActiveRecord :: SessionStoreは、データがデータベースに保存されているため機能します。データベースは、おそらくすべてのWebダイノによって共有されています。ActiveDispatch :: Session :: CacheStoreは、すべてのクライアント間で共有されるMemCachedサーバー、または同様の共有キャッシュを使用する場合に機能するはずです。
動作しないのは、ローカルファイルシステム上のある種のファイルベースのセッションストレージだけです。複数のHeroku dynoのような状況が、このタイプのセッションストレージが最新のWebアプリケーションで一般的でない理由です。