2012-06-05 4 views
0

지금 당장 나는 책임을 맡고있는 프로젝트에 들어갔다.서비스 레이어, 시간 캐시 구현

중반 부분에서 발견 된 부분 중 하나는 서비스 계층 캐시입니다. 서비스 계층의이 캐시는 데이터베이스 클러스터에서 많은 양의 호출을 피하기 위해 구현되었습니다. 하나의 서버가 다운 된 경우 성능 및 안정성을 위해 서비스 레이어가 두 개의 서버에서 호스팅됩니다.

내 문제가 생겼거나 시간이 초과 된 캐시를 구현하는 데 가장 좋은 패턴은 무엇입니까? 국가 등 거의 변경되지 않거나 업데이트되는 개체는 캐싱되며 풀이 재설정되지 않으면 캐시되지 않습니다.

우리 또는 이전의 선임자는 두 대의 개별 컴퓨터에서 두 개의 활성 서비스를 가지고 있기 때문에 시간 초과 캐시를 구현할 생각입니다. 다른 방법으로는 서비스가 서로 이야기 할 수 있지만 물론 서로에게 의존하지 않는다는 점을 감안하면 다른 서비스가 제대로 작동 할 수 있도록 할 수 있습니다.

지금은 캐시 된 항목이있는 12 개의 사전이 있습니다. 대부분이 거의 업데이트되지 않습니다. 이러한 사전은 싱글 톤이 아닌 싱글 톤으로 구현되는 하나의 클래스에 있으므로 한 번만 인스턴스화됩니다.

이 흥미로운 문제를 해결하기 위해 내가 어떻게 조언하며 그 이유는 무엇입니까?

답변

1

왜 설치 다음 캐싱 기술 중 하나를 사용하여 하나 또는 여러 서버에서 구성된 캐시 클러스터 :

이렇게하면 같은 일을하는 두 가지 서비스를 실행하는 것에 대해 걱정할 필요가 없습니다.

이 두 기술은 지정된 시간 동안 캐싱 개체를 지원합니다.

는 예컨대 :

public void Add(string key, object value, TimeSpan timeout) 
{ 
    //... 
} 

또는 무기한를 캐시 할 수 있습니다.

불쾌감이 지원됩니다. 작은 글씨를 알고 있어야합니다.

AppFabric Redundancy

위로 2010 년에 나는 AppFabric과 NCache에 대한 몇 가지 게시물을 썼습니다. http://cgeers.com/2010/07/11/ncache-distributed-in-memory-object-cache/

http://cgeers.com/2010/07/04/windows-server-appfabric-caching/

    • 함께 일할 수있는 쉽고 유사한 API를 제공합니다.

  • 0

    ASP.Net에는 이미 아주 멋진 캐싱 시스템이 내장되어 있습니다. 사용할 수없는 이유가 있습니까?

    캐시의 시간 초과 된 플러시를 지원하고 외부 이벤트로 플러시하며 메모리, 데이터베이스, 별도의 캐시 서버, 분산 캐시 등을 사용하도록 구성 할 수 있습니다. 당신이 당신의 자신의 :-)를 만들기 위해위한이 이유가 없을 것

    +0

    그들이했던 것처럼 그들이 왜 그랬는지 모르겠어요 그래서 나는이 프로젝트를 상속 :

    어댑터는 또한 ICacheProvider의 형태로 좋은 API를 제공한다. 다른 경험있는 사용자가 사용할 수있는 선택 항목과 그 이유에 대한 의견을 듣고 싶습니다. 이전에 구축 한 시스템은 캐싱을 많이 할 필요가 없었습니다. 한 페이지가로드 될 때 하나 또는 두 개의 호출이 이루어지고 같은 양의 데이터베이스 호출이 발생합니다. 여기에 한 페이지로드가 가끔씩 여러 번의 호출로 이어지고 많은 데이터베이스 호출로 인해 많은 db 호출이 발생하고 이것이 구현 된 캐싱의이 형식을 수행 한 이유가 들었습니다. – Johan

    +0

    캐싱의 필요성은 예상되는 트래픽 양에 달려 있습니다. 이것이 트래픽이 적은 솔루션이라면 캐싱은 제 의견으로는 복잡합니다. –

    +1

    캐싱은 최적화 기술이므로 솔루션을 사용하지 않고 솔루션을 빌드 한 다음 필요에 따라 나중에 캐싱을 추가 할 수 있습니다. 그렇게하면 솔루션의 어느 부분이 좋든 나쁘 든간에 추측 할 필요가 없습니다. –

    1

    MemCached입니다. MemCached는 설명하는 것과 같은 분산 아키텍처를 대상으로합니다. 나는 Paul Glavic에 의해 쓰여진 어댑터를 사용합니다. 사용법을 보여주는 here 게시물을 작성했습니다.

    Glavs 어댑터를 사용하면 나중에 Aspnet 캐싱에서 MemCached 또는 AppFabric으로 캐싱 구현을 전환 할 수 있습니다.

    var data1 = cacheProvider.Get<SomeData>("cache-key", DateTime.Now.AddHours(1),() => 
    { 
        // With the cache disabled, this data access code is executed every attempt to 
        // get this data via the CacheProvider. 
        var someData = new SomeData() { SomeText = "cache example1", SomeNumber = 1 }; 
        return someData; 
    }); 
    
    +0

    나는 이것을 좋아한다! 건배 – Mantisimo