Optimierung von Node.js für eine große Anzahl von ausgehenden HTTP-Anfragen?

9

Auf meinem node.js-Server treten Zeiten auf, wenn er langsam wird oder nicht mehr reagiert, was gelegentlich zu 503-Gateway-Timeouts führt, wenn versucht wird, eine Verbindung zum Server herzustellen.

Ich bin zu 99% sicher (basierend auf Tests, die ich ausgeführt habe), dass diese Verzögerung spezifisch aus der großen Anzahl von ausgehenden Anfragen kommt, die ich mit dem node-oauth-Modul , um externe APIs (Facebook, Twitter und viele andere) zu kontaktieren. Zugegeben, die Anzahl der ausgehenden Anfragen ist relativ groß (in der Größenordnung von 30 oder so pro Minute). Schlimmer noch, dies bedeutet häufig, dass die entsprechenden eingehenden Anfragen an meinen Server ca. 5-10 Sekunden dauern können. Allerdings hatte ich eine frühere Version meiner API, die ich in PHP geschrieben hatte, die diese Menge an ausgehenden Anfragen problemlos bewältigen konnte. Tatsächlich ist die CPU-Auslastung für die gleiche Anzahl (oder sogar weniger) Anfragen mit meiner Node.js-API etwa 5 mal so hoch wie die meiner PHP-API.

Also versuche ich zu isolieren, wo ich das verbessern kann und vor allem, um sicherzustellen, dass 503 Timeouts nicht auftreten. Hier sind einige Dinge, über die ich gelesen oder mit denen ich experimentiert habe:

  • Dieser Artikel (von LinkedIn) empfiehlt das Ausschalten Socket-Pooling. Als ich jedoch den Autor des beliebten Moduls nodejs-request kontaktierte, war seine Antwort, dass dies eine sehr schlechte Idee war. li>
  • Ich habe gehört, dass die Einstellung von "http.globalAgent.maxSockets" auf eine große Anzahl helfen kann, und tatsächlich scheint es Engpässe für mich zu reduzieren

Ich könnte weitermachen, aber kurz gesagt, konnte ich nur sehr wenige definitive Informationen darüber finden, wie die Leistung optimiert werden kann, damit diese ausgehenden Verbindungen meinen eingehenden Anforderungen von Clients nicht nachstehen.

Danke im Voraus für irgendwelche Gedanken oder Beiträge.

FWIW, ich benutze auch Express und Mungo, und meine Server werden in der Amazon Cloud gehostet (2x M1.Large für die Knotenserver, 2x Load Balancer und 3x M1.Small MongoDB Instanzen).

>     
Zane Claes 30.08.2012, 16:33
quelle

2 Antworten

2

Es scheint mir, dass der Agent Ihre Anforderungen auf die Standardstufe 5 pro Host beschränkt. Ihre Tests zeigen, dass das Ankurbeln der maxSockets des Agenten geholfen hat ... Sie sollten das tun.

Sie können beweisen, dass dies das Problem ist, indem Sie einen Paket-Sniffer starten oder Ihrer Anwendung mehr Debug-Code hinzufügen, um zu zeigen, dass dies der limitierende Faktor ist.

    
Brad 30.08.2012, 16:35
quelle
-1

Ссылка

Deaktivieren Sie den Agenten vollständig.

    
Aaron 15.06.2013 20:10
quelle

Tags und Links