2016-06-14 13 views
1

동일한 ServiceA의 여러 인스턴스가 다른 jvm에서 실행 중입니다. 그러나 그들은 모두 동일한 백엔드 데이터를 DB에서 공유하고 있습니다.중복 된 요청을 피하기위한 분산 캐싱

클라이언트로부터 요청이있을 때 ServiceA는 데이터가 DB에서 사용 가능한지 조회하고, 그렇지 않으면 다른 ServiceB에 데이터를 요청하고 저장합니다 그것의 DB에 다시 클라이언트로 반환합니다.

두 클라이언트가 동시에 요청하고 ServiceA의 두 인스턴스가 이러한 요청을 처리하면 두 인스턴스 모두 효과적으로 ServiceB를 호출하여 해당 데이터를 가져올 수 있습니다. SerivceB에 대한 요청이 하나만 있도록이 사건을 어떻게 처리해야합니까?

답변

0

요청에 해시를 적용하고 요청이 이미 있으면 요청 대기열에 체크인하십시오.

하면 해당 작업에 도착 효과적으로 당신은 또한 여러 캐싱 서버의 경우 해시 요청을 보낼 위치를 알 필요가 :

당신에게 끝을 2 캐싱을 다시 가정 : 당신은 결함 허용하고 효율적으로 할 수 있습니다.

효율적인 : 이것은 계수가 어떤 서버는

결함 허용이 캐시 백 엔드가인지 확인하는 경우 통신 층의 일부가 될하는 얘기를 결정하는 해시를 통해 간단한 MODULUS 수행 할 수 있습니다 실제로 사용할 수 있으며 어디에서 탈퇴할지 결정할 수 있습니다.

1

두 개를 더한 것 @norbert-van-nobelen;

두 가지 가능성이 더 있습니다.

  • 하나는 ServiceB는
  • 다른 옵션은 ServiceA이 ServiceB 동기화 및 경쟁 조건을 처리 할 수 ​​있도록하는 것입니다 처리 할 요청을 결정하게하는 것입니다.

서비스에 대한 설명이 매우 추상적이어서 서비스 B에 분산 된 잠금으로 구현하거나 분산 캐시를 통합하여 사용할 수 있습니다.

예; http://blogs.alachisoft.com/distributed-locking/