Ograniczanie liczby requestów na sekundę do API usługi X

Odpowiedz Nowy wątek
2020-07-29 15:44

Rejestracja: 1 miesiąc temu

Ostatnio: 45 minut temu

0

Cześć,
wyobraźmy sobie, że mamy usługę X, do którego nasz serwis robi zapytania. Ponieważ nasz serwis przyjmuje duży ruch a usługa X ma limity requestów (http) na sekundę chcemy jakoś "dławić" liczbę zapytań na sekundę. Nasz serwis działa w kilku replikach i limit jest wspólny dla wszystkich replik. Cięzko z góry założyć ile jest replik bo się autoskalują (ale ostatecznie możemy wskazać taką liczbę jeżeli ma to znacznie ułatwić). Nasz serwis jest napisany w Python. I teraz:

  1. Na upartego wiem jak to zrobić
    Pytanie brzmi: jak się takie rzeczy robi prawidłowo?

Pozostało 580 znaków

2020-07-29 16:09
Moderator

Rejestracja: 16 lat temu

Ostatnio: 14 minut temu

1

Stawiasz własne proxy przez które twoje nody się komunikują. Więc nikt nie uderza bezpośrednio "sam" do tego zewnętrznego serwisu tylko poprzez to proxy, które zajmuje się utrzymywaniem limitów.
Sama realizacja tego to limitowania może być różna - jakiś wspólny rate counter albo np. requesty lecą na kolejkę i limitujesz ile można z niej odczytać w jednostce czasu.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2020-07-29 16:10

Rejestracja: 1 miesiąc temu

Ostatnio: 45 minut temu

0

A proxy jest moim własnym serwisem czy jest jakiś gotowiec?

Pozostało 580 znaków

2020-07-29 17:48
Moderator

Rejestracja: 16 lat temu

Ostatnio: 14 minut temu

0

Mógłbyś spróbować postawic jakieś standardowe reverse proxy i limitować liczbę połączeń na nich jako N/K (N twój limit requestów a K liczba tych proxy), ale nie wiem czy się to bardzo dobrze sprawdzi. W innym wypadku musisz to zaimplementować samemu, ale taki serwis będzie miał raptem kilka linijek bo niewiele robi.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2020-07-29 17:55

Rejestracja: 4 lata temu

Ostatnio: 4 godziny temu

0

Nginx powinien mieć opcje limitowania ruchu.

No ma, ale ruchu przychodzącego. - deweloper_x 2020-07-30 09:13
no to jak dziala jako reverse proxy, to to co wychodzi z twojego serwisu, jest przychodzące do nginxa ... w czym problem - nalik 2020-07-30 11:21

Pozostało 580 znaków

2020-07-29 17:59

Rejestracja: 12 lat temu

Ostatnio: 56 sekund temu

1
deweloper_x napisał(a):

A proxy jest moim własnym serwisem czy jest jakiś gotowiec?

Standardowy gotowiec zadziała poprawnie, jeśli usługa jest dobrze skonstruowana z punktu widzenia http oraz większość requestów jest mało interaktywna.
Obie rzeczy są mało prawdopodobne.

Najprawdopodobniej trzeba zainwestować wiedzę na temat samej usługi i w ten sposób decydować jakie odpowiedzi mogą być trzymane w cache a jakie trzeba odświeżać cyklicznie.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22, 2020-07-29 17:59
Co masz na myśli przez interaktywność requestów? - deweloper_x 2020-07-30 09:13
to, że za każdym requestem odpowiedź jest inna - MarekR22 2020-07-30 09:33
To w moim przypadku odpowiedź jest inna za każdym razem dlatego nie ma sensu w ogóle rozważać cache'owania. Wtedy jest jak najbardziej sens stosować proxy - chcemy ograniczać w jednostce czasu liczbę requestów a nie generalnie. - deweloper_x 2020-07-30 09:56

Pozostało 580 znaków

2020-07-29 18:01

Rejestracja: 5 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Chorzów

0

Myślę, że jedynie mądre cache'owanie ( o ile możliwe ).
Co to za rodzaj usługi ?
Celowe spowalnianie lub limitowanie ruchu to kolejny problem na problemie / kolejkowanie / lawina itp ...
Chyba, że faktycznie kazać czekać użytkownikom aż przyjdzie ich kolej przy czym w szczycie ruchu to będzie równoważne z tym, że niektórzy odpowiedzi się nie doczekają (w rozsądnym czasie)


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 3x, ostatnio: katakrowa, 2020-07-29 18:04

Pozostało 580 znaków

2020-07-29 18:12

Rejestracja: 12 lat temu

Ostatnio: 56 sekund temu

0

A i jeszcze jedno, standardowy serwer proxy wcale nie musi ograniczyć liczby requestów nawet jeśli usługa jest 100% poprawnie zbudowana i mało interaktywna.

Np:
Request idzie do proxy, proxy widzi, że ma już odpowiedź z jakimś ETag.
Proxy zamiast odpowiedzieć, najpierw musi sprawdzić, czy dane się nie zmieniły. Więc przekazuje request z posiadanym ETag do serwera.
Serwer widzi że ETag pasuje i nic się nie zmieniło, więc odpowiada 304 Not Modified.
Wówczas proxy przekazuje pełną zapamiętaną odpowiedź do klienta.

Czyli liczba requestów do serwera się nie zmienia, ale nie jest konieczny transfer zasobów pomiędzy server-proxy.

https://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 2x, ostatnio: MarekR22, 2020-07-29 18:15
Co to jest ETag? - deweloper_x 2020-07-30 09:10
Chyba się nie rozumiemy. Nie chodzi o ograniczenie liczby requestów W OGÓLE, a ograniczenie liczby requestów danej jednostce czasu. Nic nie powinno być cacheowane. - deweloper_x 2020-07-30 09:12

Pozostało 580 znaków

2020-07-29 18:16

Rejestracja: 5 lat temu

Ostatnio: 3 godziny temu

Lokalizacja: Chorzów

1
deweloper_x napisał(a):

Pytanie brzmi: jak się takie rzeczy robi prawidłowo?

Zwiększa się limity dla usługi X.

Właściwie jeszcze nikt nie zapytał czy:

  1. Czy ta Usługa X jest Wasza czy nie ?
  2. Czy jest możliwość zwiększenia limitu zapytań?
  3. Z czego wynika limit zapytań na sek.?

Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 2x, ostatnio: katakrowa, 2020-07-29 18:27
limit na liczbę requestów oznacza, usługę płatną powyżej pewnego limitu a w JanuszSofcie kasy na usługi się nie wydaje. - MarekR22 2020-07-29 21:01

Pozostało 580 znaków

2020-07-30 10:20

Rejestracja: 12 lat temu

Ostatnio: 56 sekund temu

0

Po odpowiedziach autora dochodzę do wniosku, że nie tylko jest za mało detali (więcej niż wytyka katakrowa), ale również podejrzewam, że pytanie cierpi na problem XY.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

Odpowiedz

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