카운터

카운터

전반적으로 저는 매우 작은 파일을 제공합니다. 이미지와 작은 비디오를 생각해 보세요. Varnish를 사용하여 이를 캐싱하는 것은 매우 쉽고 아무런 문제도 발생하지 않습니다.

내가 겪고 있는 문제는 6GB 파일을 다운로드할 때입니다. 그렇게 하면 Varnish가 사용하는 메모리가 충돌하는 순간까지 올라가는 것을 볼 수 있습니다. 그런 다음 다시 충돌할 때까지 다시 시작됩니다.

  1. Varnish가 충돌하는 것을 방지하고 싶습니다.
  2. 따라서 다운로드가 매번 일시 중지되고 매우 느립니다. 6GB 파일을 다운로드하면 됩니다. 기간.

이미 파일 및 RAM 캐시 저장소를 사용해 보았지만 다르지 않았습니다. 임시 메모리를 설정하여 충돌을 피할 수 있었습니다. DAEMON_OPTS="-s Transient=malloc,512m"

그러나 이는 Varnish가 512MB를 사용하는 순간에만 발생하며 그 이후에는 다시 충돌이 발생합니다.

vcl_backend_response나는 테스트 사례로 두 가지를 모두 시도했습니다 .

  if (std.integer(beresp.http.Content-Length, 0) > 5242880) {
        set beresp.do_stream = true;
        return (deliver);
  }

그리고

  if (std.integer(beresp.http.Content-Length, 0) > 5242880) {
        set beresp.uncacheable = true;
        return (deliver);
  }

그러나 둘 중 어느 것도 내 브라우저에서 파일이 제대로 다운로드되었는지 확인하지 못합니다.

VarnishLog에서 이 오류가 발생하지만 이는 단지 메모리가 가득 차서 충돌이 발생했음을 의미하는 것 같습니다. FetchError Could not get storage

다운로드가 중단되는 것을 방지하려면 여기서 무엇을 놓치고 있습니까? 어쨌든 varnish가 파일을 캐싱하고 있습니까?

참고: HAProxy는 Varnish 앞에서 실행됩니다. Apache는 실제 웹 서버입니다.

답변1

카운터

당신의 모습을 살펴보세요저장 카운터사용하여 varnishstat.

무슨 일이 일어나고 있는지 이해하는 데 도움이 되는 카운터는 다음과 같습니다.

SMA.s0.g_space
SMA.s0.g_bytes
SMA.Transient.g_bytes

g_spaceg_bytes사용 가능한 공간과 사용 중인 공간의 바이트 수를 알려드립니다 . SMA너의malloc 스토리지,과도 현상캐시 크기의 일부가 아닌 임시 저장소를 나타냅니다.

캐시 크기

다음과 같은 개체를 처리하는 경우6GB크기면에서 -s malloc설정은 최소한크기 6GB그렇지 않으면 공간을 할당할 수 없으며 충돌이 발생합니다.

캐시 크기가 다음보다 약간 큰 경우6GB이 경우 바니시는 지속적으로핵무기공간을 절약하기 위해 캐시에서 개체를 가져옵니다. 거기에 충분한 양이 있는지 확인하십시오.

TTL이 2분 이하인 단기 개체는 결코 거기에 도달하지 않으며임시 저장

파일 하역업자

이있다파일 하역업자디스크를 스토리지 개체에 사용합니다. 이는 캐시의 전체 크기가 Varnish에 할당하려는 메모리 양을 초과하는 경우 사용할 수 있습니다.

그러나 시간이 지남에 따라파일 하역업자실제로 최적화되어 있지 않기 때문에 속도가 느려집니다. 디스크 조각화가 발생하고 성능이 좋지 않습니다.

대용량 스토리지 엔진

이러한 스토리지 문제를 해결하기 위해 Varnish Software는대용량 스토리지 엔진(MSE). 이는 데이터에서 페타바이트를 저장할 수 있으며 조각화나 지연이 발생하지 않는 방식으로 작성되었습니다.

불행히도 이것은 오픈 소스 하역업자가 아닙니다. 이는 라이센스가 필요한 Varnish Enterprise 제품의 일부입니다. 그러나 공식 클라우드 이미지(AWS, Azure, GCP 및 OCI)를 사용하면 라이선스를 미리 구매하지 않고도 Varnish Enterprise로 작업할 수 있는 기회를 얻을 수 있습니다.

대용량 파일을 캐시하지 마세요

또 다른 옵션은 대용량 파일이 모두 함께 캐시되는 것을 방지하는 것입니다.

분명히 콘텐츠 길이를 기준으로 대용량 파일을 제외하는 것은 작동하지 않습니다. return(pipe)현재 대용량 파일에 객체 스토리지 메모리가 사용되지 않도록 하는 유일한 방법은 vcl_recv.

들어오는 요청을 기반으로 응답이 엄청날 것이라는 점을 미리 알아야 하기 때문에 이는 이상적인 솔루션이 아닙니다.

return(pipe)캐시를 우회하는 동시에 캐시를 벗어나는 Varnish의 메커니즘입니다.HTTP 모드그리고 들어가다TCP 모드. 이는 일반적으로 들어오는 요청이 HTTP처럼 보이지 않는 경우에 사용됩니다.

관련 정보