2016-12-06 30 views
7

我們正在實現對我們的應用程序中跟蹤Mailgun事件的支持。我們回顧了建議的event polling algorithm,但發現我們對此不太滿意。首先,我們不希望丟棄我們已經提取的數據,然後在暫停後重試。它不是非常有效率,並且爲長時間的重試循環打開了一扇大門,因爲不清楚循環何時應該結束。其次,「門檻年齡」似乎是確定「可信度」的關鍵,但其價值沒有確定,只有非常大的「半小時」建議。Mailgun:事件輪詢算法

我們的理解是,事件在某些閾值延遲後變爲「可信」,讓我們稱之爲D_max,當事件保證存在於事件存儲中時。如果是這樣,我們可以用不同的方式實現這個算法,這樣我們就不會獲取我們所知道的不「可信」的數據,並利用所有已獲取的數據。

我們將定期獲取數據,並且在每次迭代,我們將:

  1. 請對事件API指定上升時間範圍從T_1T_2 = now() - D_max的請求。對於第一次迭代,可以將T_1設置爲過去的某個時間,例如「半小時前」。對於後續迭代,T_1被設置爲來自先前迭代的值T_2
  2. 在返回下一頁網址的同時,一個一個提取所有頁面。
  3. 使用所有提取的事件,因爲它們都是「可信的」。

我的問題是:

  • Q1:是否有使用這種方法的任何問題?
  • Q2:D_max的最小實際值是多少?顯然,我們可以使用「半小時」,但我們希望在跟蹤事件時更加敏捷,所以知道我們可以設置的最小值以及仍然可靠地獲取所有事件將是一件非常好的事情。

謝謝!

回答

1

1:我發現這個解決方案沒有問題(其實我做的事情非常相似)。我還存儲事件的ID來驗證我沒有插入重複條目。

2:我一直在通過這個類似的過程。現在我正在用D_max測試10分鐘。

此外,在整個測試過程中要我運行一個額外的任務,夜間可追溯到上一整天來驗證的幾件事情:

  • 我失去了現有的指標?
  • 診斷我對D_max做出的假設是否存在問題。