Verbindungsabbrüche bei zu vielen API calls

philsc

Lt. Junior Grade
Registriert
Sep. 2016
Beiträge
434
Hallo,

ich habe ein Python Script erstellt, welches ca. 5000 API calls pro Minute ausführt. Meine Bandbreite ist dabei längst nicht am Limit, nicht mal 10% Auslastung, dennoch erhöht sich mein Ping extrem (von 5 auf 1000 ms), teilweise bricht das Internet komplett zusammen und mein Router muss neu verbinden. Welche Ursachen könnte das haben?
Meine Idee ist nun, das Script auf einem VPS laufen zu lassen und mir den Output in Form einer txt Datei (weniger als 1 MB) an meinem Heimcomputer zu schicken. Allerdings weiß ich nicht, ob der VPS dabei das gleiche Problem hätte.
Könnte mir dazu vielleicht jemand mehr sagen?
 
gib script :D kann das heute abend bei ein paar hostern laufen lassen

gegen welche api ;aesst di das laufen?
welchen internetanbieter hast du denn? Ist es ein Rosa Riese mit chronischen Peering problemen? :)
wohin erhoeht dein ping sich?
via wlan, kabel oder dlan?
 
  • Gefällt mir
Reaktionen: Der Lord und Staubgeborener
madmax2010 schrieb:
Rosa Riese mit chronischen Peering problemen
Kann ich gern mit einem rosafarbigen FTTH-Anschluss gegentesten wenn das Script zur Verfügung gestellt wird. ;)

Ansonsten hat madmax schon genau die richtigen Fragen gestellt, um das Problem weiter einzugrenzen. Ohne mehr Input wirds schwer.
 
die vielen kleinen pakete können schon die leitung "verstopfen" und damit eben auch den ping erhöhen. das internet sollte deshalb eigentlich nicht zusammenbrechen. was hast du für einen router?
 
Ich kann das Script leider nicht rausgeben, da es einige API keys enthält.
Es geht hier um Rest APIs von verschiedenen Kryptobörsen.
Mein Internetanbieter ist Telekom, ich habe 100 Mbit down und 20 Mbit up. Die Auslastung beträgt in der Regel unter 5 Mbit/s.
Der Ping erhöht sich ganz allgemein, egal ob ich eine Webseite im cmd anpinge oder ob ich zocke oder sonstwas.
Mein PC ist via LAN Kabel am Router (Fritzbox 7590) angeschlossen.
Irgendwie scheint das Netzwerk überlastet zu sein, ohne dass eine hohe Datenrate stattfindet.
 
Zu früheren Filesharingzeiten kamen einige Router nicht mit zu vielen gleichzeitigen Verbindungen klar. Kann es evt. einfach am Router liegen?
 
  • Gefällt mir
Reaktionen: madmax2010
philsc schrieb:
Irgendwie scheint das Netzwerk überlastet zu sein, ohne dass eine hohe Datenrate stattfindet.
ja wie gesagt, auch kleine pakete müssen behandelt werden, teilweise mit dem selben aufwand wie große. wären die API calls 1-2MB jeweils groß würde auch deine leitung eine höhere datenrate zeigen
 
Welcher Router genau?
Betrifft das dann nur deinen PC oder ist das "langsame Internet" auch von anderen Geräten imselben Netzwerk festzustellen?
 
Router Firmware ist up to date und das "langsame Internet" betrifft jedes Gerät im Netzwerk.
Beispiel: Wenn Netflix am TV läuft und ich das Script starte, dann bleibt Netzflix hängen. Sobald das Script aus ist, läuft wieder alles einwandfrei.
Bis zu ca. 2000 API Calls pro Minute steigt mein Ping übrigens überhaupt nicht und die Leitung ist stabil, allerdings reicht mir das leider nicht aus.

Deshalb die Frage mit der VPS, falls das Problem wirklich ein Peering Problem durch den "Rosa Riesen" ist.
Allerdings weiß ich da nicht, welche Leistungsstärke der VPS haben sollte, mein PC (Windows 10, i7-6700k, 16 GB RAM) hat bis zu 40% Prozessorauslastung.
 
Zuletzt bearbeitet:
Bei vielen Servern wirds evtl. ein Limit geben wie viele Requests durchgehen bis er die Pakete einfach dropt. Der Server sendet also nicht mal mehr ein Reset für die Verbindung, somit bekommt dein Router und der Rechner wo das Skript läuft nicht mit wenn es noch Verbindungen hält die eigentlich ins nichts laufen.

Bei 5000 API Aufrufen pro Minute läufst du evtl. recht schnell in ein Port Limit bei 65535 rein und neue Verbindungen können recht stockend aufgebaut werden.
 
  • Gefällt mir
