Requests: lange Antwortzeit Produtiosserver

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Hallo,

ich habe unter Divipedia.de ein Projekt, welches Finanzdaten von Quandl.com bezieht. Bis gestern lief alles wunderbar. Aber nun habe ich sehr lange Antwortzeiten auf meine Kursabfragen.

Ich bin bei Quandl als Entwickler registriert und bewege mich im Rahmen der erlaubten Abfragenmenge. Und ja, ich darf die Daten laden und nutzen.

[codebox=pycon file=Unbenannt.txt]import requests

requests.get("https://www.quandl.com/data/WIKI/ADM-Ar ... ing-Volume").elapsed.total_seconds()
[/code]

Dieser Code benötigt auf dem Produktionsserver 254.983691 Sekunden.
In der lokalen Umgebung gerade mal 0.5794 Sekunden.

Requests auf andere Webseiten vom Server aus laufen normal schnell.

Eine Anfrage bei Quandl läuft. Leider antworten die nur spärlich und unregelmäßig.
Habt ihr eine Idee, woran das liegen könnte und ob der Fehler auch auf meiner Seite sein kann?

Danke und Gruß, Bolitho
BlackJack

@Bolitho: Was ist denn die erlaubte Abfragemenge? Das Du als Entwickler registriert bist weiss der Server bei dieser Abfrage ja nicht. Du authentifizierst Dich damit ja nicht. Denn genau das würde ich vermuten - das dem Server zu viele Abfragen kommen.

Und beziehen sich die Abfragemengen auch auf Wikiseiten? Die haben da doch anscheinend auch eine API.
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Abfrageregel:
http://help.quandl.com/article/68-is-th ... -api-usage

In meiner Datenbank sind ca. 60 Werte, die abgefragt werden. Bei dieser automatisieren Abfrage wird mein Entwicklerschlüssel mitgeschickt und die API genutzt. Die WIKI Daten sind enthalten.

Die oben gezeigte Request Abfrage war eine manuelle Prüfung, weil die API Abfrage so lange brauchte und ein Abbruch auf das Request Modul verwies. Aber ich bekomme die langen Antwortzeiten eben auch bei dieser Prüfung.

Kann ich irgendwie rausfinden, auf welcher Seite das Problem liegt? Denn entweder schickt und verarbeitet mein Server die Anfragen an Quandl langsam oder Quandl hat mich verlangsamt.

Wie gesagt, Antwortzeiten bei anderen Abfragen vom Server sind normal. Und Antwortzeiten von Quandl von anderen Rechnern sind auch okay.
BlackJack

@Bolitho: Du könntest mal ein paar Abfragen vom Server aus mit ``curl`` machen. Wenn die auch langsam sind, dann liegt es schon mal nicht an Python oder `requests`.

Falls der Quandl-Server ausbremst könnten auch andere Schuld sein die aus dem IP-Bereich von Deinem Produktionsserver kommen.

Wie sieht es mit ``ping`` aus? Falls das auch langsam ist, zeigt ``traceroute`` *wo* es auf dem Weg langsam wird?
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Danke für die Hinweise

Ergebnisse:

Code: Alles auswählen

curl https://www.quandl.com/data/WIKI/CMI-Cummins-Inc-CMI-Prices-Dividends-Splits-and-Trading-Volume
auch langsam

Code: Alles auswählen

curl http://divipedia.de
schnell wie der Blitz

Ping gleiches Verhalten.

