Sprawdzone metody wysyłania wiadomości w FCM na dużą skalę

Niezależnie od tego, czy rozwijasz aplikację, która dopiero powstała, czy już masz usługę obsługującą duży ruch, zawarte w tym przewodniku statystyki i rekomendacje dotyczące zwiększania skali z FCM. Te koncepcje i metody pomogą Ci uniknąć negatywnych ma znaczenie przy wysyłaniu dużych ilości wiadomości.

Najważniejsze terminy i koncepcje

Żądanie wiadomości: żądanie wiadomości z FCM. używany zamiennie z „żądaniem”, „message” lub „query”

Żądania na sekundę (RPS): wskaźnik opisujący współczynnik przychodzących zapytań do FCM; używana wymiennie z liczbą zapytań na sekundę (QPS).

Tokeny limitów, zasobniki tokenów i uzupełnianie: w przypadku wysyłania wiadomości do Interfejs API FCM HTTP w wersji 1 – każde żądanie zużywa przydzielony token limitu w danym czasie okno. Zasobnik tokenów wypełnia cały klucz na końcu przedział czasu. Na przykład: interfejs API HTTP w wersji 1 przydziela 600 tys. tokenów limitu 1-minutowy zasobnik na tokeny, który napełnia się pod koniec każdego jednominutowego okresu.

Ograniczanie po stronie serwera: gdy natężenie ruchu przekracza wartość określoną w usłudze FCM. pojemności, żądania wykraczające poza możliwości obsługi są odrzucane w ruchu przychodzącym z ograniczeniem liczby żądań przepływu danych. Odpowiedzi na błędy (429) z nagłówkami retry-after mogą być zwracane w celu wskazania że musisz odczekać określony czas, zanim spróbujesz ponownie.

Ograniczanie po stronie klienta: gdy klienci obserwują błędy żądań, duże opóźnienia, lub 429, powinny dobrowolnie ograniczać przepływ ruchu wychodzącego, aby uniknąć nasilenia zatłoczenie.

Wykładniczy czas do ponowienia: W przypadku ponawiania błędów dodaj stopniowo zwiększające się opóźnienia. Na przykład: 1 s, 2, 4, 8, 16, 32

Zakłócenia: unikanie ponawiania żądań w dokładnych odstępach czasu. Zakłócenia Możesz zmieniać opóźnienia ponawiania prób w losowym procesie, aby je równomiernie rozłożyć. w czasie (np. 0,9 s, 2,3 s, 4,1 s, 8,5 s, 17,9 s, 34,7 s).

Wzmacnianie ponawiania prób: w przypadku ponawiania nieudanych żądań bez zwiększania wykładniczego. powolnym ponowieniu i zakłóceniach, często kumulują się i dodają do stałego obciążenia ruchu, potencjalnie „wzmacniać” i rozwijaniem korków w ruchu drogowym.

Problem: nagłe wzrosty natężenia ruchu

FCM przetwarza miliony żądań na sekundę (RPS). Największy współtwórca przeciążenie systemu, problemy z opóźnieniami i przerwy w działaniu to zwiększony ruch.

Wykres liniowy przedstawiający wzrost natężenia ruchu w nieregularnych odstępach czasu.

Co to jest duży ruch?

Istnieje kilka różnych typów nagłych wzrostów ruchu.

Gwałtowny wzrost w ciągu godziny: przez pierwszych 30 dni w FCM odnotowuje ponad 2 razy większy ruch. od sekund do 2 minut z każdej godziny. Podobne, choć mniejsze, skoki zaobserwowane w oznaczeniach półgodziny i kwadransów (przykłady: 00:15, 00:30, 00:45).

Wykres liniowy przedstawiający trendy wzrostowe w ciągu półgodzin i kwartału godziny.

Wzmacnianie ponownych prób: ponawianie nieudanych lub przekraczania limitu czasu żądań bez Wykładniczy czas do ponowienia może kumulują się w powtarzających się falach ukształtowanych nad istniejącymi granicami ruchu.

Wykres liniowy przedstawiający rosnące wzorce wzrostu.

Nagłe zmiany wzorców ruchu: kierowanie nowego ruchu do FCM lub przenoszenie ruchu. do FCM w różnych regionach bez stosowania czynników wygładzających, takich jak stopniowe i powodować gwałtowne skoki.

Wykres liniowy przedstawiający 1 nagły wzrost.

