2012-03-29 3 views
4

Storm (IDE가 아닌 실시간 프레임 워크)을 사용하여 웹 크롤러를 작성하려고하고 있습니다. My Spout은 PHP로 작성된 첫 번째 Bolt에서 호출되고 검색되어야하는 URI 스트림을 전달합니다.Storm에서 PHP로 비 차단 HTTP 호출

node.js 배경에서 오는대로 콜백을 사용하여 비 차단 방식으로 이러한 기능을 구현할 수 있음을 알고 있습니다. 내 순진한 생각은 그 볼트에 대한 많은 작업을 구성하는 것입니다. 따라서 일부 탁구가 응답을 기다리는 동안 자원을 완전히 사용할 수 있습니다. 문제는 php가 각 프로세스에 많은 자원을 할당하는 것으로 유명하며, Storm이 내부적으로 어떻게 관리하는지, 그리고 이것이 좋은 아이디어인지는 알 수 없습니다.

이 환경에서 node.js와 유사한 동작이 가능합니까? 아니면이 볼트가 다른 언어로 전환해야합니까? 그렇다면 어떻게해야합니까?

답변

1

나는 Java이지만 Storm & 비 차단 HTTP 호출을 사용하는 웹 크롤러를 작성했습니다. 우리는 그것을 프로덕션에서 사용하고 있으며 꽤 잘 작동합니다.

Google은 스파이더에서 들어오는 URL 스트림을 보내며 크롤러 볼트로 발송합니다. 각 볼트는 비 블로킹 HTTP 요청을 만들며 출력 콜렉터에 결과를 내 보낼 콜백을 등록합니다. 나는. 예, Storm으로 비 차단 입출력을 할 수 있습니다.

필자는 PHP 개발에 익숙하지 않아서 그다지 언급 할 수 없지만, 무엇을 하든지 인터 프로세스 메시징으로 인해 JVM 기반 언어와 비교할 때 성능이 떨어질 수 있습니다.

참고 : 최신 버전의 Storm에서는 출력 수집기가 더 이상 스레드 안전성이 없으므로 물건을 비동기 적으로 방출 할 때 출력 수집기를 동기화해야합니다.