7

당신에게 Heroku에 여러 웹 동력계와 레일 3 응용 프로그램을 실행하는 경우,세션이 Heroku의 여러 웹 다이노와 함께 작동합니까?

  1. 앱을 칠 때마다, 당신은 일반적으로 다른 웹 다이노와 연결합니까?
  2. 세션이 여러 웹 다이 노스에서 작동 할 수 있습니까?
  3. 는 서로 다른 레일에 대한 세션 저장 (ActionDispatch :: 세션 :: CookieStore에는, 액티브 :: SessionStore 및 ActionDispatch :: 세션 :: CacheStore)

답변

15

짧게 - 세션은 여러 웹 dynos에서 작동합니다.

세션의 레일 디자인이 허용하기 때문에 세션은 웹 dynos에서 작동합니다. 웹 다이노 모델은 레일스가 수평 방향으로 어떻게 스케일링되었는지를 정확하게 나타냅니다.

1. 앱을 방문 할 때마다 일반적으로 다른 웹 dyno에 연결합니까? Heroku가 문서를 기반으로

:

라우팅 메시는 이모 매니 폴드 내에서 응용 프로그램의 웹 동력계의 위치를 ​​결정하고 이러한 동력계 중 하나에 HTTP 요청을 전달하는 책임이있다. Dyno 선택은 랜덤 선택 알고리즘을 사용하여 수행됩니다.

그래서 dyno 선택은 무작위이지만 ... dyno에는 응용 프로그램이 설치되어 있어야합니다. 따라서 하나 이상의 dyno가있는 경우 다른 dyno에 연결될 수 있습니다 (이는로드 균형 조정과 고 가용성을 용이하게하므로 중요합니다).

2. 세션이 다른 웹 다이 노스에서 작동 할 수 있습니까?

예.대부분의 웹은 다음을 수행하여 지원 세션을 스택 : 세션 ID를 할당

  1. 을 - 고유 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)에서 세션 데이터를로드하는 데 사용됩니다.

  • 5

    나는 생각하지 않는다는 Heroku가 어떤 노력을하게 작동 하는가 동일한 웹 dyno에 연속 요청을 보냅니다. 나는 틀릴 수도 있고 그들은 약간의 노력을하지만, 그렇다고해도 세션 관리를 기대할만큼 충분히 신뢰할만한 것은 아니다.

    그러나 데이터가 암호화 된 클라이언트 쪽 쿠키에 저장되므로 ActionDispatch :: Session :: CookieStore가 올바르게 작동합니다. ActiveRecord :: SessionStore는 데이터가 데이터베이스에 저장되어 있기 때문에 작동합니다.이 데이터는 모든 웹 dynos에서 공유하는 것으로 추정됩니다. ActiveDispatch :: Session :: CacheStore는 모든 클라이언트 또는 유사한 공유 캐시간에 공유되는 MemCached 서버를 사용하는 경우 작동해야합니다.

    로컬 파일 시스템에서 일종의 파일 기반 세션 저장소가 작동하지 않을 수 있으며 여러 가지 Heroku dynos와 같은 상황이 바로 이러한 유형의 세션 저장소가 최신 웹 응용 프로그램에서 일반적이지 않은 이유입니다.

    관련 문제