2012-04-01 3 views
1

Rack :: Cache를 스택의 최상위 (마지막) 미들웨어로 설정했습니다. 내 응용 프로그램은 heroku cedar에서 호스팅되므로 Rack :: Cache는 정적 자산도 담당합니다.Rack :: Cache 성능이 좋지 않음

그것은이 같은 Heroku가 memcached와 제품의 지원 및 구성 : 그것은 얇은에서 실행중인

config.action_dispatch.rack_cache = { 
    :metastore => Dalli::Client.new, 
    :entitystore => 'file:tmp/cache/rack/body', 
    :allow_reload => false 
} 
config.static_cache_control = "public, max-age=2592000" 

.

ab를 사용하여 이미지 파일의 성능을 테스트하고 있습니다.

ab -n100 -c10 https://example.com/foo.jpg

내 로그에 보면, 모든 요청 ("신선한") 캐시 히트입니다. 그러나 성능은 좋지 않으며 약 6 요청/초입니다. 나는 Rack :: Cache가 전용 HTTP 프록시를 수행하지 않을 것이라는 것을 알고 있지만, 확실히 이것보다 더 높은 처리량을 기대한다.

업데이트 나는 이전에 이런 생각을하지 못했지만 실제로는 내 인터넷 연결을 극대화하고 있습니다. jpg 대신 robots.txt를 사용하여 동일한 테스트를 수행하면 초당 20 건의 요청이 발생합니다 (여전히 다운 스트림을 최대한 활용할 수 있습니다).

+0

Rack :: Cache와 함께 테스트하고 결과를 알려줄 수 있습니까? –

+0

큰 질문입니다. Rack :: Cache는 3 요청/초입니다. –

답변

2

내 게시물의 URL이 HTTPS 인 것으로 나타났습니다. 큐에 시간이 0ms이고 서비스 시간이 5-10ms라고 했더라도 특정 요구 (정적 자산과 그렇지 않은 경우 모두)가 높은 대기 시간을 경험할 수있는 호스트 이름 기반 SSL을 사용하여 시더 (cedar) 스택에 문제가있었습니다.

우리는 아니에요 : 여기에게 Heroku의 지원 반응이다 (그가 언급하지 않는 것은 그 니스는 호스트 기반 SSL을 실행하는 경우는 스택의 존재에도 불구하고,에 관계없이 삼나무 애플 리케이션에서 오는 캐시 자원하지 않는 것입니다) 이것의 원인이 무엇인지 완전히 확신하지만, 우리는 바니시 의 비난을 의심합니다. 일반적으로 Cedar 스택에서는 바니시가 없습니다. 그러나 SSL 호스트 이름 추가 기능을 사용하면 바니시가 응답 프로세스 인 에 다시 추가됩니다. Rack :: Cache와 Varnish를 둘 다 사용할 필요가 없습니다.

그림에서 광택을 제거하여 이 도움이되는지 확인하고 싶습니다. 이렇게하는 방법은 새 SSL 추가 기능인 SSL 끝점으로 SSL을 이동하는 것입니다. SSL Endpoint는 기술적으로 아직 베타 버전이지만 곧 사용할 수있는 이며 SSL 호스트 이름과 동일한 비용이 부과됩니다. 그것은 Heroku의 SSL의 미래이며 모든면에서 더 낫습니다.

http://devcenter.heroku.com/articles/ssl-endpoint-beta2
사용자 : 베타 패스 : * ***

이동의 단점은 DNS를 업데이트 할 필요가 있지만,이 이 완료되면, 니스가 그림 밖으로 될 것입니다 우리는 이 문제인지 여부에 대해 더 잘 이해할 수 있습니다.

현재 SSL 끝점 인 Amazon ELB가 잘못되어 교체해야 할 가능성도 고려했습니다. 그러나 이것이 인 경우 대부분의 요청이 느려지거나 실패 할 수 있습니다. 단 하나의 느린 요청 인 입니다. 현재 ELB를 바꾸려면 DNS 변경이 필요합니다.새로운 SSL 종단점 애드온으로 이동하면 나중에 상황이 더 쉬워집니다. ELB를 스왑 아웃하면 이 필요하면 DNS 변경이 필요하지 않습니다.

현재로서는 SSL 종점으로 이동하는 것이 가장 좋습니다.

필자가 보았던 대기 시간이 30-60 초 범위로 올라간다는 것을 알았습니다. 이는 분명히보고있는 것보다 훨씬 더 나쁩니다. 내 (HTTPS) cedar 앱 중 일부에서 정적 애셋에 대해 동일한 Apache 벤치 명령을 실행할 때 훨씬 좋지 않습니다 (10-15 req/s). 동시성을 50 또는 100으로 늘리면 RPS는 최대 30까지 올라갑니다. 그러나 Varnish가 대나무 HTTPS 애플리케이션에서 정적 애셋의 경우 50 req/s 이상으로 늘릴 수 있습니다. 내 컴퓨터가 더 높은 동시성을 처리 할 수 ​​있다면, 나는 더 높은 동시성을 보일 것이라고 생각한다. 그리고 내 인터넷 연결은 셀룰러 네트워크에 있기 때문에 대기 시간이 길어집니다.

+0

서사시 ​​답장! 인스턴트 SSL을 사용하여 이상한 바니시 레이어가 문제가되지 않습니다. 비교 벤치 마크는 다소 안심할 수 있습니다. 어쩌면 로컬에서 관찰 할 수있는 동시성이 더 높을 수도 있습니다. 운 좋게도 대부분의 자산은 CDN에 있습니다. –

+0

도 위의 업데이트를 참조하십시오. –