Traceroute
traceroute to www.quandl.com (52.204.132.251), 30 hops max, 60 byte packets
1 gateway (185.119.174.1) 17.629 ms 18.457 ms 18.393 ms
2 uk.slo.prgn.aggr.sw1.misp.co.uk (185.52.26.181) 1.126 ms 0.932 ms 1.107 ms
3 uk.slo.prgn.a9.r1.misp.co.uk (185.52.26.182) 0.222 ms 0.234 ms 0.226 ms
4 xe-1-3-0.mpr1.lhr25.uk.above.net (94.31.61.157) 1.566 ms 1.560 ms 1.551 ms
5 xe-1-3-0.mpr1.lhr8.uk.zip.zayo.com (64.125.29.97) 1.581 ms 1.597 ms 1.626 ms
6 ae7.mpr3.lhr3.uk.zip.zayo.com (64.125.21.17) 1.481 ms 1.384 ms 1.380 ms
7 ae27.cs1.lhr15.uk.eth.zayo.com (64.125.30.234) 90.735 ms 90.623 ms 90.594 ms
8 ae5.cs1.dca2.us.eth.zayo.com (64.125.29.131) 81.507 ms 81.538 ms 81.458 ms
9 ae27.cr1.dca2.us.zip.zayo.com (64.125.30.247) 88.462 ms 88.430 ms 88.463 ms
10 ae15.er4.iad10.us.zip.zayo.com (64.125.31.22) 92.256 ms 92.616 ms 92.672 ms
11 * * *
12 * * *
13 * * *
14 54.239.110.141 (54.239.110.141) 94.666 ms 54.239.110.143 (54.239.110.143) 98.235 ms 54.239.110.139 (54.239.110.139) 110.439 ms
15 54.239.111.45 (54.239.111.45) 89.263 ms 54.239.108.167 (54.239.108.167) 87.399 ms 87.333 ms
16 205.251.244.207 (205.251.244.207) 85.560 ms * 85.400 ms
17 * * *
18 * * *
19 * * *
20 * * *
21 * * *
22 * * *
23 * * *
24 * * *
25 * * *
26 * * *
27 * * *
28 * * *
29 * * *
30 * * *
Also gehe ich mal davon aus, dass die mich ausbremsen. Hoffe, der Support von denen antwortet einigermaßen schnell.

Vielen Dank für die Hilfe und Unterstützung.
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Es scheint am IPV6 zu liegen. Die letzte Antwort von quandl.com
After looking into the issue further we have found a potential issue with the Amazon servers. We are in contact with them to fix the issue, but there are also fixes you can implement from your end. You can read more about it here:
http://stackoverflow.com/questions/4009 ... 9#40102819
Mein Server wird bei Webfaction gehosted. Da das shared Server sind, kann der Vorschlag von Quandl nicht umgesetzt werden.
Those steps would disable IPv6 on the entire shared server, impacting other users. So unfortunately, we cannot apply those settings.

I agree that there is a IPv6 connection issue to their server from ours:

[root@web527 ~]# time curl -L -v http://Quandl.com
* About to connect() to Quandl.com port 80 (#0)
* Trying 2406:da00:ff00::34cc:84fb...
* Connection timed out
* Trying 2406:da00:ff00::36ae:5754...
* After 86392ms connect time, move on!
* Trying 52.204.132.251...
* Connected to Quandl.com (52.204.132.251) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: Quandl.com
> Accept: */*
>
< HTTP/1.1 200 OK

..etc...

real 3m33.883s
user 0m0.013s
sys 0m0.016s


Yet by IPv4 it is almost immediate:

[root@web527 ~]# time curl -4 -L -v http://Quandl.com
* About to connect() to Quandl.com port 80 (#0)
* Trying 54.174.87.84...
* Connected to Quandl.com (54.174.87.84) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: Quandl.com
> Accept: */*
>
< HTTP/1.1 200 OK

..etc...

real 0m0.307s
user 0m0.004s
sys 0m0.005s


Are you able to force your requests over IPv4 instead?
Die Frage ist also, kann ich IPv4 Requests erzwingen. Das Projekt ist mit Django unter Python 3.5 aufgesetzt und läuft über das Quandl Modul (https://pypi.python.org/pypi/Quandl)

Vielen Dank für eure Unterstützung im Voraus.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

Die IPv4-Adresse scheint ja zu funktionieren. Also einfach statt dem Namen die IP angeben und eventuell noch den Host-HTTPHeader setzen.
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Danke für deine Antwort. Kannst du mich bitte bei der Umsetzung unterstützen?

Der Aufruf erfolgt über:
[codebox=pycon file=Unbenannt.txt]
import quandl

data = quandl.get('WIKI/KO')
print (data)
[/code]

Vermutlich werde ich für den Lösungsansatz in Dateien der Module der Pythoninstallation auf der Server Änderungen durchführen müssen. Das übersteigt aber mein derzeitiges "Können" als fortgeschrittener Anfänger.
BlackJack

Hier steht wie man den Schlüssel und die API-Version konfiguriert: https://github.com/quandl/quandl-python#configuration

Und wenn man sich das Objekt wo man diese Informationen setzt im Code anschaut, sieht man, dass man dort auch die URL setzen kann: https://github.com/quandl/quandl-python ... nfig.py#L3
Bolitho
User
Beiträge: 219
Registriert: Donnerstag 21. Juli 2011, 07:01
Wohnort: Stade / Hamburg
Kontaktdaten:

Danke, BlackJack. Das war der entscheidende Hinweis. Ich konnte die IP als Basis-Url nach dem Muster des Schlüssels setzen und ein erster Test war erfolgreich.

Vielen, vielen Dank.
Antworten