2009-07-31 5 views
1

8 노드 클러스터에서 시퀀스/카운터를 복제해야합니다. 즉, 각 http 요청은 getNextIntAndIncrement()와 같은 것을 호출하여 시퀀스의 다음 값을 수신하며, 시퀀스 상태는 모든 서버에서 동기화됩니다. 명확히하기 위해 세션이 아닌 응용 프로그램/전역 범위에 있어야합니다. 나는 그것이 끔찍한 생각처럼 들리며 의심 할 여지없이 병목 현상을 일으킬 것이라는 것을 안다. 그러나 이것이 요구 사항이다.응용 프로그램 수준 범위로 클러스터링/복제 카운터 상태

내 질문에 가장 적합한 해결책은 무엇입니까? Stateful Session Bean을 살펴 보았지만 단 하나의 클라이언트에 대해서만 설계된 것처럼 보입니다. 나는 데이터베이스 시퀀스를 고려했다. 또한 테라코타 클러스터링을 살펴 보았습니다. 그들은 시퀀스 데모를 가지고 http://www.terracotta.org/web/display/orgsite/Recipe?recipe=sequencer 그러나 J2EE 솔루션이 존재한다면 제 3 자 솔루션을 피하고 싶습니다. 웹 로직 8.1을 사용하고 있습니다.

답변

2

일부 Java EE 공급 업체는 이미 타사 제품을 식별했지만 캐시 표준 (예 : WebSphere의 Object Grid)과 관련된 캐시 솔루션을 가지고 있지만 포터블 표준이 존재한다고 생각하지 않습니다.

DB 솔루션에 어떤 문제가 있습니까? 잠금이 필요하게 될 것이므로 DB에 맡기지 마십시오. 내 생각 엔 진정한 증분 값이 필요하다면 값을 놓치지 않고 다른 데이터베이스 값과의 트랜잭션 관계가 중요하므로 DB를 사용하는 것입니다.

절대적인 sequenetial 값의 필요성을 완화 할 수 있다면 (즉, 틈을 허용하십시오) 숫자 세트를 분해하여 경쟁을 크게 줄일 수 있습니다. 순차 값과 갭이 정말로 필요하다면, 인스턴스 사이에 어느 정도의 잠금이 필요합니다. 두 번째 "쓰레드"가 새로운 시퀀스 번호를 얻는 것을 허용 할 수 없습니다. 현재의 것. 이상한 일련 번호를 잃어 버릴 수 있다면 훨씬 나아질 것입니다. 또는 인스턴스간에 독립적 인 번호 매기기 체계를 사용할 수 있다면 훨씬 더 유리한 위치에 있습니다. 예를 들어 서버 a, b, c ...의 이름이 a001, a002, b001, c001, c002 등일 경우

+0

. 덕분에 – Andrew

1

데이터베이스 시퀀스가 ​​특히 결정 성이 높은 결과를 제공 할 것이라고 생각합니다. 특히 고도의 직렬화 된 트랜잭션을 사용하여 요청할 경우 더욱 그렇습니다.

그러나 나는 심각하게이 일을하는 것의 타당성에 의문을 제기 하겠지만, 그것은 단지 2 센트입니다.

0

이 질문의 태그에는 weblogic이 있습니다. Weblogic에서는 cluster singletons를 허용합니다. 예 : 페일 오버를 지원하는 클러스터 당 하나의 인스턴스.

이 귀하의 요구 사항을 충족해야합니다 : 나는 데이터베이스 솔루션을 추구하는거야

http://e-docs.bea.com/wls/docs100/javadocs/weblogic/cluster/singleton/SingletonService.html

+0

나는 이것이 (아직) 어떻게 도움이되는지 이해하지 못한다. 1). 한 서버의 HttpRequest 프로세서가 Singleton Service에서 유지 관리되는 개수에 어떻게 액세스합니까? 2). Singleton 인스턴스 (또는 서버)가 실패하면 카운트가 어떻게 유지됩니까? DB에서 또는 다른 메커니즘으로? – djna

+0

제안에 감사드립니다. 그러나 우리는 weblogic 8.1을 사용하고 있습니다. – Andrew

관련 문제