當前位置:
首頁 > 最新 > MillWheel:在網路規模上可容錯的流式處理

MillWheel:在網路規模上可容錯的流式處理

MillWheel 是 Google 2013年公開的其內部主要的流式計算框架,本文是對論文MillWheel: Fault-Tolerant Stream Processing at Internet Scale的翻譯。

摘要

MillWheel 是一個在 Google 內部廣泛使用的用於構建低延遲數據處理應用的架構。用戶為單獨節點指定一個有向計算圖和應用程序,這個系統會管理持久化狀態和連續的 record 流,這些都是在這個架構的容錯保證之內的。

本文介紹了 MillWheel 的編程模型以及它的實現。對於在 Google 內部使用的一個連續異常探測器的 case 研究,是為了展示有多少 MillWheel 的特性被使用了。MillWheel 的編程模型提供了一個邏輯時間概念,使得寫基於時間的聚合變得很容易。MillWheel 從設計一開始就考慮到容錯和可擴展性。在實踐中,我們發現 MillWheel 對可擴展性,容錯以及通用的編程模型的獨特結合,使得它在 Google 可以支持廣泛的問題。

1. 引言

流式處理系統對於為用戶提供內容以及支持組織做出更快更好的決定是至關重要的,這主要是由於它們具備提供低延遲結果的能力。用戶想要得到關於他們周圍世界的實時新聞。商業對於由像作弊過濾和入侵檢測這樣的實時情報來源提供的確切含義感興趣。類似地,科學家必須從巨大的原始數據流中精選出顯著的結果。

在 Google 的流式系統需要具備容錯,持久化狀態以及可擴展性。分散式系統運行在上千台共享機器上,任何一台都可能在任何時間掛掉。基於模型的流式系統,像異常探測器,依賴於根據數周數據生成的預測,並且它們的模型必須隨著新數據到達而在運行中更新。按數量級擴展這些系統不應該引起在構建和維護系統的操作成本上同量的增加。針對分散式系統的編程模型,像 MapReduce [11],在背後隱藏了架構的實現細節,允許用戶通過簡單的表達創建大量的分散式系統。通過允許用戶只關注他們的應用邏輯,這種編程模型允許用戶推出他們的系統的語義而不用成為分散式系統專家。特別地,用戶可以依賴架構級別的公理化的正確性和容錯保證,極大地限制 bug 和錯誤能夠出現的範圍。相比於限制到一種特定領域的語言,支持一系列通用編程語言進一步驅動了系統的推廣,因為用戶可以以一種熟悉的語言利用公共設施和便利的已有庫。

MillWheel 是一種編程模型,它是為流式處理量身定做的低延遲系統。用戶就像為在一個有向計算圖中的單獨節點寫應用邏輯,這樣他們可以定義一個任意的動態拓撲。Records 在圖中沿著邊被連續地傳遞。MillWheel 提供架構級別的容錯,拓撲中的任何節點或者任何邊在任何時間都可以失敗,而不會影響結果的正確性。作為這種容錯的一部分,可以保證系統中的每一個 record 都被傳遞給它的消費者。進一步,MillWheel 為 record 處理提供的 API 是以冪等的方式來處理每個 record 的,使得從用戶的角度看 record 傳遞只會精確的出現一次。MillWheel會按合適的間隔粒度對它的進度設置 checkpoint,消除任何在外部發送者緩存 checkpoint 之間長時間行將到來的數據的需要。

其他流式系統無法提供這種對容錯,通用性和可擴展性的結合。Spark Streaming [34] 和 Sonora [32] 很擅長做高效的 checkpointing 工作,但是限制了對用戶代碼可用的操作符的空間。S4 [26] 無法提供對持久化狀態的完全容錯,Storm [23] 無法支持對傳遞 record 的 exactly-once 機制,Trident [22] 要求嚴格的事物有序。嘗試擴展 MapReduce 和 Hadoop [4] 的批處理模型,來提供低延遲系統,導致在靈活性上有所妥協,例如在 Spark Streaming 中依賴 Replicated Distributed Datasets [33]的特定操作符。流式 SQL 系統 [1] [2] [5] [6] [21] [24] 為許多流式問題提供了簡單的解決方案,但是直觀的狀態抽象和複雜的應用邏輯(例如矩陣乘法)可以使用命令式語言的操作流更自然地表達,而不是像 SQL 這種聲明式語言。

我們的貢獻是一個針對流式系統的編程模型以及對 MillWheel 架構的實現。

本文的剩餘部分是這樣組織的。第2節概括了一個激發 MillWheel 不斷發展的例子,以及它所利用的對應的需求。第3節提供了一個對系統的高級概述。第4節定義了 MillWheel 模型的基本抽象,第5節討論了MillWheel提供的 API。第6節概述了在 MillWheel 中容錯的實現,第7節涵蓋了總體的實現。第8節提供了實驗結果來說明 MillWheel 的性能,第9節討論了相關工作。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CoreDumper 的精彩文章:

TAG:CoreDumper |