문제

우리는 3 파티 웹 서비스를 위해 최대 수만 개의 작은 웹 서비스 호출을 구성 해야하는 .NET 앱을 개발하고 있습니다. 우리는 더 '청키 한'전화를 선호하지만 제 3자는 그것을지지하지 않습니다. 우리는 구성 가능한 수의 작업자 스레드를 사용하도록 클라이언트를 설계했으며 테스트를 통해 하나의 멀티 코어 머신에 대해 상당히 잘 최적화 된 코드가 있습니다. 그러나 우리는 여전히 속도를 향상시키고 싶고 작업이 여러 컴퓨터를 퍼뜨리는 것을보고 있습니다. 우리는 일반적인 클라이언트/서버/데이터베이스 앱에 정통하지만 여러 기계를위한 설계에 새로운 것이 좋습니다. 따라서 그와 관련된 몇 가지 질문이 있습니다.

  • 멀티 스레딩 외에도 HTTP 요청/응답 속도를 향상시킬 수있는 다른 클라이언트 측 최적화가 있습니까? (이것은 비표준 웹 서비스이므로 WCF 또는 SOAP 클라이언트가 아닌 WebClient를 사용하여 구현됩니다).
  • 현재의 사고는 WCF를 사용하여 MSMQ에 작업 청크를 게시하고 하나 이상의 기계에서 클라이언트를 실행하여 대기열에서 작업을 끌어내는 것입니다. 우리는 WCF + MSMQ에 대한 경험이 있지만 더 나은 옵션을 놓치지 않기를 원합니다. 오늘이 작업을 수행하는 다른 방법이 있습니까?
  • Digipede 및 Microsoft의 HPC 제품과 같은 타사 도구를 보았지만 과잉처럼 보입니다. 그 제품에 대한 경험이나 우리가 롤오 주에서 고려해야 할 이유가 있습니까?
도움이 되었습니까?

해결책

목표는 가능한 한 빨리 이러한 웹 서비스 호출을 실행하고 결과를 표로 작성하는 것 같습니다. 이를 감안할 때, 당신의 가장 큰 효율성 제어는 당신이 할 수있는 동시 요청의 수를 확장하는 것입니다.

당신을보십시오 클라이언트 측 연결 제한. 기본적으로 시스템 기본값은 2 연결이라고 생각합니다. 나는 이것을 직접 시도하지 않았지만,이 속성과의 연결 수를 높이면 단일 시스템에서 더 많은 연결을 생성함으로써 더 많은 요청을 생성하는 측면에서 이론적으로 승수 효과가 있어야합니다. 거기 있습니다 더 많은 정보 MS 포럼에서.

MSMQ 옵션은 잘 작동합니다. 나는 그 구성을 직접 실행하고있다. ActiveMQ는 또한 훌륭한 솔루션이지만 MSMQ는 이미 서버에 있습니다.

좋은 출발점이 있습니다. 운영 중에이를 얻은 다음 성능과 처리량으로 넘어갑니다.

다른 팁

올해 Codemash에서 Wesley Faler는 이런 종류의 문제에 대해 흥미로운 프레젠테이션을했습니다. 그의 해결책은 "작업"을 DB에 저장 한 다음 고객을 사용하여 작업을 중단하고 완료되면 상태를 표시하는 것이 었습니다.

그런 다음 전체 인프라를 Amazon의 EC2로 밀었습니다.

프레젠테이션에서 그의 슬라이드가 있습니다 - 기본 아이디어를 제공해야합니다.

나는 다중 PC와 비슷한 일을 현지에서 수행했습니다. 워크로드 관리의 기본은 Faler의 접근 방식과 유사했습니다.

코드를 최적화 한 경우 네트워크 측면을 최적화하여 전송 된 패킷 수를 최소화 할 수 있습니다.

  • HTTP 세션 재사용 (즉, 연결을 열어두고 TCP 오버 헤드를 줄임으로써 하나의 세션으로 여러 트랜잭션을 하나의 세션으로 이동합니다)
  • 대역폭 절약 요청에서 HTTP 헤더 수를 최소로 줄입니다.
  • 서버에서 지원하는 경우 gzip을 사용하여 요청 본문을 압축합니다 (압축을 위해 CPU 사용량의 균형을 잡아야합니다.

고려하고 싶을 수도 있습니다 코뿔소 서비스 버스 MSMQ 대신. 소스를 사용할 수 있습니다 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top