Wykorzystanie tokenów limitu z wyprzedzeniem: wyczerpanie wszystkich tokenów limitu na początku limitów zamiast równomiernie rozłożyć żądania między limit w oknach powodują drgania, które są trudne i kosztowne systemu równoważenia obciążenia.

Wykres liniowy przedstawiający bardzo ostry wzrost.

Wydarzenia specjalne: nagłe zwiększenie ruchu w okresie świątecznym (sylwester) lub podczas wydarzeń sportowych (Puchar Świata w Piłce Nożnej).

Wykres liniowy przedstawiający kilka powtarzających się skoków.

Wyeliminuj gwałtowne skoki ruchu, „wygładzając krzywą”.

W tej sekcji znajdziesz strategie łagodzenia gwałtownych skoków natężenia ruchu, to strategie „wygładzania krzywej”.

Używaj FCM tylko w odpowiednich przypadkach użycia.

W niektórych przypadkach wykorzystanie FCM do wysyłania powiadomień niezbędne lub odpowiednie.

Na przykład w przypadku powiadomień o wydarzeniach w kalendarzu możesz zaplanować zadanie lokalne w wyświetlanie powiadomienia w odpowiednich momentach, zamiast wysyłania go z serwera aplikacji. Wiadomości w FCM możesz ograniczać do synchronizacji kalendarza.

Unikaj skoków

Antywzorcem może być na przykład wysyłanie powiadomień FCM tak szybko, jak systemy zezwalaj zamiast stosowania ograniczania po stronie serwera. Weź pod uwagę te kwestie:

  • Czy wszyscy Twoi klienci muszą otrzymać to samo powiadomienie w ciągu minuty? Czy na przykład 5-minutowy okres dostawy wciąż odpowiada Twoim potrzebom biznesowym?
  • Czy klientów można podzielić na segmenty według priorytetu, aby wygładzić nagły wzrost?
  • Czy powiadomienia można zaplanować z wyprzedzeniem?

W miarę możliwości: unikaj strategii, które powodują natychmiastowe wyczerpanie limitu wysyłania w FCM, tylko powtórzenie wzorca, gdy tylko zasobnik z tokenami zostanie uzupełniony. Ten dostęp powoduje problemy z równoważeniem obciążenia w FCM i jego zależnościach zależnych systemów uczących się. Stopniowe zwiększanie ruchu. Minimalny wzrost z 0 do 0 maksymalną liczbę żądań na sekundę w 60-sekundowym przedziale czasu. Wolę dłuższe okna, tym więcej Żądania na sekundę.

Nie pracuj całodobowo ruch drogowy

W miarę możliwości: unikaj wysyłania wiadomości w ciągu 2 minut od każdego z w znakach :00, :15, :30 i :45 minut.

Wdrażanie ograniczania po stronie serwera

Wdróż ograniczanie po stronie serwera, aby monitorować przepływ ruchu do FCM i nim zarządzać.

Obsługa ponownych prób

Choć FCM wymaga dużej dostępności, czasami prośby mogą zostać przekroczone lub porażki. Przyczyny są różne, ale poniższe sprawdzone metody optymalizują ponowienie próby działania, aby dostarczać wiadomości tak szybko, jak to możliwe, przy minimalnym wpływie korki.

Czasy oczekiwania

Ustaw co najmniej 10-sekundowy czas oczekiwania dla żądań wysyłania przed ponawiam próbę. Większość wewnętrznych zdalnych wywołań procedury FCM ma 10-sekundowy czas oczekiwania.

Błędy

  • Błędy 400, 401, 403 i 404: przerwij i nie ponawiaj próby.
  • W przypadku błędów 429: spróbuj ponownie po odczekaniu czasu ustawionego w ustawieniu „Ponów próbę po” nagłówek. Jeśli nie ustawiono nagłówka „Ponów próbę po”, domyślną wartością będzie 60 sekund.
  • W przypadku błędów 500: ponów próbę ze wzrastającym czasem do ponowienia.

Wykładniczy czas do ponowienia

Aby uniknąć wzmocnienia ponownych prób, zaimplementuj wykładnicze i problemy z ponawianiem żądań. pakietu Firebase Admin SDK, implementuje wzrastający czas do ponowienia.

Oto kilka dodatkowych zalecanych ustawień:

  • Minimalny odstęp: nie ponawiaj od razu ponownych prób w nieudanym żądaniu w FCM. Poczekaj co najmniej 10 sekund, zanim spróbujesz ponownie zrealizować nieudane żądanie.
  • Maksymalny interwał: ustaw maksymalny odstęp czasu między żądaniami, które nie są już aktualne, zamiast ponawiać próby w nieskończoność.

