Categories
程式開發

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


一、引言

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

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

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

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

二、異步任務隊列原理

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

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

其基本原理如下圖所示:

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