2012-10-02 6 views
46

바니시 버전 3에는 다른 작업을위한 개체가 있습니다.틈을 피하십시오.

예를 들어, 백엔드에서 데이터를 검색해야 할 때 pass가 사용됩니다. 캐시에서 컨텐츠를 요청할 때 히트를 사용합니다.

하지만 hit-for-pass 사용법은 이해할 수 없습니다. 바니쉬가 그것을 사용할 때? 나에게 명확한 인터넷상의 유용한 자료를 찾지 못했다.

답변

153

hit_for_pass 객체는 백엔드 서버에 대한 반입 절차를 최적화하기 위해 만들어졌습니다.

일반 캐시 실패의 경우 Varnish는 동일한 캐시 개체를 요청하는 모든 클라이언트를 대기시키고 백엔드에 단일 요청을 보냅니다. 이것은 보통 가장 빠르며, 백엔드가 n 개의 요청으로 동시에 요청하는 대신 단일 요청에 대해 작업하게합니다.

일부 백엔드는 객체를 준비하는 데 많은 시간을 사용합니다. 10 초는 드문 일이 아닙니다. 이것이 프론트 페이지 HTML이고 3000 req/s를 가지고 있다면 백엔드 요청을 하나만 보내면 많은 의미가 있습니다.

바니시가 개체를 가져온 후에 캐시 할 수없는 것으로 보이는 문제가 발생합니다. 이 이유는 백엔드가 "Cache-Control : max-age = 0"또는 (더 자주) Set-Cookie 헤더를 전송할 수 있기 때문입니다. 이 경우 대기열에 3,000 ~ 30,000 개의 클라이언트 (3k req/s * 10sec)가 대기 중이고 각 클라이언트에 대해 동일한 느린 한 번에 한 요청이 완료되어야합니다. 이것은 귀하의 사이트 응답 시간을 망칠 것입니다.

그래서 Varnish는 hit_for_pass 개체를 만들어이 요청을 캐싱 할 수 없다는 결정을 저장합니다.

같은 URL에 대한 다음 요청에서 캐시 조회는 hit_for_pass 개체를 반환합니다. 이것은 동시에 여러 번 가져올 수 있다는 신호입니다. 백엔드가 그것에 대해 너무 행복하지는 않지만, 적어도 바니시는 아무 이유없이 클라이언트를 대기 행렬에 넣지 않습니다.

+0

알 수 있습니다. 고마워요 @ikarsten –

+1

아주 명확한 설명. 고맙습니다. – Vaheh

+0

위대합니다. 고마워요! – tven