allegro / allegro-api

Issue tracker and wiki for Allegro REST API
https://developer.allegro.pl/
213 stars 39 forks source link

Kilka aplikacji czy jedna aplikacja? #9123

Open bugproof opened 3 months ago

bugproof commented 3 months ago

Mam kilka integracji do zarządzania aukcjami każda z nich działa tak samo tylko, że pobiera dane z innego źródła, każda używa tego samego ClientId i ClientSecret i tak sobie myślę, czy to jest dobre rozwiązanie, czy stworzenie kilku aplikacji o innych nazwach jest bardziej wydajne? Pytam o to szczególnie ze względu na limity, limity chyba są na aplikacje a nie na IP?

Czy to dobry pomysł stworzyć osobną aplikacje z innym ClientId i ClientSecret na każdą integracje aby mogła przetwarzać więcej aukcji na minute?

Jedną zaletą jest to, że klient może sobie połączyć konta tylko raz, i włączyć dowolną integracje bez ponownej autoryzacji, ale jeśli każda aplikacja ma swój własny limit trochę martwi mnie wydajność.

Jaka jest oficjalna rekomendacja Allegro w tej sprawie?

Lukasz-Zurek commented 3 months ago

Zgadza się, limit jest na aplikację/ClientId i wynosi 9000 zapytań na minutę. Opisujemy to również tutaj. Nie odnotowaliśmy jednak utrudnień w tym zakresie, więc wydajność nie wydaje się tutaj być problemem.

Przede wszystkim jeśli tworzysz więcej niż jedną aplikację, dopilnuj, aby pełniły one różne funkcje. Co prawda na jednym koncie możesz mieć maksymalnie 5 zarejestrowanych aplikacji, jeśli jednak miałyby one obejmować te same procesy, zalecam utworzenie jednej aplikacji, kierując się zasadą - jedna aplikacja = jeden Client ID.

bugproof commented 3 months ago

A czy np. Sello ma stworzoną tylko 1 aplikację? Mają dość dużo użytkowników czy mają jakiś własny limit ustalony przez Allegro?

Lukasz-Zurek commented 3 months ago

Nie chcę wypowiadać się na forum na temat firm, które aktywnie korzystają z naszego API. Generalnie przypadki są różne, w zależności od specyfiki i potrzeb. W kwestii limitów - do każdego konkretnego przypadku zawsze podchodzimy indywidualnie. Zależy nam przede wszystkim na optymalnym wykorzystywaniu naszych zasobów.

Mogę ogólnie potwierdzić, że są firmy, które posiadają więcej niż 1 aplikację. Nie regulujemy tych zasad w Regulaminie Allegro API, natomiast obecnie rekomendujemy jednak tworzenie jednej aplikacji.

bugproof commented 3 months ago

Dlatego w moim rozwiązaniu staram się zoptymalizować wszystko jak najlepiej się da, między innymi mam kopię wszystkich ofert u siebie lokalnie zamiast za każdym razem pobierać je z allegro i synchronizuje je pollując zdarzenia i zapisując ostatnie widziane zdarzenie w bazie (idealniejsze byłyby webhooki). Też nie przetwarzam wszystkiego na raz tylko mam kolejkę która żyje sobie na osobnym wątku i przetwarza sobie różne zadania czekając aż zakończy się poprzedni task. Każdy request ma też handler który czeka jeśli serwer zwróci 429 Too Many Requests. Dość długo zajęło mi zaplanowanie takiego rozwiązania bo też dokumentacja allegro nie posiada żadnej strony z "best practices" co myślę, że ułatwiło by tworzenie aplikacji wielu osobom.

Pytanie pojawiło się stąd, że mam np 10 połączonych kont które sprzedają 50000 przedmiotów jakiegoś dostawcy X i 50000 przedmiotów dostawcy Y i każdy z tych dostawców ma jakieś swoje API/ lub plik który aktualizuje się co np. godzinę. Myślę, że osobne Client ID mogłoby tu zrobić dużą różnicę chociażby na możliwość aktualizowania aukcji równolegle (in parallel) mając swoją chociażby własną kolejkę/wątek/proces.

Powiedzmy każdy z dostawców aktualizuje swoje ceny i stany co godzinę, i mamy 10 kont wtedy mając osobne Client ID każde z tych kont może zostać sprawdzone i zaktualizowane równolegle (czyli o godzinie np. 12:00 zacznie sprawdzać przedmioty dostawcy X i Y) w tym samym czasie dzięki osobnemu limitowi.

