2011-04-28 12 views
1

Glassfish 응용 프로그램 서버 (정확히 동일한 배포 된 응용 프로그램을 실행하는)를 실행하는 2 개의 EC2 인스턴스가 있고이 인스턴스는 Elastic Load Balancer에서 실행됩니다. 이것은 훌륭하게 작동하지만 EJB와의 불일치를 캐싱하는 것이 걱정됩니다.GlassFish Amazon AWS EC2 인스턴스 및 ELB 캐싱 문제

상황 : 클라이언트가 EC2 인스턴스 1로 전달하는 요청을 ELB로 보냅니다. 일부 EJB 객체 (EJB1이라고 함)가 캐싱됩니다. 클라이언트 -> ELB -> EC2-1 (EJB1 캐시 됨)

잠깐 후 클라이언트가 다른 요청을 전송하지만 EC2 인스턴스 2로 전달됩니다. 이제 EJB1이 해당 인스턴스에 캐시됩니다. 클라이언트 -> ELB -> EC2-2 짧은 시간 나중에 클라이언트가 다른 요청을 보내고 1. EJB1는 캐시에 여전히 있지만 최신 상태로 EC2 인스턴스에 전달됩니다

(EJB1의 캐시가) 따라서 원인을 캐시 불일치 클라이언트 -> ELB -> EC2-1 (EJB1 캐시 됨)

불행히도 나는 실제로이 문제를 볼 수 없었지만 가능성이 있다고 생각합니다. EJB 캐싱을 끄는 것 이외에, 이것이 일어나지 않도록 적절한 방법은 무엇입니까?

감사합니다.

답변

1

아마존은로드 밸런서에서 "session stickiness"지원을 제공합니다. 즉, 사용자가 쿠키를 사용할 수 있다고 가정하면 세션이 지속되는 동안 동일한 EC2 인스턴스로 전송됩니다.

+0

답장을 보내 주셔서 감사합니다. 그건 분명히 생각 하겠지만, 우리 애플리케이션의 수정이 필요합니다 (iOS 고유 애플리케이션 용). 그것은 우리가 살펴볼 것입니다. – aSadhankar

1

레벨 2 캐시를 구현할 때까지는 인스턴스가 캐시를 공유하지 않습니다.

다음은 레벨 2 캐싱 솔루션을위한 몇 가지 링크입니다. (오픈 소스) http://www.terracotta.org/ehcache/ (대금 상환) http://www.oracle.com/technetwork/middleware/coherence/overview/index.html

+0

이 답변을 주셔서 감사합니다. 규모를 확대 할 때 고려해야 할 사항입니다. 지금은 응용 프로그램 서버에서 캐싱을 사용하지 않도록 설정했습니다. – aSadhankar