2011-01-31 4 views
0

여러 프론트 엔드 (예 : F1 및 F2)가 동일한 백엔드에 연결되어 있고 세션이 데이터베이스를 통해 공유되는 간단한 아키텍처가 있다고 가정 해 보겠습니다.여러 프론트 엔드, 공유 백엔드 및 하나의 세션에 연결된 동시 요청 처리

두 가지 프론트 엔드가 동일한 세션에 해당하는 요청을받는 경우가 있습니다. 순진한 구현으로 인해 세션이 서로 겹쳐 쓰게됩니다 (이 경우에는 장고를 보았습니다). 나는 하나 이상의 프론트 엔드가 주어진 세션을 다룰 수 없다는 보장과 같은 백엔드를 디자인하려고 시도 할 수있다. 그러나 이것은 프론트 엔드 실패를 처리하고 싶다면 정확하게하기가 어렵다.

나는 그 사건이 처음에는 병리학 적이라고 생각할 수밖에 없으며 (언제든지 주어진 세션에 대해 두 번 이상 요청해서는 안됨), 처리할만한 가치가있는 것은 아니지만 나는 그렇지 않다. 웹 개발에 대한 많은 경험, 어쩌면 나는 뭔가를 놓치고 있습니다. 대개이 사건을 어떻게 처리합니까? 내가 좋아하는 것

가능한 솔루션을 피하기 위해 :

  • 스티커 세션 : 그게 내가 현재 사용하는 솔루션, 그리고 여러로드 밸런서를 일단 지원하기 어렵고, 더 크게 부하의 정신에 반하는 처음에는 균형을 이룬다.
  • 데이터를 쿠키에 저장하는 것 기술적 인 이유로 기술적으로 쿠키를 사용할 수 없습니다.
+0

언어/플랫폼? – leppie

+0

왜 그것이 중요한지 이해가 안됩니까? FWIW, 저는 python + mysql을 사용하여 프로토 타입을 작성합니다. –

답변

0

하나의 일반적인 솔루션을 세션 지속성이라고합니다. f1 또는 f2에 요청을 라우팅하면 세션이 활성화되어있는 한 해당 세션이있는 클라이언트 만 하나의 프론트 엔드로 이동합니다.

거의 모든로드 밸런서에서 공통적 인 기능입니다. 예를 들어 nginx에는 ip_hash가 있습니다. http://wiki.nginx.org/NginxHttpUpstreamModule

+0

필자는 그 솔루션을 원하지 않는다고 언급 했어야했다. (현재 내가 의존하고있는 솔루션이지만, 피하고 싶다.) –

+0

좋아, 대안은 모든 관련 세션 정보를 쿠키 (또는 일부 JS 데이터 구조, 압축 할 수있는 js 등)에 붙여 넣는 것입니다. 그런 다음 요청이 f1 또는 f2로 오면 세션을 신속하게 재구성 할 수 있습니다. 이는 합당한 세션 정보 크기에서 작동합니다. 로드 밸런서 방법은 이미 가지고 있기 때문에 더 쉽습니다. – spivak

+0

쿠키를 사용할 수 없습니다 (세션이 쿠키에 비해 너무 커질 수 있습니다. 세션에서 일부 AI를 사용하는 것이 보통이므로 더 많은 데이터가 포함될 것입니다). –

관련 문제