2010-12-17 2 views
0

다른 네트워크에있는 다수의 서버와의 원격 통신을위한 REST 솔루션을 설계하고 있습니다. 일부 전화는 상대적으로 짧지 만 다른 전화는 몇 분이 걸릴 수 있습니다. 호출은 본질적으로 동기 적이므로 호출이 비동기 인 경우 클라이언트 (실제로는 서버)가 응답을 폴링해야합니다. 폴링은 성능에 영향을 미치고 최종 사용자에 대한 응답을 폴링 간격의 일부분만큼 지연시키기 때문에 차선입니다. 동기 호출을 사용하는 것을 선호하지만 네트워크 연결이 끊어지면 응답을 얻을 수있는 방법이 없습니다. 비동기 인 경우 원격 서버는 폴링 될 수있는 작업 ID를 반환하고 간헐적 인 네트워크 문제는 계속 발생합니다. 재시도 및 멱등 원은 중요한 고려 사항입니다.HA 아키텍처의 비동기/폴링 또는 동기화

나는 어떤 접근 방식을 택할 것인가에 대한 몇 가지 권고 사항을 찾고 있습니다. 또한 원격 서버에서 시작하는 호출도 있습니다. 이것들은 HA 용로드 밸런서를 통과합니다. 또한 HA 환경에서 entreprise 통신을위한 모범 사례를 설명하는 몇 권의 책 권장 사항에 관심이 있습니다. 이 주제를 다룰만한 것을 찾을 수없는 것 같습니다.

답변

0

네트워크 장애시 "재 연결"을 지원하는 동기식 시스템을 설계 할 수 있습니다. 다시 연결 호출은 클라이언트가 동일한 호출에 "다시 연결"하는 방법입니다. 서버가 연결 해제와 재 연결 사이의 호출을 완료 한 경우 반환 값이 저장되어 재 연결이 발생하면 즉시 반환 될 수 있습니다. 재 연결을 지원하려면 호출에 식별자를 할당해야합니다. 식별자는 클라이언트가 guid로 선택할 수 있으며 초기 호출의 일부로 서버에 전달됩니다. 그런 다음 서버는이 guid를 호출과 연관시킵니다. 연결을 끊었다가 다시 연결하면 클라이언트는 동일한 guid를 전달하고 서버는이를 사용하여 클라이언트를 호출에 다시 연결합니다. 위에 설명 된대로 저장된 값은 풀에서 제거되기 전에 일종의 지속 시간이 필요할 것입니다. 어떻게 생각해?

+0

나는 네트워크 연결 문제에 대해 관대하면서 동시성의 이점을 가지고 있기 때문에 그러한 접근 방식을 좋아합니다. 내가 보는 유일한 단점은 응답 캐시입니다. 문제의 입증 된 엔터프라이즈 패턴이 존재하기를 바랬습니다. – Andrew

+0

@Andrew - 네트워크 중단에 대해 견딜 수 있도록 고안된 솔루션에는 응답 캐시가 필요합니다. 작업을 다시해야한다는 의미를 버리고 싶지 않으면 네트워크가 다운되고 작업이 완료되며 어딘가에 있어야합니다. – killdash9

관련 문제