Redis + NodeJS 實現一個能處理海量數據的異步任務隊列系統

一、引言

在最近的業務中,筆者接到了一個需要處理約十萬條數據的需求。這些數據都以字符串的形式給到,並且處理它們的步驟是異步且耗時的(平均處理一條數據需要 25s 的時間)。如果以串行的方式實現,其耗時是相當長的:

總耗時時間 = 數據量 × 單條數據處理時間
T = N * t (N = 100,000; t = 25s)
總耗時時間 = 2,500,000 秒 ≈ 695 小時 ≈ 29 天

顯然,我們不能簡單地把數據一條一條地處理。那麼有沒有辦法能夠減少處理的時間呢?經過調研後發現,使用異步任務隊列是個不錯的辦法。

下文將和大家分享用 Redis + NodeJS 實現一個能處理海量數據的異步任務隊列系統的思路和方法,希望與大家一同交流。文章作者:jrain,騰訊應用研發工程師。

二、異步任務隊列原理

我們可以把“處理單條數據”理解爲一個異步任務,因此對這十萬條數據的處理,就可以轉化成有十萬個異步任務等待進行。我們可以把這十萬條數據塞到一個隊列裏面,讓任務處理器自發地從隊列裏面去取得並完成。

任務處理器可以有多個,它們同時從隊列裏面把任務取走並處理。當任務隊列爲空,表示所有任務已經被認領完;當所有任務處理器完成任務,則表示所有任務已經被處理完。

其基本原理如下圖所示:

原文鏈接:【https://www.infoq.cn/article/wgE5N8zN4OYveDiDUJ71】。未經作者許可,禁止轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章