2017-09-15 65 views
2

我需要一些關於如何正確構建能夠擴展的系統的指導。我會給你一些關於我想要做的事情的信息,然後問我的具體問題。瞭解如何構建可擴展系統

我有一個網站,我希望訪問者發送一些數據進行處理。他們將數據輸入到textarea或將其上傳到文件中。簡單。在向REST端點發出POST請求之前,數據在客戶端進行了一些預處理。

我卡在什麼是採取這張貼數據存儲它,然後將它與引用用戶的ID相關聯的好方法,因爲我無法足夠快地處理數據以便將其返回給用戶一段合理的時間?

這個問題有點含糊不清,對我的觀點持開放態度,我承認這一點。我只需要朝着正確的方向前進就可以繼續前進。我一直在考慮的是將數據放入消息隊列中,然後讓一些工作人員在別處處理數據,並在處理數據時通過某種鏈接到S3存儲桶或URL的方式提醒用戶在哪裏找到它到一個文件。另一個想法是針對已經在某種循環客戶端處理單個記錄的另一端點處理每個項目的請求。問題如下:

要處理數據,可能需要30分鐘到2小時的時間,具體取決於他們想要處理的數量。根據他們需要處理的記錄數量,他們坐在那裏等待完成是不理想的,所以我主要排除了這一點。

任何指導都將非常感激,因爲我沒有任何同事反彈,也沒有很多人知道我可以自由提問的領域知識。如果這不是問這個問題的恰當地方,你能否指出我應該問哪裏的正確方向?

克里斯

回答

4

如果我有你的權利,你的管道是:

  1. 從用戶接受項目

  2. 可能預處理/驗證它

  3. (?)放入隊列

  4. 過程數據

  5. 返回結果。

你在舞臺(3)上使用一個或幾個隊列。來自用戶的實體被添加到其中一個隊列中。如果足夠大,它可以存儲在S3或類似的存儲中,只有關於它的信息放入隊列:鏈接,添加日期,用戶標識(或類似的電子郵件)。處理器可以從隊列中提取項目並向用戶提供反饋。

如果您對訂單沒有嚴格的要求,事情變得更簡單:您不需要它們之間的任何同步。處理所有組件:上傳接受器,隊列,存儲器和處理器作爲獨立的進程池。分別監視每個池。如果存在一些瓶頸 - 將機器添加到該池中。

+1

啊漂亮!這給了我一些關於如何去做的想法。 – ozfive