지금 당장 나는 책임을 맡고있는 프로젝트에 들어갔다.서비스 레이어, 시간 캐시 구현
중반 부분에서 발견 된 부분 중 하나는 서비스 계층 캐시입니다. 서비스 계층의이 캐시는 데이터베이스 클러스터에서 많은 양의 호출을 피하기 위해 구현되었습니다. 하나의 서버가 다운 된 경우 성능 및 안정성을 위해 서비스 레이어가 두 개의 서버에서 호스팅됩니다.
내 문제가 생겼거나 시간이 초과 된 캐시를 구현하는 데 가장 좋은 패턴은 무엇입니까? 국가 등 거의 변경되지 않거나 업데이트되는 개체는 캐싱되며 풀이 재설정되지 않으면 캐시되지 않습니다.
우리 또는 이전의 선임자는 두 대의 개별 컴퓨터에서 두 개의 활성 서비스를 가지고 있기 때문에 시간 초과 캐시를 구현할 생각입니다. 다른 방법으로는 서비스가 서로 이야기 할 수 있지만 물론 서로에게 의존하지 않는다는 점을 감안하면 다른 서비스가 제대로 작동 할 수 있도록 할 수 있습니다.
지금은 캐시 된 항목이있는 12 개의 사전이 있습니다. 대부분이 거의 업데이트되지 않습니다. 이러한 사전은 싱글 톤이 아닌 싱글 톤으로 구현되는 하나의 클래스에 있으므로 한 번만 인스턴스화됩니다.
이 흥미로운 문제를 해결하기 위해 내가 어떻게 조언하며 그 이유는 무엇입니까?
그들이했던 것처럼 그들이 왜 그랬는지 모르겠어요 그래서 나는이 프로젝트를 상속 :
는어댑터는 또한 ICacheProvider의 형태로 좋은 API를 제공한다. 다른 경험있는 사용자가 사용할 수있는 선택 항목과 그 이유에 대한 의견을 듣고 싶습니다. 이전에 구축 한 시스템은 캐싱을 많이 할 필요가 없었습니다. 한 페이지가로드 될 때 하나 또는 두 개의 호출이 이루어지고 같은 양의 데이터베이스 호출이 발생합니다. 여기에 한 페이지로드가 가끔씩 여러 번의 호출로 이어지고 많은 데이터베이스 호출로 인해 많은 db 호출이 발생하고 이것이 구현 된 캐싱의이 형식을 수행 한 이유가 들었습니다. – Johan
캐싱의 필요성은 예상되는 트래픽 양에 달려 있습니다. 이것이 트래픽이 적은 솔루션이라면 캐싱은 제 의견으로는 복잡합니다. –
캐싱은 최적화 기술이므로 솔루션을 사용하지 않고 솔루션을 빌드 한 다음 필요에 따라 나중에 캐싱을 추가 할 수 있습니다. 그렇게하면 솔루션의 어느 부분이 좋든 나쁘 든간에 추측 할 필요가 없습니다. –