ASP.NET 웹 API를 사용하여 문서 관리 서비스를 구성하고 있으며 성능은 이고 일부는입니다.ASP.NET 웹 API StreamContent와 IIS 정적 파일 처리기
IIS/ASP.NET ImageResizer 모듈 작성자 인 Nathanael Jones가 this article을 기반으로 정적 파일 제공의 "최적"성능에 필요한 몇 가지 선입관을 개발했습니다. 그 존재의 PRECIS : 매우 일찍 ASP.NET 파이프 라인 때문에
- 가
HttpModule
를 사용합니다 (이하 파이프 라인 = 더 최적화)와HttpHandler
보다는 이런 종류의 물건을 처리하기 쉬운 것으로 밝혀졌습니다. Response.WriteFile(filename)
은Response.Write(memBuffer)
보다 좋습니다. 여기서 memBuffer는 메모리 내 C# 버퍼입니다.- URL 다시 쓰기 (즉,
Context.RewritePath(virtualPath)
)는 잘 최적화 된 IIS 정적 파일 처리기를 사용하기 때문에Response.WriteFile(filename)
보다 좋습니다.
문제는, 난 여전히 하단 (here), 내 URL 재 작성 기법 자체가 작동하지 않는 얻을 수없는 기괴한 캐싱 문제 덕분이다. 의 파일 서빙 부분 때문에,이 분명히 것들을 비트 깔끔한을 만드는 웹 API 솔루션을
public Task<HttpResponseMessage> DoTheFoo()
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
{
var response = new HttpResponseMessage();
response.Headers.Add("Content-Disposition", "inline; filename=\"" + attachmentFileName + "\"");
response.Headers.Add("content-type", mimeType);
response.Content = new StreamContent(File.OpenRead("somefile.doc"));
return response;
});
}
: 그래서
는 지금은 다음과 같은 많은 웹 API 중심의 구현에 대해 궁금 왼쪽 해요 서비스는 컨트롤러의 다른 작업과 함께 바로 갈 수 있지만 성능과 확장 성은 얼마나 좋은가? 내가 생각하는 요소 :
- 네트워크 대역폭. 여기서 차이점은 없지만 모든 기술은 동일한 바이트 수를 쓰고 있다는 것입니다.
- 나가는 네트워크 스트림에 쓰는 속도. IIS 정적 파일 처리기가 ASP.NET 파이프 라인보다 약간 더 좋을 수 있습니까? 아마도 통합 된 파이프 라인에 관한 문제는 아닐까요? 이 서비스는 소비자 수준의 수십 - 백 킬로 비트 DSL 라인에서 최대 1 기가비트 LAN까지 제공 될 것입니다.
- RAM 사용. StreamContent 구현이 IIS 정적 파일 처리기만큼 효율적이지 않다고 가정합니다.
- CPU 사용량입니다. RAM과 마찬가지로 StreamContent가 IIS 정적 파일 처리기보다 조금 더 까다로울 것으로 가정하고 있습니다.
- 서버 쪽 캐싱. IIS 정적 파일 처리기는이 기능을 제공합니다 (자체적으로 작동하지 않는 것처럼 보이기 때문에 번거로웠다).하지만 StreamContent 구현보다 먼저 이점을 제공 할 것입니다. 나는 서비스가 많은 사람들이 다른 파일 요청에 응답 할 확률이 더 높기 때문에 이러한 측면에 대해 그렇게 걱정하지 않는다.
내가 함께 실제 성능 수치를 얻기 위해이 테스트하는 서버 팜을 넣을 수있는 위치에 아니에요, 나는 작은 규모의 테스트 결과를 감안하면 정확한 아무것도 줄 것이다 올시다. 그래서 알고있는 사람들로부터, 나는 어떤 종류의 차이를 기대할 수 있습니까?URL 재 작성 구현을 포기할 준비가 거의 끝났지 만 성능면에서 눈에 띄는 성능을 얻을 수 있다면 끈기있게 할 것입니다.
웹 API/WCF/MVC 솔루션을 사용할 것을 고려해 볼 수 있습니다. 그것은 RAM과 동시성의 관점에서 끔찍한 것입니다. ImageResizer의 DiskCache는 비 이미지 데이터에 개방되어 있습니다. –
캐싱의 성능이 향상되었습니다 (그리고 바니시는 캐싱 도구 임). 위에서 말했듯이 "서비스는 반복적으로 동일한 파일 요청과는 반대로 많은 다른 파일 요청에 응답 할 가능성이 더 큽니다. 반복 요청이 없으면 캐시는 비효율적입니다. 또한 각 요청마다 처리해야하는 인증 규칙이 있으며, 이는 바니시의 작동 방식에 따라 문제가 발생할 것이라고 생각합니다. – Snixtor
@ComputerLinguist 웹 API는 RAM 및 동시성 관점에서 "끔찍한"것이라고 설명합니다. 그러나 대안에 비해 어떻게 쌓일 수 있습니까? 나는 "300 - 1000x"성능 향상에 대해 말하지 않고 있습니다. 바니시는 캐시 된 시나리오에서 캐시를 주장하고 있습니다. 캐시되지 않은 요청의 원시 성능을 조사하고 있습니다. 서비스 요청의 대부분이 거짓말. – Snixtor