짧게 예 - 세션은 여러 웹 dynos에서 작동합니다.
세션의 레일 디자인이 허용하기 때문에 세션은 웹 dynos에서 작동합니다. 웹 다이노 모델은 레일스가 수평 방향으로 어떻게 스케일링되었는지를 정확하게 나타냅니다.
1. 앱을 방문 할 때마다 일반적으로 다른 웹 dyno에 연결합니까? Heroku가 문서를 기반으로
:
라우팅 메시는 이모 매니 폴드 내에서 응용 프로그램의 웹 동력계의 위치를 결정하고 이러한 동력계 중 하나에 HTTP 요청을 전달하는 책임이있다. Dyno 선택은 랜덤 선택 알고리즘을 사용하여 수행됩니다.
그래서 dyno 선택은 무작위이지만 ... dyno에는 응용 프로그램이 설치되어 있어야합니다. 따라서 하나 이상의 dyno가있는 경우 다른 dyno에 연결될 수 있습니다 (이는로드 균형 조정과 고 가용성을 용이하게하므로 중요합니다).
2. 세션이 다른 웹 다이 노스에서 작동 할 수 있습니까?
예.대부분의 웹은 다음을 수행하여 지원 세션을 스택 : 세션 ID를 할당
- 을 - 고유 ID이며, 브라우저는 항상 모든 HTTP 요청으로 ID를 보낼 수 있도록 그것은 일반적으로 세션 쿠키로 설정 이 프로세스에 의해 그래서
이 세션은 모든 인바운드 HTTP 요청으로 지원 될 수있는 실제 세션 데이터에 세션 ID를 매핑
스토리지 제공 원래 호스트는 웹 다이노으로 액세스 할 수있는 세션 ID를 가지고 귀하의 요청을 처리 할 때. 3. 다른 레일을 위해 일합니까 세션 저장 (ActionDispatch :: 세션 :: CookieStore에는, 액티브 :: SessionStore 및 ActionDispatch :: 세션 :: CacheStore)
ActionDispatch :: 세션 :: 쿠키 스토어 예. 쿠키 저장소는 암호화 된 세션 데이터를 쿠키로 저장합니다. 따라서 브라우저는 모든 세션 데이터 (암호화 된)를 다시 호스트로 보냅니다. 그런 다음 호스트는 앱에서 사용하기 위해 해독됩니다.
ActiveRecord :: SessionStore 예. 예. 쿠키 저장소는 암호화 된 세션 데이터를 데이터베이스 테이블에 저장합니다. 그런 다음 ID가 쿠키로 할당됩니다. 그래서 당신의 브라우저는 ID를 호스트로 보냅니다. 호스트에서 ID는 데이터베이스에서 세션 데이터를로드하는 데 사용됩니다. 모든 웹 dynos는 DB에 연결되어 있기 때문에 이는 또한 지원됩니다.
ActionDispatch :: Session :: CacheStore 네,하지만 캐시 저장소 서비스 (예 : MemCache 애드온)가 필요합니다. 쿠키 저장소는 모든 웹 dynos에서 공유 서비스 인 캐시 저장소 (memcache)에 암호화 된 세션 데이터를 저장합니다. 그런 다음 ID가 쿠키로 할당됩니다. 그래서 당신의 브라우저는 ID를 호스트로 보냅니다. 그러면 캐시 저장소 (memcache)에서 세션 데이터를로드하는 데 사용됩니다.