Jeśli żądanie jest stale ponawiane ze wzrastającym czasem do ponowienia, a wciąż jest jeśli po 60 minutach wystąpi błąd, zostanie on błędnie sklasyfikowany jako błąd, który można ponawiać lub Wystąpiła przerwa w działaniu FCM, w wyniku której ponawianie próby może być nieumyślnie nasilające. zaistniałą sytuację.

tworzyć plany wdrażania i przywracania oraz wprowadzać stopniowe zmiany;

podczas wprowadzania zmian w ruchu na dużą skalę, takich jak zwiększenie ruchu w FCM lub przenoszenia ruchu między regionami lub sieciami, zaprojektowanie planu wdrożenia/przywrócenia; a wdrażanie stopniowych zmian zapewni ochronę Twoich użytkowników, usługi i FCM.

  • Plan wdrażania uwzględnia oczekiwania zainteresowanych osób. W pewnych sytuacjach (opisanych poniżej) warto wcześniej udostępnić zespołowi FCM plan wdrożenia, aby uniknąć niespodzianek.
  • Plan przywracania pozwala uwzględnić ewentualne okoliczności i przygotować mechanizmy, które umożliwią szybkie i bezpieczne przywracanie sprawności po niespodziewanych błędach.
  • Stopniowe wprowadzanie zmian ma 2 aspekty:
    • „Stopniowo” podwyższenia: kroki powinny wynosić 1% -> 5% -> 10% -> 25% -> 50% -> 75% -> 100% lub mniej. „Wesprzyj” (obserwuj zachowanie systemu podczas wczytywania) każdego kroku przez 1 dzień do 1 tygodnia. Pozwoli Ci to wykryć potencjalne problemy, zanim wykonasz kolejny krok.
    • Stopniowe zwiększanie natężenia ruchu: podczas wykonywania każdego „kroku” zwiększyć natężenie ruchu, wygładź je na co najmniej godzinę. Dzięki temu infrastruktura równoważenia obciążenia FCM może odpowiednio skalować nowy ruch, minimalizując jednocześnie ryzyko wystąpienia hotspotów i zatorów.

Oto hipotetyczny scenariusz migracji 500 000 żądań na sekundę na całym świecie z Do interfejsu FCM HTTP v1 API – starsza wersja interfejsu API FCM:

Tydzień Step Strategia stopniowego zwiększania skuteczności
0 1% optymalizacji Płynne włączanie od 0 do 5000 żądań na sekundę do FCM HTTP w wersji 1 w ciągu godziny.
1 5% optymalizacji Płynne włączanie od 5000 do 25 000 żądań na sekundę w ciągu 2 godzin.
2 10-procentowy wzrost Płynne włączanie od 25 000 do 50 000 żądań na sekundę w ciągu 2 godzin
3 Wzrost na poziomie 25% Zwiększenie z 50 tys. do 125 tys. żądań na sekundę w ciągu 3 godzin
4 Wzrost na poziomie 50% Zwiększenie od 125 tys. do 250 tys. żądań na sekundę w ciągu 6 godzin
5 75% optymalizacji Zwiększenie z 250 tys. do 375 tys. żądań na sekundę w ciągu 6 godzin
6 100-procentowy wzrost Zwiększenie z 375 tys. do 500 tys. żądań na sekundę w ciągu 6 godzin

Hipotetyczny plan wycofania:

  • Jeśli 95-percentyl czasu oczekiwania zwiększy się do ponad 500 ms lub jeśli współczynnik błędu przekroczy 1% przez ponad godzinę w dowolnym kroku, użyj konfiguracji dynamicznej, aby natychmiast wrócić do poprzedniego kroku.
  • Kontynuuj przywracanie do wcześniejszych kroków, aż czas oczekiwania i współczynnik błędów wróci do wartości nominalnych.

Kiedy należy skontaktować się z FCM

Skontaktuj się z FCM, korzystając z pomocy Firebase. w którejkolwiek z tych sytuacji:

  • Domyślne limity nie są już zgodne z Twoim przypadkiem użycia
  • Zmieniasz wzorce wysyłania w ciągu 3 miesięcy na stronie 100 000 żądań na sekundę (na całym świecie) lub 30 000 żądań na sekundę (kontynent)