3

Camel을 사용하여 일부 외부 시스템 (FTP, SOAP-WS, REST-WS, 주제, 대기열 등) 간의 통합을 계획합니다.Apache Camel 및로드 균형 조정

우리는 Spring 구성 (Camel 컨텍스트 XML)을 사용하고 정보량이 크기 때문에 Tomcat 클러스터에 배포 할 계획입니다.

가능 한 구성이고 두 응용 프로그램 (시작 부분에 두 개의 바람둥이가 있다고 말하면)이 간섭 할 수있는 경우 어떤 설명서도 찾지 못했습니다.

UPDATE

삼년 아주 잘 어떤 경우에 대한 관리 표시에 대한 낙타 사용 후 : ''JMS '을하고, 웹 서비스,로드 균형 조정이 경우에서 잘 작동하지만 경우에 JMS '를 사용하면 헤더 JMSXGroupID을 사용하지 않으면 메시지의 순서가 느슨합니다.

그러나 File (또는 FTP, sFTP, FTPS)에서 소비하는 서비스에 대해서는 아직 질문이 열려 있습니다. 잠시 동안이 소스에서 하나의 다리 만 활성화하면 다리가 아래로 내려갈 경우 불행히도 두 번째 다리에서 FTP 파일을 자동으로 시작할 수 없습니다.

답변

1

HTTP 세션에 쓰지 않는 한 아무 것도 신경 쓰지 않아도됩니다.로드 밸런서 뒤에 몇 개의 Tomcat 노드를 배치하면됩니다. HTTP 세션에 쓰는 경우에도 여전히 간단하지만, 선택한 구성에 따라 세션 복제를 구성했을 가능성이 큽니다.

저는 두 가지 유사한 시스템 통합 프로젝트를 수행하여 많은 요청을 처리하고 있습니다. 배포 환경에서 우리는 Apache 서버 (AJP 커넥터를 통해 통신)와 BigIP로드 밸런서 (Nginx로 전환 한 후) 뒤에 서있는 클러스터 된 Tomcat 인스턴스를 선택했습니다.

두 응용 프로그램 모두 HTTP 요청을 허용했습니다. 그 중 하나는 완전히 무국적이었고 (프록시와 비슷한) 다른 세션은 세션 관련 정보를 유지해야했습니다. 후자의 경우 세션에 넣은 모든 객체가 Serializable이고 세션 복제를 구성해야합니다.

우리는 많은 테스트를 수행했으며, 최후에 입증 된 DeltaManager, 끈끈한 세션 및 동기식 복제 모드로 끝났습니다. 이것은 시스템 아키텍처에 따라 매우주의 깊게 고려해야 할 것이지만 very good documentation이 도움이 될 수 있습니다.

모든 요청은 큰 처리로 이루어져 있기 때문에 고정 세션을 사용하지 않았습니다. 우리가 수행 한 테스트와 요청의 성격에 따라, 특정 클라이언트 세션에 대해 동일한 서버를 반복적으로 사용하는 대신 라운드 로빈 처리하는 것이 좋습니다. 또한 sticky 세션이 활성화되지 않았기 때문에 우리는 동기식 복제를 사용하여 응답이 클라이언트에 전달되기 전에 모든 노드가 전체 세션을 수신하는지 확인했습니다 (단일 요청 만 차단하므로 걱정할 필요가 없습니다). 우리는 거대한 객체를 세션에 저장하지 않았기 때문에 세션이 기본적으로 모든 노드에 복제된다는 것에 아무런 문제가 없습니다. 그러나 병목 현상이라고 생각하면 노드의 일부 하위 집합을 클러스터에 넣는 구성을 구체화 할 수 있습니다.

+0

나는 두 개의 노드가 만들어 져야하는 들어오는 요청 (http)이 없다고 생각한다. 그래서 같은 소스 (파일 시스템, DB)를 "소비"한다면 잠금 메커니즘을 구현해야한다. 같은 "이벤트"가 큽니다. 카멜 내부에이 메커니즘을 고려한 기본 메커니즘이 있는지 알고 싶습니다. –

+0

죄송합니다 - 질문에 ftp 옵션을 사용하지 않았습니다. HTTP 프로토콜 기반 통신 (REST, SOAP)에 대해 이미 언급했듯이 아무런 문제가 없습니다 (로드 밸런서 사용).파일을 가져 오는 작업의 경우, 나는 해결책을 알지 못합니다. Camel뿐만 아니라 Spring Integration 또는 Spring Batch에서도 사용할 수 있습니다. 나는 당신이 스스로 프로듀서를 만들고 클러스터 된 인스턴스를 소비자에게 JMS 큐를 통해 메시지를 전달하는 것처럼 사용해야한다고 생각한다. –