2010-01-25 2 views
1

검색 웹 사이트를 신속하게 구축하기 위해 검색 엔진을 구축하고 웹 UI (모바일/데스크톱)를 구축하는 팀 두 곳으로 작업을 나눌 계획입니다. 내 계획은 .NET 3.5에 기반한 REST 서비스 세트로 검색 엔진을 구축하는 것이다. UI는 다른 기술을 사용하여 구현할 수 있습니다.REST 인터페이스가 검색 엔진 속도를 늦 춥니 까?

질문 : REST 인터페이스가 성능 병목 현상이 될 수 있습니까? 이것을 피하는 가장 좋은 방법은?

답변

1

REST는이 시나리오에서 병목 현상이 될 수 있습니다. 귀하의 게시물에서 클라이언트의 HTML UI에서 REST 호출을 직접 작성했는지 여부 또는 백엔드에서 서버 간 REST 호출을 작성하는지 여부는 명확하지 않습니다. 그래서 아래 두 가지 경우를 다룰 것입니다.

클라이언트 UI와 서버간에 REST 호출이 발생하면 REST 또는 다른 HTTP 원격 메소드를 사용하는 것이 상대적으로 중요하지 않습니다. 백엔드에서 검색을 실행 한 다음 결과를 다시 전송하는 데 걸리는 시간 클라이언트는 REST 호출 자체의 영향을 줄여야한다. 퍼포먼스를 향상 시키려면 클라이언트 측 네트워킹 트릭 (예 : HTTP 압축, 적절한 캐싱 헤더 등)에 집중하고 검색 엔진 자체를 최적화하십시오.

아키텍처가 다른 계층 (Serach Engine)을 호출하는 서버의 한 계층 (웹 UI 호스팅) 인 경우 REST를 통해 해당 계층을 호출해도 전반적인 대기 시간이 지나치게 늘어나지 않아야합니다. 이는 검색을 실행하고 결과를 클라이언트로 다시 전송하기 때문에 (위와 동일) 적어도 백 밀리 초가 걸릴 것이고 백엔드 REST 호출의 오버 헤드는 일반적으로 50ms 이하가 될 것이기 때문입니다 .

즉, 서버 간 HTTP 호출의 클라이언트 쪽을 쉽게 망칠 수 있습니다. 예를 들어 많은 HTTP 클라이언트 라이브러리 (.NET 포함)는 기본적으로 동시 클라이언트 연결 수를 제한합니다. 실제 클라이언트 응용 프로그램을 빌드하는 경우에는 의미가 있지만 "클라이언트"인 경우 실제로는 서버가 동시에 수백 명의 사용자에게 서비스를 제공합니다. 다른 잠재적 인 문제로는 인증 문제, 프록시 문제, DNS 등이 있습니다. 따라서 REST 클라이언트 코드를 신중하게 작성하고 구성하는 데주의를 기울여야합니다. 그러면 수백 명의 동시 사용자가로드 테스트를 수행해야합니다.

+0

예, 아키텍처는 백엔드 REST를 호출하는 서버 측의 프리젠 테이션 teir을 포함 할 것이다이 링크를 통해 읽어 기억하십니까. 스케일링에 대한 조언을 주셔서 감사합니다.이 사이트는 일주일에 2 백만 페이지 노출을 제공해야하므로 중요합니다. – domspurling

+0

나는 서버 통신에 서버를 사용하기 위해 REST를 사용하는 것을 왜 더 괴롭 히며 말할 것인가. 당신은 이미 WCF를 사용하고 있습니다. 당신은 상호 작용의 양면을 제어합니다. 왜 WCF ServiceContract를 정의하지 않는가? REST는 클라이언트와 서버 사이의 결합을 줄이는 데 아주 좋으며 HTTP는 네트워크 전반에 걸쳐 클라이언트에게 적합하지만 서버가 서로 옆에 앉아 있으면 비용을 지불해야하는 이유는 무엇입니까? –

+0

WCF는 우리가 일반적으로 추구하는 것입니다. 그러나이 경우에 우리는 이기종이되어야합니다 - – domspurling

0

아니요. REST는 병목 현상이 아니며 일반적으로 병목 현상이 될 수 없습니다. REST 은 멋진 HTML 페이지가없는 HTTP입니다. 일반 웹 페이지보다 저렴하고 빠릅니다.

-1

나는 당신의 성능에 영향을 미치지 않아야한다고 생각하지만, REST 서비스의 적절한 사용을 가지고 있다고 생각해. 닷넷은 완전히 REST를 지원하는 ASP.Net MVC를 가지고있다.

http://www.ytechie.com/2008/10/aspnet-mvc-what-about-seo.html

+0

MVC는 html 중심의 개발을 지원하고 html 또는 json 기반 응용 프로그램을위한 HTTP 만 지원합니다. http 헤더 및 스트림에 액세스 할 수있는 다른 프레임 워크보다 ReST를 완전히 지원하지 않습니다. – SerialSeb