2010-03-15 4 views
3

지리적으로 분산 된 여러 노드에서 플래시 비디오 파일을 S3 버킷으로 업로드하는 프로젝트가 있습니다.루비 파일 스트림 속도 제한

비디오 파일은 각각 약 2-3MB이며 노드 당 10 분당 하나의 파일 만 전송하지만 우리가 소비하는 대역폭은 ~ 20k/s로 제한되어야합니다. 미디어를 CDN으로 스트리밍하고 위치 때문에 최대 512KB 업로드 만 가능합니다.

나는 ASW-S3 보석을 조사해 왔지만 어떠한 속도 제한도 제공하지는 않지만 IO 스트림을 전달할 수 있음을 알고 있습니다. 이 점을 감안할 때 read 메서드를 재정의하는 속도 제한 스트림을 만드는 것이 가능한지 궁금합니다. 속도 제한 논리를 추가하고 (예 : 가장 간단한 형태로 읽기 간 sleep) 재정의 (override)되는 메소드

내가 생각하는 또 다른 옵션은 인터넷 :: HTTP에 대한 코드를 해킹하고 while 루프를 사용하는 send_request_with_body_stream 방법에 제한 속도를 넣어,하지만 난 최선의 선택이 될 것이다 완전히 확신하지 않습니다.

나는 IO 클래스를 확장하려고 시도했지만, 전혀 작동하지 않았고 단순히 class ThrottledIO < IO 클래스를 상속 받으면 아무것도하지 못했습니다.

모든 의견을 크게 기뻐할 것입니다.

답변

4

입출력을 "추가"하려면 대리자를 사용해야합니다. 이렇게하면 IO 객체 주위에 "외관"이 만들어져 객체의 모든 "외부"독자가 사용할 수 있지만 객체 자체의 작업에는 영향을 미치지 않습니다.

나는 보석으로 여기

여기 측면 모두에 추가가

http://rubygems.org/gems/progressive_io

읽기는 누가 받 IO에 대한 예입니다 일반적으로 유용한 것으로 판명 이후 있음을 추출했습니다 독서 방법. 기본 조절을 확장 할 수 있다고 생각합니다. 완료되면 파일을 말로 감쌀 수 있습니다.

0

우리는 aiaio's active_resource_throttle을 사용하여 직장의 프로젝트에서 Harvest API를 요청한 것을 제한했습니다. 나는 그것을 설정하지 않았지만 효과가있다.