2012-02-15 3 views
6

각 웹 응용 프로그램을 실행하는 웹 서버 클러스터가 있습니다. 이러한 모든 웹 응용 프로그램 인스턴스는 동일한 데이터베이스 (데이터 저장소 용)와 동일한 네트워크 파일 저장소 (일부 필수 파일을 유지함)를 공유합니다.클러스터에서 웹 응용 프로그램 동기화

웹 응용 프로그램의 인스턴스를 동기화 할 수 있어야합니다. 예를 들어, 응용 프로그램 인스턴스 중 하나가 클라이언트에서 특정 요청을 받으면 일부 재 계산을 수행하고 내부 캐시를 업데이트합니다. 이 시점에서 클러스터의 다른 모든 웹 응용 프로그램에 대한 내부 캐시를 업데이트하여 각 클러스터가 동일한 데이터 집합에서 작동하도록해야합니다.

이러한 기능을 구현하는 가장 좋은 방법은 무엇입니까? 확실히 공유 리소스 (데이터베이스 테이블의 플래그 또는 파일 저장소의 파일)를 정기적으로 폴링하고 조건이 충족되면 필요한 처리를 시작하는 일부 사용자 정의 구성 요소를 구현할 수 있습니다. 하지만 이미 사용할 수있는 기존 라이브러리/구성 요소/앱이있을 수 있습니까?

+0

더 구체적이겠습니까 ?? –

+0

보다 구체적으로 : 애플리케이션 노드간에 이벤트를 보낼 수 있어야합니다. 내가 말했듯이 노드와 노드간에 공유되는 데이터베이스 및 파일 저장소가 있으므로 이벤트 버스로 사용할 수 있습니다. –

+1

안녕하세요 andrew.z - 질문에 제약 조건을 추가 할 수 있다면 좋을 것입니다. 캐시 일관성을 알고 있지만이를 폐기 한 경우 이유를 알려주십시오. UDP를 사용하고 싶지 않다면 저희에게 알려주십시오. 요구 사항을 충족하지 못하는 아이디어로 질문에 답변하는 사람들을 절약 할 수 있습니다. –

답변

3

기존 라이브러리 및 구성 요소가 많이 있습니다. cache coherence. 바로 사용할 수있는 솔루션, Jboss 캐시, Oracle 일관성, GridGain 등이 있습니다.

손으로 작성한 코드를 작성하려면 몇 가지 방법이 있습니다. 클러스터의 모든 노드는 다른 노드에 대해 알아야합니다 (가장 간단한 경우). 데이터는 다른 방법으로 복제 될 수 있습니다.

동기 복제 쓰기는 다른 노드에 쓰기가 수행 될 때만 로컬 캐시에서 발생합니다.

비동기 복제. 쓰기는 로컬 노드에서 발생하고 나중에 다른 노드에서 복제합니다.

캐시 무효화. 데이터가 변경되면 모든 노드가 신호를 받고 데이터를 무효화하고 데이터베이스에서 다시 읽습니다.

직접 구현하는 것이 까다로울 수 있으므로 노드가 데이터를 교환하는 데 사용할 특수 프로토콜 (JGroups 사용 가능)이 필요합니다. 나는 당신이 준비된 해결책을 찾을 것을 제안한다.

+0

게시물 주셔서 감사합니다. 캐시 일관성을 알고 있지만 캐시 할 수 있어야하는 것은 과도하다고 생각합니다. 필자가 필요로하는 것은 응용 프로그램 노드간에 이벤트를 보낼 수있는 것입니다. 데이터베이스 또는 파일 공유를 버스로 사용하는 것이 좋습니다. –

+0

그러면 jgroups를 사용해보십시오. 노드 간 이벤트를 브로드 캐스트하는 데 도움이 될 수 있습니다. 풀링 된 공유 데이터 소스는 최상의 솔루션이 아닙니다. 필요에 따라 달라집니다 – Anton

+0

jgroups가 UDP 대신 파일이나 데이터베이스를 사용할 수있는 경우 ... –

관련 문제