2012-12-31 2 views
0

사용자가 임의 항목을 보내는 사이트를 구축 중입니다. 각보기에는 마지막으로 본 내용과 다음 무작위로 선택하는 항목에 대한 많은 변수 업데이트가 포함됩니다. 그러나 나는 그것에 대해 생각할 때 요청이 차례로 발생하고 사용자가 병렬 요청을하면 문제가 발생할 경우에만이 코드가 작동한다고 느꼈습니다. 이 문제가 진짜인지 또는 장고가 병렬 요청을 대기열로 처리하는지 궁금합니다. 이것이 진짜라면 새로운 요청 (두 번째 또는 세 번째 병렬 요청)을 "세션 당 한 요청 페이지"로 리디렉션 할 생각입니다. 나는 병렬 요청을하는 사용자의 기회를 알고 논리를 혼란시키는 것은 작지만 여전히 처리해야한다.병렬 요청 동일한 세션 django

답변

0

이러한 결정을 내리는 것은 장고의 일이 아닙니다. 이는 사용하려는 서버 기술 (예 : nginx, gunicorn, postgresql 등)과 관련이 있습니다.

웹 앱이 작동하도록하는 방식으로 앱을 디자인하면 (즉, 무국적) 걱정할 필요가 없습니다. 모든 동시성 관련 내용은 "진실의 단일 소스"에서 투명하게 처리되어야합니다. 귀하의 경우 데이터베이스에 있어야합니다.

웹 응용 프로그램의 디자인/논리가 이러한 원칙을 준수하지 않으면 결함이있는 것이므로 재 설계해야합니다.

앱이 특별한 경우라고 생각한다면 좀 더 구체적인 예를 제시하거나 더 나은 코드를 보여주세요.

0

동일한 사용자에 대한 병렬 요청이 장고 애플리케이션에서 가능하므로 직접 처리해야합니다. 좋은 원칙은 백엔드에서 상태가되는 것을 방지하는 것입니다. 프론트 엔드를 다시 디자인하여 상태를 처리 할 수 ​​있는지 고려해보십시오. 그러나 이것이 항상 가능하지는 않습니다.

백엔드 상태를 유지하는 한 가지 방법은 Memcached, MongoDB 또는 Redis와 같은 빠른 메모리 내장 데이터베이스를 사용하는 것입니다. 나는 이것이 올바르게 사용된다면 원자 연산을 허용 할 것이라고 생각한다. 하나의 옵션은 원자 연산을 노출하는 Djangos cache framework을 사용하는 것입니다 (최소한 memcached가 지원할 때).

+0

나는 약간 혼란 스럽다. "병렬 요청은 장고에서 가능하다"는 것은 무엇을 의미합니까? 모든 웹 앱에서 사용할 수 없습니까? 선택한 웹 컨테이너 (예 : gunicorn)를 사용하여 구성하는 것이 아닌가요? 당신은 장고에서 스레드 프로그래밍을합니까? 또한 django 세션 (백엔드에 상관없이)과 다른 내용에 대한 차이점은 무엇입니까? 아니면 암묵적으로 장고 세션 프레임 워크에 대해 이야기하고 있습니까? – rantanplan

+0

@rantanplan 의견을 주셔서 감사합니다. 1. 예, 대부분의 웹 응용 프로그램에 대해 병렬 요청이 가능합니다. OP는 django가 어떻게 든 병렬로 처리하는 대신 동일한 사용자의 요청을 대기열에 넣었는지 물어 보았습니다. 2. 나는 때때로 장고에서 스레드 프로그래밍을하지만, 여기서는 관련이 없다. 3. 세션 프레임 워크에 대해 이야기하는 것이 아니라 캐시 기능에 더 가깝습니다. 난 장고 세션과 원자 작업을 할 수있는 방법을 언급하지 않았어 그래서 언급하지 않았어, 내가 틀렸다면 제안하고 자유롭게 대답 (나는 문서를 읽으려고)을 업데이 트거야. – Lycha

+0

처음에는 요청의 동시성을 처리하는 코드 작성을 제안한다고 생각하기 때문에 다소 혼란 스러웠습니다. 나는 레디 스와 캐싱에있어 낯선 사람이 아닙니다. 단지 당신이 어떻게 그것으로 상태를 유지할 수 있는지, 그리고 그것이 더 단순 해지거나 더 복잡한 일을하는지 궁금합니다. 당신이 가리킬 수있는 예가 있습니까? 나는 진정으로 당신이 제안하는 것이 잘못되었거나 아닌지 모르겠다. 나는 비슷한 것을 보지 못했다는 것을 알고있다. 그리고 이것은 나를 음울하게 만든다. – rantanplan