簡體   English   中英

數據流 API - 高可用性

[英]Data streaming API- High availability

在我在 AWS 上的架構中,我有一個在 EC2 實例上運行的服務,它調用 Twitter 流式傳輸 API 用於數據攝取,即攝取實時推文。 我將此服務稱為 TwitterClient。

Twitter API 使用一種基於 HTTP 協議的長輪詢來傳遞流數據。 文檔說——在您的應用程序(在我的例子中是 TwitterClient)和 API 之間打開了一個連接,並通過該連接發送新的推文。

TwitterClient 然后將實時推文傳遞到后端(使用 Kinesis Data 流)進行處理。

我面臨的問題是 - 並行運行多個 EC2 實例將導致重復的推文被攝取,並且每條推文都將被處理多次。 但是,只有一個 EC2 實例會成為單點故障。

我無法承受停機時間,因為我不能錯過任何一條推文。

我應該怎么做才能確保高可用性?

編輯:添加了 Twitter API 如何傳遞流數據的簡要說明

實現這一點的最簡單方法是在不同區域並行運行多個 EC2 實例。 您當然可以變得更復雜,並在實例之間使用心跳,但這可能是過度設計的。

多個 EC2 實例並行將導致重復的推文被攝取,並且每條推文將被處理多次

推文具有唯一的消息 ID,可用於重復數據刪除。

我不能錯過任何一條推文

這是你真正的問題。 Twitter 將您限制為每 15 分鍾的一定數量的請求。 假設您有合理的過濾規則(即,您不嘗試閱讀整個推文流,甚至是針對廣泛主題的推文流),那么這應該足以捕獲所有推文。

但是,如果您正在運行多個實例,這可能還不夠。 您可以嘗試使用兩個 API 密鑰(假設 Twitter 允許)或將輪詢頻率調整為允許多個實例同時運行的值。

但是請注意:據我所知,沒有任何保證。 如果您需要保證訪問每條相關推文,則需要與 Twitter 交談(並准備為特權付費)。

您可以設置在負載均衡器后面運行 2 個 EC2,一次只保持一個 EC2 實例處於活動狀態,而另一個作為被動(或備份)實例。 2nd 將在 1st 關閉時激活。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM