2012-03-29 3 views
4

Ich bewerte, um einen Webcrawler mit Storm (das Echtzeit-Framework, nicht die IDE) zu bauen. My Spout würde einen Stream von URIs liefern, die im ersten Bolt, der in PHP geschrieben ist, aufgerufen und abgerufen werden müssen.Nicht blockierende HTTP-Aufrufe in Storm mit PHP

Da ich von einem node.js-Hintergrund komme, weiß ich, dass es möglich ist, eine solche Funktionalität auf nicht blockierende Weise zu erstellen, indem Rückrufe verwendet werden. Meine naive Idee wäre, einfach eine Menge Aufgaben für diesen Bolt zu konfigurieren, so dass die Ressourcen vollständig genutzt werden können, während einige Taks auf Antworten warten. Das Problem ist, php ist berüchtigt, eine Menge Ressourcen für jeden Prozess zu vergeben, und ich habe keine Ahnung, wie Storm das intern verwaltet und ob das eine gute Idee ist.

Ist ein node.js-ähnliches Verhalten in dieser Umgebung möglich? Oder muss ich für diesen Bolzen in eine andere Sprache wechseln, um das zu erreichen (und wenn ja, wie mache ich das)?

Antwort

1

Ich schrieb einen Web-Crawler, der Storm & non-blocking HTTP-Aufrufe verwendet, wenn auch in Java. Wir haben es in der Produktion verwendet und es funktioniert ziemlich gut.

Wir haben einen Strom von URLs, die aus einer Tülle kommen, die an Raupenschrauben gesendet wird. Jede Schraube führt zu nicht blockierenden HTTP-Anforderungen, bei denen ich einen Rückruf registriere, der Ergebnisse an die Ausgabesammler sendet. I.e. Ja, du kannst mit Storm nicht-blockierende IO machen.

Ich bin nicht vertraut mit PHP-Entwicklung, so kann ich nicht so viel kommentieren, aber was auch immer Sie tun werden, wird es wahrscheinlich ziemlich schlecht im Vergleich zu einer JVM-basierten Sprache wegen der Interprozess-Messaging.

Hinweis: Ausgabesammler sind in aktuellen Storm-Versionen nicht mehr Thread-sicher. Stellen Sie daher sicher, dass Sie sie synchronisieren, wenn Sie Dateien asynchron ausgeben.