Reaktionen: Der Lord
sOuLjA4eVeR schrieb:
Bei vielen Servern wirds evtl. ein Limit geben wie viele Requests durchgehen bis er die Pakete einfach dropt. Der Server sendet also nicht mal mehr ein Reset für die Verbindung, somit bekommt dein Router und der Rechner wo das Skript läuft nicht mit wenn es noch Verbindungen hält die eigentlich ins nichts laufen.

Das sollte eigentlich nicht der Fall sein, die API Requests haben ein timeout von 3 Sekunden, wenn bis dahin keine Antwort kam, dann wird die Anfrage gedropt.
Außerdem weiß ich, dass selbst bei 5000 Requests noch alle Requests erfolgreich ausgeführt werden, es steigt nur halt der Ping und die Verbindung kann irgendwann abbrechen.
 
Stell bitte das Skript hier rein und nimm deine API-Keys raus. Die möglichen Ursachen sind so vielfältig, dass man hier ohne weiteres zu wissen eigentlich keine verlässliche Aussage treffen kann.
 
Wie werden die API Calls gemacht? Per WebSocket oder macht jeder Call einen eigenen HTTPS Request?

Das macht schon einen enormen Unterschied, da bei Variante 2 jedes Mal der gesamte SSL Handshake ausgeführt werden muss.
Zudem wird für jeden Request ein zusätzlicher Port aufgemacht. Irgendwann ist dann einfach Schluss.

Du kannst ja mal auf deinem PC per "netstat -anb" (als Admin) alle offenen Ports anzeigen lassen.

Ich vermute du machst die ganzen Requests um Kursdaten abzufragen. Du kannst mehrere Currencies in einer Anfrage bündeln und in der Response dann auseinander friemeln. Mache ich genauso und komme so mit den kostenlosen Requests am Tag aus ;)

Beispiel:

/usr/bin/curl -X GET -H "X-CMC_PRO_API_KEY:xxxxx-xxxxx-xxxxx-xxxxx" -H "Accept:application/json" -d "symbol=BTC,ETH,ADA,OCEAN,VET,DGB,PAN,DOGE&convert=EUR" -G "https://pro-api.coinmarketcap.com/v1/cryptocurrency/quotes/latest"
 
  • Gefällt mir
Reaktionen: Falc410 und Der Lord
Ich tippe einfach dass der Router überlastet ist, wie schon gesagt, werden hier Verbindungen aufgebaut, der Router hat eine NAT Tabelle die irgendwann voll läuft und geleert werden muss. Wenn du Zugriff auf einen einen VPS hast, würde ich es über den einfach probieren. Der sollte an entsprechend groß dimensionierten Switches / Routern hängen.

An deinem Rechner wird es ja nicht liegen wenn es alle Geräte im Netz betrifft. Und auch wen die Verbindung nur 3 Sekunden dauert, wird der Router den Eintrag noch eine Weile länger in seiner Tabelle behalten, da er ja nicht weiß ob noch Pakete zu dieser Verbindung kommen oder nicht.
 
Falc410 schrieb:
An deinem Rechner wird es ja nicht liegen wenn es alle Geräte im Netz betrifft.
Richtig. Der Router macht einfach dicht. Der Vergleich mit den Torrent Downloads aus Post #6 ist ziemlich passend. Kenne das auch noch. Bei mehr als 150 gleichzeitigen Verbindungen ist der Router damals immer in die Knie gegangen und nur ein Neustart hat geholfen.
 
Ja das denke ich mir auch.
Mit meinem System zuhause komme ich da nicht weiter, außer ich reduziere die API Calls, was aber keine Option ist.
Die Frage ist wirklich, ob ein VPS mit dieser Menge an Anfragen eher klarkommt?
 
philsc schrieb:
außer ich reduziere die API Calls, was aber keine Option ist.
Das kann ich mir fast nicht vorstellen. 80 requests pro Sekunde!!! Ist schon ne krasse Ansage.

Zeig doch mal dein Skript. Ich bin mir sicher, dass sich da was sparen lässt.
 
  • Gefällt mir
Reaktionen: Staubgeborener, madmax2010 und Der Lord
Dann hilft nur ein entsprechend leistungsstarker Router oder das ganze tatsächlich in ein Rechenzentrum auszulagern. Dort könnte es allerdings als DoS Attacke missverstanden werden.

Nach Möglichkeit solltest du die Abfragen per IPv6 abwickeln, dann fällt schonmal die NAT Tabelle als Overhead weg.
 
@philsc führe mal bitte das Command als Admin aus:
Code:
netstat -nao | find /v "" /c

Dann starte dein Skript. Wenn dann der Router in die Knie geht führst du den Befehl nochmal aus.
Die Ergebnisse dann bitte hier mal posten.
 
Zuletzt bearbeitet:
Zurück
Oben