2012-06-05 6 views
3

ASP .NET MVC 3을 사용하여 웹 응용 프로그램을 작성하고 있습니다. MemoryCache 개체를 사용하고 싶지만로드 균형 조정 웹 서버에서 문제가 발생한다고 걱정됩니다. 내가 그 문제에 대한 Google AppFabric 사용하여 서버에서 해결되는 것처럼 보입니다. 회사에 부하가 분산 된 서버가있는 경우 AppFabric 또는 이와 유사한 서버가 실행 중인지 확인하는 것이 좋습니다. 아니면 이것을 위해 개발자로서 할 수 있거나해야 할 일이 있습니까?MemoryCache 개체 및로드 균형 조정

답변

4

우선 ASP.NET의 경우 MemoryCache 대신 ASP.NET Cache을 확인해야합니다. MemoryCache는 비 웹 응용 프로그램에서 ASP.NET 캐시와 동일한 기능을 제공하기 위해 .NET 4.0에 도입 된 일반적인 캐싱 API입니다.

AppFabric은 캐시 된 데이터 인스턴스가있는 여러 서버의 문제를 해결하고 모든 웹 서버에서 액세스 할 수있는 단일 논리 캐시를 제공한다고 가정 해보십시오. 당신이 당신의 문제에 대한 해결책으로 그 위에 도약하기 전에 몇 가지 고려해야 할있다 :

  • 그것은 윈도우 서버의 일부로 제공되지 않습니다 - 그것은, 당신이 말한대로, 에 당신은 그것을 설치 서버에서 사용할 수 있습니다. AppFabric이 출시되었을 때 Windows 서버의 다음 릴리스에 부분으로 제공 될 것이라는 제안이 있었지만이 경우에 해당하는 Windows Server 2012에 대해서는 에 대해 아무것도 알지 못했습니다.

  • 여분의 서버가 필요하거나 최소한 이 필요합니다. AppFabric에 대한 Microsoft의 권장 사항은 전용 서버에서 실행한다는 것입니다. 즉, AppFabric 자체가 무료 다운로드 인 반면 추가 Windows 서버 라이센스 이 발생할 수 있습니다. 말하자면 ...

  • Enterprise Edition 라이센스가 필요할 수 있습니다. AppFabric의 고 가용성 기능을 사용하려는 경우 Enterprise Edition을 실행하는 서버 (표준 버전보다 더 비싼 라이센스 )로만 수행 할 수 있습니다.

  • 결국 필요하지 않을 수도 있습니다. 이 중 일부는 응용 프로그램과 공유 캐싱 계층을 사용하려는 이유에 따라 다릅니다. 여러 서버의 캐시가 데이터베이스 (또는 실제로 서로)와 동기화되지 않을 수 있다고 염려하는 경우 SqlCacheDependency 개체 의 올바른 사용은에서 문제를 해결할 수 있습니다.

+0

캐시를 사용하는 것에 대해 생각한 것은 작은 첨부 파일이었습니다. 첨부 파일은 저장할 더 큰 개체의 일부입니다. 이 객체는 사용자가 저장을 클릭하면 저장됩니다.개체가 아직 저장되지 않은 상태에서 사용자가 파일을 업로드하면 어딘가에 있어야합니다. 큰 객체가 도착하기 전에 해당 데이터를 데이터베이스에 저장하는 것은 정답이 아닙니다. 사용자가 저장하기 전에 취소하면 응용 프로그램에서 해당 파일을 삭제해야합니다. 항목을보다 효율적으로 제거 할 수 있기 때문에 IMO 캐시가 파일을 저장하는 올바른 위치입니다. 이 논리에 결함이 있습니까? –

1

이 CodeProject의 기사 Implementing Local MemoryCache Invalidation with Redis 당신이 설명하는 시나리오를 처리하기위한 방법을 제안한다.

"끈적 끈적한"또는 "상태없는"사용중인로드 균형 조정의 맛을 언급하지 않았습니다. 훨씬 쉬운 해결책은 끈적 거리는 세션을 사용하는 것입니다.

로컬 메모리 캐시와 stateless로드 균형 조정을 사용하려는 경우 서버 간 유효성 검사 메시지가 늦게 도착하여 경쟁 조건이 발생할 수 있습니다. ASP.Net MVC에서 일반적인 Post-Redirect-Get 패턴을 사용하면 특히 문제가 될 수 있습니다. 쿠키를 사용하여 캐시 무효화 브로드 캐스트를 보완하면이 문제를 극복 할 수 있습니다. 이 부분은 a blog post here입니다.