2011-02-03 2 views
0

내 질문 제목에서 설명한 것처럼 현재 여러 서비스를 제공하는 응용 프로그램의 부하를 분산하는 방법에 대한 문제가 있습니다.다중 서비스 응용 프로그램 클러스터

응용 프로그램은 버킷으로 구성된 사용자 파일을 저장하는 저장소 서비스입니다. 파일 자체는 실제로 응용 프로그램 서버에 저장되는 것이 아니라 네트워크 저장소에 저장됩니다. 응용 프로그램 서버는 데이터를 암호화/암호 해독하고 사용자가 자신의 데이터에 액세스 할 수 있도록 여러 서비스를 제공하는 데 사용됩니다. 이 서비스에는 현재 내부 사용을위한 FTP, SFTP, HTTP 및 JNDI/RMI가 포함되며 향후 다른 독점적 또는 자체 프로토콜에서 향상 될 수 있습니다.

한 번에 두 개의 서버로 두 개의 파일 버킷에 액세스 할 수 없으므로 모든 서비스 호출을 동일한 클러스터 노드로 돌리고 싶습니다 (아직 실행중인 경우). 그렇지 않은 경우 다른 서버가 버킷에 대한 연결을 열고 사용자에게 제공합니다.

어떻게 이러한 응용 프로그램을 클러스터합니까? Tomcat과 JBoss AS 클러스터 가이드를 살펴 보았고 Java EE 클러스터링에 대한 기사를 읽었지만 내 목표를 달성하는 방법에 대한 아이디어는 아직 없습니다. 내 주요 문제 중 하나는로드 밸런싱이라고 생각하며 여기에 표준 솔루션을 사용할 수 없을 것입니다.

+0

예를 들어, 모든 네트워크 전송을 암호 해독해야하므로 SFTP의로드 균형 조정을 수행하는 방법에 대해 궁금합니다. – Erik

답변

1

나는 파일 이름에서 해시를 만들려고하고로드를 비교적 균형있게 시작하기 위해로드를 사용하려고한다. (C)에 간단한 예를 들어

: 모든 서버를 요청하고 응답을 결합, 특정 그룹에있는 모든 파일을 찾아 같은 것을 들어

hash = 0 
for(i = 0; i < strlen(file_name); i++) { 
    hash ^= (hash << 5)^file_name[i]; 
} 
server_number_for_this_file = hash % total_servers; 

. 예 : 첫 번째 서버는 "hello"및 "foo"를 반환하고 두 번째 서버는 "작별 인사"및 "막대"를 반환 할 수 있으므로이 부분 목록을 결합하여 4 개의 파일 목록을 가져옵니다.

참고 : 응용 프로그램 서버가 디렉터리 내용을 캐시하면 항상 네트워크 저장소를 괴롭히지 않으므로 캐시 효율성이 향상됩니다 (10 개의 응용 프로그램 서버와 마찬가지로 각 응용 프로그램 서버는 캐시의 10 % 만 캐시해야 함). 디렉토리 내용 데이터 대신에 100 %).

물론 클라이언트에서 암호화/암호 해독을 수행하여 클라이언트와 응용 프로그램 서버간에 전송되는 파일 데이터 ("신뢰할 수없는 인터넷을 통한?")가 "일반 텍스트" 신뢰할 수없는 네트워크를 통해 응용 프로그램 서버와 네트워크 저장소 (신뢰할 수있는 네트워크)간에 전송되는 데이터 만 암호화합니다.

+0

여기에서 지원되는 런타임에 새로운 서비스가 장애 조치되거나 추가됩니까? 그 일이 생기면 캐시를 청소해야한다고 생각해. 그렇지? – Erik

+0

장애 조치 (failover)의 경우 프런트 엔드 서버 (응용 프로그램 서버로 요청을 전달하고 어떤 서버가 위/아래에 있는지 모니터링)가 있습니다. 모든 프런트 엔드 서버는 동일하므로 하나가 실패하면 다른 프런트 엔드 서버를 사용할 수 있습니다. 응용 프로그램 서버는 그리드에 배치됩니다. 예를 들어, 20 개의 응용 프로그램 서버가 해시 당 2 대의 컴퓨터가 될 수 있으며 10 개의 해시가 있습니다. 특정 해시의 모든 응용 프로그램 서버가 서로 동기화되도록하려면 - 데이터를 수정하는 모든 요청이 요청을 처리하는 응용 프로그램 서버는 해당 해시를 위해 다른 응용 프로그램 서버에 영향을받는 캐시 된 데이터를 업데이트하도록 지시합니다. – Brendan

+0

새 서버가 기존 서버의 중복 복사본 인 경우 런타임에 새 서버를 추가하는 것이 간단합니다. 해시 크기를 늘려야하는 경우에는 새 해시 크기 (새 서버 포함)로 모든 서버를 준비한 다음 이전 해시에서 새 해시로 모든 서버를 동시에 전환해야합니다 (경주 조건을 피하면서). – Brendan

관련 문제