Mógłbym używając tego samego Client ID odpalić 2 wątki i spróbować zrobić to samo ale myślę, że mogą częściej pojawić się problemy z Too many requests?

Jeszcze jedno rozwiązanie jakie widzę, to takie, że to klient musi stworzyć sobie własną aplikacje i podać swój client id i secret wtedy problem ze skalowaniem rozwiąże się sam, dlatego też pytałem o Sello.

Lukasz-Zurek commented 3 months ago

Dlatego w moim rozwiązaniu staram się zoptymalizować wszystko jak najlepiej się da, między innymi mam kopię wszystkich ofert u siebie lokalnie zamiast za każdym razem pobierać je z allegro i synchronizuje je pollując zdarzenia i zapisując ostatnie widziane zdarzenie w bazie (idealniejsze byłyby webhooki). Też nie przetwarzam wszystkiego na raz tylko mam kolejkę która żyje sobie na osobnym wątku i przetwarza sobie różne zadania czekając aż zakończy się poprzedni task. Każdy request ma też handler który czeka jeśli serwer zwróci 429 Too Many Requests. Dość długo zajęło mi zaplanowanie takiego rozwiązania bo też dokumentacja allegro nie posiada żadnej strony z "best practices" co myślę, że ułatwiło by tworzenie aplikacji wielu osobom.

To bardzo dobre, przemyślane podejście, które optymalnie wykorzystywałoby nasze zasoby.

Dziękuję Ci również za sugestię z "best practices" - myślę, że to jest coś, o czym moglibyśmy pomyśleć choćby w kontekście treści w poradnikach.

Pytanie pojawiło się stąd, że mam np 10 połączonych kont które sprzedają 50000 przedmiotów jakiegoś dostawcy X i 50000 przedmiotów dostawcy Y i każdy z tych dostawców ma jakieś swoje API/ lub plik który aktualizuje się co np. godzinę. Myślę, że osobne Client ID mogłoby tu zrobić dużą różnicę chociażby na możliwość aktualizowania aukcji równolegle (in parallel) mając swoją chociażby własną kolejkę/wątek/proces.

Powiedzmy każdy z dostawców aktualizuje swoje ceny i stany co godzinę, i mamy 10 kont wtedy mając osobne Client ID każde z tych kont może zostać sprawdzone i zaktualizowane równolegle (czyli o godzinie np. 12:00 zacznie sprawdzać przedmioty dostawcy X i Y) w tym samym czasie dzięki osobnemu limitowi.

Tak jak wspomniałem - nie regulujemy tych zasad w Regulaminie Allegro API. Warto w pierwszej kolejności wyczerpać wszystkie możliwości w kontekście optymalizacji w ramach jednej aplikacji, by aktualizacje realizowane przez dostawców rozłożyć w czasie. Być może udałoby się rozwiązać to w ten sposób.

Mógłbym używając tego samego Client ID odpalić 2 wątki i spróbować zrobić to samo ale myślę, że mogą częściej pojawić się problemy z Too many requests?

Istnieje takie ryzyko. Warto przetestować to na jednej aplikacji, być może uda się Tobie zmieścić w limicie.

Jeszcze jedno rozwiązanie jakie widzę, to takie, że to klient musi stworzyć sobie własną aplikacje i podać swój client id i secret wtedy problem ze skalowaniem rozwiąże się sam, dlatego też pytałem o Sello.

Nie rekomendujemy takiego rozwiązania. Nie chcemy, aby użytkownicy musieli tworzyć własne aplikacje na swoich kontach.

stale[bot] commented 2 months ago

W tym wątku nie pojawiła się żadna nowa odpowiedź w ciągu 7 dni, dlatego automatycznie oznaczamy go jako przeterminowany. Jeśli w ciągu kolejnych 7 dni nie pojawi się żadna odpowiedź, wątek zostanie zamknięty. Dziękujemy za zaangażowanie w dyskusję i zachęcamy Cię do wypełnienia ankiety dotyczącej naszego wsparcia na forum.


There was no new reply in this thread within 7 days, therefore, we automatically marked it as expired. If no response is received within the next 7 days, this thread will be closed. Thank you for engaging in the discussion. We encourage you to complete our forum support survey.