Jak najszybciej pobierać dane z API?

0

Witam,
Pobieram dane z API około 3x na sekundę. Używam do tego VPS od cyberfolks(hekko)
2 CPU
CPU

4.0 GB
RAM

50.0 GB
HDD/SSD.

Ale planuje zmienić. Zastanawiam się na jakie parametry patrzeć aby móc maksymalnie przyspieszyć pobieranie. Na pewno musi byc szybki internet i dysk SSD. Tutaj w momencie zamawiania pisało SSD, ale teraz jak wejdę w parametry to
50.0 GB
HDD/SSD.
i nie wiem czy to w końcu SSD. Takie pobranie RAMu zajmuje tyle co nic. Może znacie jakieś VPS które będą miały najlepsze parametry do takich czynności i coś polecicie? Dla mnie liczy się każdy ułamek sekundy. Myślicie że procesor 2.0 a 3.0 będzie przekładał się na szybkość pobierania? Albo liczba rdzeni? Czy raczej w pewnym momencie nie da się tego przyspieszyć lepszymi parametrami? Ktoś wyjaśni? Jak patrzyłem pobieranie na 12 letnim starym kompie ze słabym internetem to było tylko raz na sekundę.

4

Myślę, że musiałbyś oprogramować sobie statystyki tego co robi Twój skrypt i potem na podstawie analizy określić wąskie gardło.
Wpinasz jakiś microtime () i zapisujesz sobie informacje o tym ile trwało pobranie z API, ile trwała jakaś analiza/przetworzenie, ile trwała np. zapis do bazy.

Zobacz np. ten wątek i kwestię DNS
fsockopen - czasami nawiązywanie się wydłuża do 5-20 sekund

Ja np. kiedyś potrzebowałem odczytać dużo danych z serwera w DE i rozwiązaniem było postawienie serwera w DE korzystającym z tego samego internet providera.

0

Możesz podpiąć Grafanę, ogarnąć metryki i monitorować pracę. Będziesz widział zużycie CPU, pamięci, ruchu po sieci. Możesz też logować microtime jak wspomniano post wcześniej.

1

Ogólnie to masz jeszcze profilery, albo takie coś jak https://www.blackfire.io/
Poza tym dosyć mało opisałeś, gdzie tkwi problem, bo nie wiemy czy masz zapytania do bazy, czy używasz jakiego cache, nie wiadomo jaki framework, ani jaka wersja PHP. Nie wiem nawet czy te API jest sensowne, bo pobieranie 3 razy na sekundę może oznaczać, że coś jest nie tak. Tego i wielu innych rzeczy nie wiemy.

0

A co to api robi? Czyta jakies dane z bazy? Jakoej bazy? Moze da się zrobić cache w pamięci np w redisie

0
jurek1980 napisał(a):

Wpinasz jakiś microtime () i zapisujesz sobie informacje o tym ile trwało pobranie z API, ile trwała jakaś analiza/przetworzenie, ile trwała np. zapis do bazy.

Tak robiłem. Tylko pobranie z API zajmuje najwięcej czasu, zapis i przetworzenie zajmuje tyle co nic.
Może ktoś z Was ma dostęp do lepszego VPS niż mój, albo dedyka i sprawdzi jaki czas Wam pokaze? U mnie na 100 pobrań są takie czasy:

Czas = 0.37585592269897
Czas = 0.35219097137451
Czas = 0.35160803794861
Czas = 0.34583401679993
Czas = 0.35115790367126
Czas = 0.34980082511902
Czas = 0.34173893928528
Czas = 0.33569383621216
Czas = 0.35241198539734
Czas = 0.34552788734436
Czas = 0.77363514900208
Czas = 0.33777189254761
Czas = 0.33736991882324
Czas = 0.76753211021423
Czas = 0.34166288375854
Czas = 0.34217309951782
Czas = 0.34437012672424
Czas = 0.33314180374146
Czas = 0.33982586860657
Czas = 0.346684217453
Czas = 0.34043002128601
Czas = 0.3447539806366
Czas = 0.33918118476868
Czas = 0.36121487617493
Czas = 0.34337615966797
Czas = 0.7699248790741
Czas = 0.77973008155823
Czas = 0.34185290336609
Czas = 0.34063696861267
Czas = 0.34418797492981
Czas = 0.34544110298157
Czas = 0.33853793144226
Czas = 0.35550284385681
Czas = 0.34332013130188
Czas = 0.34012603759766
Czas = 0.33692002296448
Czas = 0.35903096199036
Czas = 0.34199714660645
Czas = 0.3380229473114
Czas = 0.34429478645325
Czas = 0.35153007507324
Czas = 0.33440685272217
Czas = 0.34002304077148
Czas = 0.34446001052856
Czas = 0.35391306877136
Czas = 0.34821081161499
Czas = 0.35477495193481
Czas = 0.36502599716187
Czas = 0.34840798377991
Czas = 0.34485101699829
Czas = 0.35852003097534
Czas = 0.35030698776245
Czas = 0.34655809402466
Czas = 0.36075305938721
Czas = 0.35416579246521
Czas = 0.340411901474
Czas = 0.3471691608429
Czas = 0.35737204551697
Czas = 0.33429193496704
Czas = 0.34930896759033
Czas = 0.35727620124817
Czas = 0.353355884552
Czas = 0.34189891815186
Czas = 0.35473299026489
Czas = 0.34399509429932
Czas = 0.35254383087158
Czas = 0.3797721862793
Czas = 0.33843493461609
Czas = 0.34462881088257
Czas = 0.36113619804382
Czas = 0.34704613685608
Czas = 0.38782596588135
Czas = 0.34052419662476
Czas = 0.3452730178833
Czas = 0.34994602203369
Czas = 0.33730792999268
Czas = 0.34645509719849
Czas = 0.34169483184814
Czas = 0.34035801887512
Czas = 0.33759713172913
Czas = 0.33678984642029
Czas = 0.34167909622192
Czas = 0.35139393806458
Czas = 0.3556649684906
Czas = 0.3455069065094
Czas = 0.35479807853699
Czas = 0.34361600875854
Czas = 0.34857678413391
Czas = 0.34902405738831
Czas = 0.35584712028503
Czas = 0.34120297431946
Czas = 0.33661794662476
Czas = 0.34952592849731
Czas = 0.3533399105072
Czas = 0.34522700309753
Czas = 0.81603479385376
Czas = 0.36420106887817
Czas = 0.35922694206238
Czas = 0.33358502388
Czas = 0.34897208213806

