2016-12-06 28 views
7

Wdrażamy obsługę śledzenia zdarzeń Mailgun w naszej aplikacji. Zapoznaliśmy się z proponowaną wersją event polling algorithm, ale nie jesteśmy do końca z nią zadowoleni. Po pierwsze, wolimy nie odrzucać danych, które już pobraliśmy, a następnie spróbować ponownie od zera po przerwie. Nie jest bardzo wydajny i pozostawia otwarte drzwi na długą pętlę prób, ponieważ nie jest jasne, kiedy pętla ma się skończyć. Po drugie, "wiek progowy" wydaje się kluczem do określenia "wiarygodności", ale jego wartość nie jest zdefiniowana, sugeruje się tylko bardzo duże "pół godziny".Mailgun: algorytm do odpytywania zdarzeń

Rozumiemy, że zdarzenia stają się "godne zaufania" po pewnym opóźnieniu progowym, nazwijmy to D_max, gdy zdarzenia gwarantują, że będą się znajdować w pamięci zdarzeń. Jeśli tak, możemy wdrożyć ten algorytm w inny sposób, abyśmy nie pobierać danych, o których wiemy, że nie są "wiarygodni" i wykorzystują wszystkie pobrane dane.

Bylibyśmy pobierania danych okresowo, a na każdej iteracji Chcielibyśmy:

  1. Złóż zapytanie do API zdarzeń określając zakres czasowy rosnąco od T_1 do T_2 = now() - D_max. W przypadku pierwszej iteracji można ustawić czas do pewnego czasu w przeszłości, np. Pół godziny temu. Dla kolejnych iteracji T_1 jest ustawiana na wartość T_2 z poprzedniej iteracji.
  2. Wszystkie strony są przesyłane jeden po drugim, gdy zwracany jest adres URL następnej strony.
  3. Użyj wszystkich przyjętych zdarzeń, ponieważ wszystkie one są "godne zaufania".

Moje pytania są następujące:

  • Q1: Czy są jakieś problemy z tym podejściem?
  • Q2: Jaka jest minimalna realistyczna wartość D_max? Oczywiście możemy użyć do tego "pół godziny", ale chcielibyśmy być bardziej zwinni w śledzeniu zdarzeń, więc byłoby świetnie wiedzieć, jaka jest minimalna wartość, na jaką możemy ją ustawić i nadal niezawodnie pobierać wszystkie zdarzenia.

Dzięki!

Odpowiedz

1

1: Nie widzę problemów z tym rozwiązaniem (w rzeczywistości robię coś bardzo podobnego). Przechowuję również identyfikatory zdarzeń do sprawdzenia, czy nie wstawiam duplikatów.

2: Pracowałem nad tym podobnym procesem. Teraz testuję z D_max po 10 minutach.

Dodatkowo, podczas przechodzenia przez proces testowania biegnę dodatkowe zadanie nocne, które sięga w ciągu całego dnia, aby potwierdzić kilka rzeczy:

  • jestem brakuje istniejące dane?
  • Diagnozuj, czy istnieje problem z założeniami, które poczyniłem odnośnie D_max.