2017-12-20 30 views
1

대부분의 CDN 서버는 자주 액세스하는 내용에 대해 캐싱을 사용합니다.캐시 넣기 항목 병행 성 및 처리량

시나리오 : 가정하는 사람이 그 그림에 액세스하려고 매우 추세 그림과 같은 위치에서 많은 사용자 (1000) 업로드 할 수 있습니다.

질문 : 은 웹 서버가 먼저 요청을 수신은 캐시 확인하고 그 그림에 대한 콘텐츠 미스를 발견 말하고 CDN.If 풀에서 콘텐츠의 X 초와 서버가에 대한 한편 999 이상의 요청을 가지고 말할 수 걸립니다 당겨 수 있습니다 동일한 콘텐츠.

서버가 콘텐츠를 서버에서 999 번 더 가져오고 (서버가 여전히 데이터를 가져오고 캐시에 데이터가 없음) 캐시를 업데이트하겠습니까?

이러한 상황을 피하기 위해 서버가 구현하는 스키마가 아닌 경우.

답변

0

CDN에 대한 요청이 너무 많지 않도록 서버 쪽에서 잠금을 설정할 수 있습니다.

서버가 요청을 수신하면 :

  1. 작업 쓰레드 확인 키가 존재하는 경우를. 키가 있으면 값을 리턴하십시오.
  2. 키가 없거나 캐시 미스 인 경우 작동중인 스레드가 뮤텍스를 잠급니다.
  3. 성공적으로 잠그면이 작업 스레드는 CDN에서 데이터를 가져 와서 캐시를 업데이트하고 뮤텍스를 잠금 해제합니다.
  4. 이 스레드가 뮤텍스를 잠그지 못했습니다. 즉, 다른 스레드가 CDN에 요청을 보내면 잠시 시간이 있습니다. 1 초, 1 단계로 진행하여 전체 프로세스를 다시 시도합니다.

많은 서버가 있고 캐시가 이러한 서버, 즉 여러 프로세스에서 공유되는 경우 분산 잠금을 사용할 수 있습니다 (예 : Redis 'SETNX.

그러나이 경우 단계 3 : 서버가 성공적으로 잠겨 있지만 잠금 해제 전에 충돌하는 경우주의해야합니다. 다른 서버는 영원히 기다릴 것입니다. 그래서 자물쇠의 만료를 설정해야합니다.