2010-03-23 3 views
0

로드 밸런싱 환경에서 실행되는 응용 프로그램은 웹 서버 A 및 B를 사용합니다. 로드 밸런싱은 HTTP 수준이므로로드 밸런서는 각 사용자 요청을 둘 중 하나 웹 서버.spring.net 응용 프로그램 범위 저장소 객체로드 밸런싱 응용 프로그램

응용 프로그램의 저장소 범위는 spring.net 컨테이너 에 의해 관리되며 응용 프로그램은 저장소에서 캐싱 할 수있는 데이터 (성능상의 이유)를 사용합니다.

이 경우 두 웹 서버의 저장소에 캐시 된 데이터가 동일하다는 것을 확신 할 수 없습니다.

이런 종류의 문제를 관리 할 수있는 메커니즘이 spring.net에 있습니까? 아니면 이런 종류의 또 다른 공통 접근법이 있습니까?

아이디어가 있으십니까?

들으,

버트

답변

1

Spring.NET 개체 컨테이너이다. 캐싱 컨테이너로 사용되지 않으므로 리포지토리에 데이터를 저장하면 안됩니다. 이 경우에 필요한 것은 memcached과 같은 분산 캐싱 솔루션입니다. 그것에는 .NET client library also가 있습니다.

그래서 기본적으로 리포지토리는 개체가 존재하는지 여부를 확인한 다음 개체를 가져 와서 캐시에 저장하기 위해 실제 데이터 저장소를 방문합니다. Spring.NET은 이러한 저장소의 수명을 처리 할 것이며 웹 팜에서 실행 중일 때 서버 당 저장소를 갖지만 이러한 저장소는 분산 캐시를 사용하여 데이터를 가져 와서 일관된 resylts를 얻으므로 문제가되지 않습니다 팜의 모든 서버간에

+0

답장을 보내 주시면 스프링 컨테이너를 캐시로 사용하고 있지는 않지만 관리 대상 객체는 캐시 된 데이터를 가질 수 있습니다. ddd-repositories에 데이터를 저장하는 것은 나쁜 습관입니까? 왜 그런데? (응용 프로그램이 여러 웹 서버로 확산된다는 사실 외에도) –

+0

데이터를 객체에 저장한다는 것은 메모리에 저장한다는 것을 의미하기 때문입니다. 많은 양의 데이터가있는 경우 서버에서 메모리 사용량이 많아 질 수 있습니다. 또 다른 문제점은 캐시 분배입니다. 웹 팜 시나리오에서는 캐시 된 분산 시스템이 의미하는 데이터를 동기화 상태로 유지해야합니다. –