Średnio 0.33-0.35 sekundy, ale trafi się tez 0.7 sekundy.
Wystarczy tylko skopiować cały kod:
https://github.com/jaggedsoft/php-binance-api/blob/master/php-binance-api.php
i dodać niżej

$nowy = new API("","");

	$start = microtime(true);
	$dane = $nowy->prevDay("BNBBTC");
	$stop = microtime(true);
	echo "</br>Czas = ". ($stop-$start);

Czy szybszy VPS przełoży się na jeszcze szybsze pobranie? Czy raczej nie da się tu nic przyspieszyć bo giełda ogranicza?

0

Ale po co tak często w ogóle wysyłasz to zapytanie? Uważaj, żeby Binance Cię nie blokło.

0

Jeżeli robisz roboty do transakcji, to czy nie masz możliwości wykorzystać lepszych sposobów/narzędzi? Są chyba do tego jakieś dedykowane platformy jak np. MT4 - tam możesz pisać skrypty przecież do automatyzacji handlu. Nie śledzę tego na bieżąco, ale z tego co pamiętam, to nawet polskie domy maklerskie udostępniały jakieś narzędzia do automatyzacji handlu na naszej giełdzie. Bombardowanie cudzego endpointa zapytaniami to nawet chyba ostatnio według naszego prawa pod przestępstwo można podciągnąć, więc osobiście byłbym z tym ostrożny.

1

Skoro krytyczne jest pobieranie, to może spróbuj jakiegoś znacznie szybszego łącza. Zobacz gdzie ten Binance ma serwer, zbadaj ruch, przez ile routerów się musisz połączyć.
Takie BTW na swoim kompie jak testujesz to jakie dostajesz czasy? Jest szybciej, wolniej?

0
jurek1980 napisał(a):

Skoro krytyczne jest pobieranie, to może spróbuj jakiegoś znacznie szybszego łącza. Zobacz gdzie ten Binance ma serwer, zbadaj ruch, przez ile routerów się musisz połączyć.

Takie BTW na swoim kompie jak testujesz to jakie dostajesz czasy? Jest szybciej, wolniej?

Myśle że łącze jest dobre, na swoim dostaje podobne. Coś mi się wydaje że to oni ograniczają do takiej ilości, żeby szybciej nie pobierać. Chyba że by postawił tam gdzie oni mają serwer i coś by ugrał. Nikt z Was nie ma lepszej maszyny aby zobaczyć?

0
jurek1980 napisał(a):

Zobacz gdzie ten Binance ma serwer,

Tokio. Biorę to opcje jako drugą, ale jako pierwszą WebSocket, bo podobno można przyspieszyć przez WebSocket, tylko nie ogarniam tematu i możę być ciężko. Może ktoś chciałby zarobić i potrafiłby to przerobić na WebSocket?

0

Twoim problemem jest wolna komunikacja sieciowa, czy wolny zapis u siebie na dysku/w bazie? Jeżeli to drugie, to może nie zapisuj przy każdym wywołaniu, tylko kolejkuj w pamięci i zapisuj co X sekund - np. co 60 sekund. Masz dzięki temu (60 x 3)-1 = 179 razy mniej operacji zapisu na minutę.

0
TomRZ napisał(a):

Twoim problemem jest wolna komunikacja sieciowa, czy wolny zapis u siebie na dysku/w bazie? Jeżeli to drugie, to może nie zapisuj przy każdym wywołaniu, tylko kolejkuj w pamięci i zapisuj co X sekund - np. co 60 sekund. Masz dzięki temu (60 x 3)-1 = 179 razy mniej operacji zapisu na minutę.

Problemem jest tylko wolne pobranie z API. Ale to raczej oni ograniczają i możliwe że WebSocket będzie szybszy. Zresztą kod podałem to możesz sobie spróbować jaką będzie miał szybkość.

0

Machnij sobie testowo jakiś serwer u nich lokalnie i ponów testy. Nie ma co tu więcej dywagować na ten temat. Jak i z domu i z vps masz podobne czasy to albo przesył danych tyle trwa, albo oni siłowo ograniczają to po swojej stronie. Jedno sprawdzisz w kilka minut ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1