나는 항상 스테이트리스 웹을 주창했지만 stateful 웹의 지지자들이 말하는 것을 알고 싶다.웹의 상태 비 저장 방식보다 상태 저장 방식이 더 좋은 시나리오는 무엇입니까?
스테이트 풀이 무국적자보다 더 적합한 상황이 있습니까?
나는 항상 스테이트리스 웹을 주창했지만 stateful 웹의 지지자들이 말하는 것을 알고 싶다.웹의 상태 비 저장 방식보다 상태 저장 방식이 더 좋은 시나리오는 무엇입니까?
스테이트 풀이 무국적자보다 더 적합한 상황이 있습니까?
일반적으로 상태를 사용하면 프로그래머가 쉽게 작업 할 수 있습니다.
그러나 상태는 또한 상태가없는 상황에 단순히 존재하지 않는 모든 종류의 동시성 문제를 도입합니다.
이것은 본질적으로 기능적 프로그래밍과 명령형 프로그래밍 간의 논쟁입니다.
사용자가 어떤 페이지/스테이지를 쉽고 직관적으로 추적 할 수 있기 때문에 긴 양식 (실제로는 한 페이지 이상 새로 고침하는 모든 것)이 영구적 인 상태에서 훨씬 쉽습니다. . 그러나, 나는 개인적으로 그렇게 작은 이점이 가치 있다고 생각하지 않지만, 문제의 웹 어플리케이션에 크게 달려있다.
우리 프로젝트는 상태 기반 또는 상태 비 저장 상호 작용을 허용하는 Wicket 웹 프레임 워크를 사용합니다.
상태 저장 응용 프로그램에서 가능한 모든 것은 상태 비 저장으로 구현 될 수도 있습니다. 클라이언트에 상태를 저장하고 모든 요청에 대한 모든 관련 상태 정보를 제출하기 만하면됩니다.
링크 개찰구합니다 : http://wicket.apache.org/
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
비 저장 웹 응용 프로그램은 필수적이다.
보안상의 이유로 예를 들어 클라이언트 측에 저장하지 않으려는 많은 사용자 데이터가있을 수 있습니다. 이 경우 서버 측에 저장해야합니다. 웹 응용 프로그램의 기본 세션을 사용할 수 있지만 응용 프로그램의 인스턴스가 두 개 이상인 경우 각 사용자가 항상 같은 인스턴스로 전달되는지 확인해야합니다.
로드 밸런서는 부하 분산 장치가 사용자 요청을 보낼 서버를 어떻게 알 수 있는지 '고정 세션 (sticky sessions)'기능을 가지고 있습니다. 이것은 이상적인 것은 아닙니다. 예를 들어 웹 응용 프로그램을 다시 시작할 때마다 연결된 모든 사용자가 세션을 잃을 수 있습니다.
더 나은 방법은 웹 서버 뒤에 세션을 데이터 저장소에 저장하는 것입니다. 요즘에는 많은 양의 nosql 제품 (redis, mongo, elasticsearch, memcached)이 있습니다. 웹 서버는 상태가 유지되지 않지만 여전히 서버 측에 상태가 있으므로 올바른 데이터 스토어 설정을 선택하여이 상태의 가용성을 관리 할 수 있습니다. 이러한 데이터 저장소는 대개 중복성이 뛰어나므로 사용자에게 영향을주지 않고 웹 응용 프로그램 및 데이터 저장소까지 거의 항상 변경해야합니다.
나는 정확히 OP와 관련된 질문에 대답하지 않았을 것입니다. 하지만 내 대답은 토론에 적합하다고 느꼈다. – shmish111
웹 응용 프로그램에서 "동시성 문제"가 무엇인지 이해하지 못합니다 ... –
동시에 두 명의 사용자가 있다고 가정 해 봅니다. 두 사람이 동시에 제출하는 경우, 둘 다 데이터베이스 나 다른 서비스에 충돌하여 경쟁 조건이 계속 발생할 가능성이 있습니까? – samoz
하지만 그것은 데이터베이스 문제입니다. 웹 애플리케이션에 상태를 저장하는지 여부와 아무 관련이 없습니다. 이러한 종류의 문제를 처리하기 위해 ACID 호환 데이터베이스 (즉, 모든 관계형 데이터베이스)가 작성됩니다. –