Push vs Poll, gdy duże opóźnienie (godziny) jest dopuszczalne

10

W dzisiejszych czasach wydaje się powszechne, że odpytywanie jest złą praktyką, a wypychanie jest właściwą drogą przy opracowywaniu aplikacji mobilnych, które wymagają ciągłego odbierania danych ze zdalnego serwera.

Wszystkie główne sklepy mobilne oferują swoją wersję usługi powiadomień push:

Zastanawiam się jednak, w jakim stopniu to założenie jest ważne. Mam na myśli, że jeśli mam aplikację, która sonduje zdalny serwer tylko kilka razy dziennie i do której „powiadomienia” nie muszą być dostarczane natychmiast (dopuszczalne jest duże opóźnienie), to czy byłaby to dobra decyzja odpytywać o dane zamiast wypychać je?

Z góry dziękuję!

Thomas CG de Vilhena
źródło
1
Nie jestem wystarczająco zaznajomiony z mobilnymi mechanizmami push, aby naprawdę się nad tym zastanowić, ale zastanawiam się, czy użycie mechanizmu push może uratować niektóre bóle głowy, na przykład w odniesieniu do scenariuszy wyłączania / uśpienia. Gdyby to była tylko aplikacja komputerowa / internetowa, powiedziałbym, że odpytywanie jest w porządku; wypychanie zwykle obejmuje również utrzymywanie otwartego połączenia na serwerze sieciowym, więc jest to kolejna zaleta odpytywania w komputerze stacjonarnym / przeglądarce, ale ponieważ jest to aplikacja mobilna i możesz używać tych alternatywnych mechanizmów wypychania, myślę, że odpowiedź może być inna.
Dr Wily's Apprentice

Odpowiedzi:

14

Sondowanie jest zawsze akceptowalne, gdy czas rzeczywisty nie jest koniecznością. Musisz zadać sobie pytanie, dlaczego miałbyś używać jednego zamiast drugiego?

Celem usługi push jest kilka rzeczy; ruch może być znacznie mniejszy, jeśli masz do czynienia z transmisjami, a nadawca realizuje transmisję - to pozwala ci wysłać jedną wiadomość i otrzymać tysiące. Ale, jak zauważasz, największym dobrodziejstwem usługi push jest natura w czasie rzeczywistym, która umożliwia natychmiastowe aktualizacje, aby dotrzeć do klientów. Jednak podczas wypychania naprawdę nigdy nie chcesz wypychać dużych zestawów danych, jeśli nadajesz, a także jesteś na łasce usługi push innej firmy, z której korzystasz (jeśli z niej korzystasz).

Celem ankiety jest okresowe sprawdzanie różnic danych, w przypadku których okres aktualizacji może zawierać akceptowalną umowę SLA o niedokładności do określonego przedziału czasu. Ankieta będzie wymagać od wszystkich klientów okresowego żądania danych, co będzie oznaczać żądanie połączenia dla każdego działającego klienta oraz konieczność usługi na żywo zdolnej do dokładnego monitorowania tych danych w celu dostarczenia ich do ankieterów. Posiadanie dokładnych danych do podania oznacza trwałość danych, która zajmie czas na dysku i czas konserwacji.

Z tego wynika, że ​​jeśli masz obawy dotyczące ruchu sieciowego lub utrzymania usługi (co oznacza ewentualnie uwierzytelnianie / autoryzowanie żądań, rejestrowanie ich, które zajmuje miejsce na dysku, wszystkie normalne wymagania dotyczące utrzymania usługi), wtedy nie „ chcę zmusić klientów do sondowania. Jeśli jednak przypadek użycia wymaga przesłania szczególnie dużego zestawu danych lub nie można być przywiązanym do interfejsu API innej firmy, który może się zmieniać wraz z umową SLA lub opłatami, wówczas może obowiązywać domowy system odpytywania, chociaż utrzymanie koszty ogólne mogą być znacznie większe. Alternatywnie możesz już uruchomić usługę i mieć utrwalone dane, dzięki czemu odpytywanie jest niewielkim dodatkiem do już istniejącej infrastruktury, co sprawia, że ​​odpytywanie jest bardziej pożądane.

Chociaż do centralnego punktu sprawiasz, że masz rację; jeśli konieczny jest czas rzeczywisty , odpytywanie się nie powiedzie. Jeśli tak nie jest, musisz po prostu wyliczyć, jak okresowo można sprawdzać dane pomnożone przez bazę klientów pomnożone przez rozmiar zestawu danych, aby zdecydować, czy koszt sieci będzie tego wart, czy też usługa push byłoby lepiej, gdybyś zawsze mógł po prostu wcisnąć zdarzenie zmiany, które pozwala im zażądać dużego zestawu danych w kroku wtórnym (chociaż atomowość tych kroków może być czymś, na co trzeba uważać w zależności od krytyczności danych).

Jimmy Hoffa
źródło
3

Sondowanie w twoim przypadku powinno być w porządku. I nie będziesz musiał integrować się z innym systemem (lub wieloma systemami dla wielu platform).

Problemem może być jednak specyfika urządzenia. Czy potrafisz w niezawodny sposób sondować, gdy aplikacja nie znajduje się z przodu i nie jest na środku urządzenia? (może, ale nie musi być dla ciebie problemem). Twoja zdolność do tego może zależeć od technologii wykorzystywanej do tworzenia aplikacji.

Grandmaster B.
źródło
Planuję użyć wbudowanych timerów, aby upewnić się, że aplikacja odpytuje serwer, nawet jeśli nie jest on „aktywny”. Wiem, jak to zrobić na Androidzie i mam nadzieję, że iPhone'y i telefony z Windows będą miały tę samą funkcjonalność;)
Thomas CG de Vilhena
2

Oczywiście. Jest to również łatwiejsze (strzeż się gwałtownych skoków, jeśli wszyscy wykonują ten sam harmonogram).

Mimo to podważam założenie, że „duże opóźnienie jest dopuszczalne”, biorąc pod uwagę oczekiwania użytkowników mobilnych. („Mapy nie są aktualizowane w czasie rzeczywistym! Niedopuszczalne!” - lub - „Wiem, że to serwis pogodowy, ale zamierzam naciskać ten przycisk odświeżania co pięć sekund, aż prognoza na jutro stanie się słoneczna!”)

ptyx
źródło
Dobra uwaga na temat uniemożliwienia wszystkim sondowania w tym samym czasie. Myślę, że ustawienie timerów losowo załatwi sprawę!
Thomas CG de Vilhena