2012-10-28 2 views
3

저는 꽤 오랫동안 웹 응용 프로그램을 사용해 왔습니다. 그러나 여러 인스턴스로 호스팅되고로드 균형이 조정되는 웹 응용 프로그램에서는 작업 한 적이 없습니다.웹 응용 프로그램에서 일관성있게 수평으로 쓰기 가능

내 질문 : 웹 응용 프로그램이 동일한 응용 프로그램의 여러 인스턴스에서 쓰기를 어떻게 관리합니까?

예 : 항공권 예약 사이트. 영화의 특정 행 좌석을 차단하고 요청을 제출한다고 가정 해 보겠습니다. 동시에 다른 사용자 (클러스터링되고로드 밸런싱 된 애플리케이션 덕분에 다른 인스턴스가 서비스 함)는 내가 선택한 좌석 중 하나를 차단했으며 웹 애플리케이션은이 시나리오를 어떻게 관리합니까? 이후로 서로 다른 프로세스가 서로 다른 시스템에서 실행되어 잠금이 발생합니까? 캐시 일관성을 어떻게 유지합니까? 즉시 사용할 수있는 솔루션이 있습니까?

+0

백엔드는 무엇입니까? 데이터베이스를 사용합니까? 어느? –

+0

@Tichodroma. 우리는 언제든지 균형있는 응용 프로그램을로드하기 위해 전환하지 않습니다. 나는이 점에 학문적으로 관심이 있습니다. 여전히 SQL Server, Spring 트랜잭션 관리 및 JBoss 캐시에서 잠금 및 트랜잭션 격리 수준에 익숙합니다. 이 배경 지식을 통해 분산 애플 리케이션에 대한 이해를 높이는 몇 가지 기사를 알려 주시면 감사하겠습니다. 감사. – Gopal

답변

7

글쎄, 단일 노드 애플리케이션에서 동시 쓰기와 동일한 문제가 발생하더라도 하나의 JVM이므로 관리하기가 더 쉽습니다.

잠금이 발생하는 다른 컴퓨터에서 실행되는 프로세스가 다르므로?

데이터베이스가 모든 인스턴스에서 공유되는 가장 쉬운 목표입니다. 예상로드 및 사용 사례에 따라 optimistic locking은 매우 쉽게 달성 할 수 있습니다 (example in JPA). 데이터베이스 트랜잭션과 결합하면 거래 성능없이 일정한 수준의 원 자성을 얻을 수 있습니다.

캐시 일관성을 어떻게 유지합니까? 즉시 사용할 수있는 솔루션이 있습니까?

캐싱은 특히 분산 환경에서 어렵습니다. 예를 들어, 은 인스턴스간에 통신 할 수 있으며 한 인스턴스에서 변경 사항을 캐시하면 다른 노드에이 이벤트를 브로드 캐스트합니다. ,등등과 같은 다른 많은 제품이 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다.낙관적 인 잠금을 얻는 방법에 대해 블로그 게시물을 공유 할 수 있습니까? – Gopal

+1

@ Gopal : 내 대답에 대한 링크를 몇 개 추가했습니다. –

+0

Tomasz Nurkiewicz .. 답변에 대한 감사합니다. 나는 어제 질문을 다시 방문하고 있었고 당신의 대답은 도움이되었습니다. – Gopal

1

나는 티켓 예약 백엔드에서 수년 동안 일했습니다. 일반적으로이 시나리오에서 전체 웹 응용 프로그램은 데이터베이스에 의해 백업되고 시트의 상태는 사용 가능, 차단됨, 예약 됨으로 구분됩니다. 여기

는 작동 방법은 다음과 같습니다

  • 사용자 A와 B는 웹 애플리케이션을 입력 모두 그 자리 S를 사용할 수있는 참조하십시오.
  • 사용자 A가 데이터베이스에 유저 S.을 선택 available에서 booked
  • 사용자 B에 대한 S의 변화 상태는 S. 백엔드 그 시트 S가 blocked 인 응답 및 사용자 B는 에러 메시지를 보는 유저의 선택을 시도한다.

예를 들어 Ajax를 사용하여 좌석 정보 '실시간'을 업데이트하면 앱을 더욱 사용자에게 편리하게 만들 수 있습니다.

관련 문제