2009-07-24 6 views

답변

4

일반적으로 상태를 사용하면 프로그래머가 쉽게 작업 할 수 있습니다.

그러나 상태는 또한 상태가없는 상황에 단순히 존재하지 않는 모든 종류의 동시성 문제를 도입합니다.

이것은 본질적으로 기능적 프로그래밍과 명령형 프로그래밍 간의 논쟁입니다.

+0

웹 응용 프로그램에서 "동시성 문제"가 무엇인지 이해하지 못합니다 ... –

+0

동시에 두 명의 사용자가 있다고 가정 해 봅니다. 두 사람이 동시에 제출하는 경우, 둘 다 데이터베이스 나 다른 서비스에 충돌하여 경쟁 조건이 계속 발생할 가능성이 있습니까? – samoz

+6

하지만 그것은 데이터베이스 문제입니다. 웹 애플리케이션에 상태를 저장하는지 여부와 아무 관련이 없습니다. 이러한 종류의 문제를 처리하기 위해 ACID 호환 데이터베이스 (즉, 모든 관계형 데이터베이스)가 작성됩니다. –

1

사용자가 어떤 페이지/스테이지를 쉽고 직관적으로 추적 할 수 있기 때문에 긴 양식 (실제로는 한 페이지 이상 새로 고침하는 모든 것)이 영구적 인 상태에서 훨씬 쉽습니다. . 그러나, 나는 개인적으로 그렇게 작은 이점이 가치 있다고 생각하지 않지만, 문제의 웹 어플리케이션에 크게 달려있다.

8

우리 프로젝트는 상태 기반 또는 상태 비 저장 상호 작용을 허용하는 Wicket 웹 프레임 워크를 사용합니다.

  • 개찰구에서 상태 페이지를 사용하여 쉽게 개찰구의 AJAX 프레임 워크
  • 상태가 더 "직관적"프로그래밍 모델을 사용하여 부분 페이지 업데이트를 수행 할 수 있습니다 : 상태 페이지는 장점을 가지고있다. 예를 들어 wicket 페이지 클래스에서 서버 측에서 private 멤버 필드를 선언하고 페이지가로드 될 때 설정하고 AJAX 요청이 페이지를 조회하여 업데이트를 수행 할 때마다 다시 액세스 할 수 있습니다.
  • Wicket은 요청을 처리 할 때 사용자 세션 객체를 동기화하여 웹 계층에서 가장 일반적인 동시성 문제를 방지합니다.
  • 서버 측에 상태를 저장할 수 있습니다. 가끔은 성능을 향상시킵니다. 예를 들어 구성하는 데 시간이 많이 걸리지 만 페이지에서 사용할 수 있어야하는 개체는 페이지가 처음 인스턴스화 될 때 한 번만로드 될 수 있습니다.

상태 저장 응용 프로그램에서 가능한 모든 것은 상태 비 저장으로 구현 될 수도 있습니다. 클라이언트에 상태를 저장하고 모든 요청에 ​​대한 모든 관련 상태 정보를 제출하기 만하면됩니다.

링크 개찰구합니다 : http://wicket.apache.org/

1

I 인해 scaleability의 상태 형 클라이언트 상태 비 저장 서버 캠프에있어하지만 그는 비 저장 서버를 사용하여 구현하기가 어려워이 된 이유를 설명의 장애물에 직면 할 때, 당신은 종류의 수 장기적으로 사임 한이 곳은 stateful 서버가 빛나는 곳입니다 :). Eventful하지만 statefull 클라이언트를 선호하는데 이것은 asp.net viewstate를 사용하여 효율적으로 구현하기가 쉽지 않으며 아마도 statefull 웹이 실용적 일 수 있습니다. 스테이트 풀 클라이언트 인 상태 비 저장 서버를 사용하면 타이어간에 앞뒤로 전송되는 데이터의 양을 더 잘 알 수 있습니다. statefull 서버 프로그래밍 모델을 사용하여 문제가 발생할 때까지 가끔 숨겨져 있습니다. 또한 상태 비 저장에서 상태 유지로가는 것은 쉽습니다 (이미 알고있는 상태 정보 만 무시하면됩니다). 그 반대는 거의 불가능합니다/가치가 없습니다. 상태 저장 서버를 사용하는 또 다른 방법은 상태 저장 클라이언트를 사용할 때 상태/캐시 지우기가 종종 문제가된다는 것입니다.그것은 단지 직관력이없고 혼란 스럽거나 maby 일뿐입니다. :)

GWT와 다른 많은 최신 툴킷 (Silverlight는 WCF와 이야기 중입니다)은 확장 성 문제로 인해 상태 저장 클라이언트를 선호하는 것으로 보입니다. 어쩌면 상태 저장 서버는 상태가없는 규칙에 대한 예외가되어야합니다 ... 하나의 페이지/창을 선택할 수 있습니다.

소스 : 당신이 높은 트래픽을 가지고 시작하면 http://groups.google.com/group/google-web-toolkit/browse_thread/thread/2871ef5076c1bdb6/43e7a5377047aa44?#43e7a5377047aa44

1

비 저장 웹 응용 프로그램은 필수적이다.

보안상의 이유로 예를 들어 클라이언트 측에 저장하지 않으려는 많은 사용자 데이터가있을 수 있습니다. 이 경우 서버 측에 저장해야합니다. 웹 응용 프로그램의 기본 세션을 사용할 수 있지만 응용 프로그램의 인스턴스가 두 개 이상인 경우 각 사용자가 항상 같은 인스턴스로 전달되는지 확인해야합니다.

로드 밸런서는 부하 분산 장치가 사용자 요청을 보낼 서버를 어떻게 알 수 있는지 '고정 세션 (sticky sessions)'기능을 가지고 있습니다. 이것은 이상적인 것은 아닙니다. 예를 들어 웹 응용 프로그램을 다시 시작할 때마다 연결된 모든 사용자가 세션을 잃을 수 있습니다.

더 나은 방법은 웹 서버 뒤에 세션을 데이터 저장소에 저장하는 것입니다. 요즘에는 많은 양의 nosql 제품 (redis, mongo, elasticsearch, memcached)이 있습니다. 웹 서버는 상태가 유지되지 않지만 여전히 서버 측에 상태가 있으므로 올바른 데이터 스토어 설정을 선택하여이 상태의 가용성을 관리 할 수 ​​있습니다. 이러한 데이터 저장소는 대개 중복성이 뛰어나므로 사용자에게 영향을주지 않고 웹 응용 프로그램 및 데이터 저장소까지 거의 항상 변경해야합니다.

+0

나는 정확히 OP와 관련된 질문에 대답하지 않았을 것입니다. 하지만 내 대답은 토론에 적합하다고 느꼈다. – shmish111