Storm的跟蹤演算法-異或
Storm 對於 tuple 的跟蹤演算法是 storm 最大的突破。這個演算法使得對於任意大的一個 tuple tree, 它只需要恆定的20位元組就可以進行跟蹤了。
Storm 系統中有一組叫做“acker”的特殊任務,它們負責跟蹤 DAG(有向無環圖)中的每個訊息。每當發現一個 DAG 被完全處理,它就向建立這個根訊息的 spout 任務傳送一個訊號。
原理很簡單:
1)當一個訊息被建立的時候(無論是在 spout 還是 bolt 中),系統都為該訊息分配一個 64bit 的隨機值作為id。這些 messageid 是 acker 用來跟蹤由 spout 訊息派生出來的 tuple tree 的。
2)acker 對於每個 tuple 儲存一個 ack-val 的校驗值(一個64 bit數字),它的初始值是0。 然後每發射一個 tuple (即訊息的建立),或者 ack 一個 tuple (即訊息的被應答),那麼 tuple 的 id 都要跟 ack-val 異或一下,並且把得到的值更新為 ack-val 的新值。假設每個發射出去的 tuple 都被 ack 了, 那麼最後 ack-val 一定是0(因為一個數字跟自己異或得到的值是0)。
總的來說,ack-val 是這棵樹上所有建立的 tuple-id 以及 ack 的 tuple-id 一起異或(XOR)。ack-val 表示了整棵樹的的狀態,無論這棵樹多大,只需要這個固定大小的數字就可以跟蹤整棵樹。
每當 acker 發現一棵樹的 ack val 值為0時,它就知道這棵樹已經被完全處理了。
因為訊息的隨機ID是一個64bit的值,因此ack val在樹處理完之前被置為0的機率非常小。
Storm 系統中有一組叫做“acker”的特殊任務,它們負責跟蹤 DAG(有向無環圖)中的每個訊息。每當發現一個 DAG 被完全處理,它就向建立這個根訊息的 spout 任務傳送一個訊號。
原理很簡單:
1)當一個訊息被建立的時候(無論是在 spout 還是 bolt 中),系統都為該訊息分配一個 64bit 的隨機值作為id。這些 messageid 是 acker 用來跟蹤由 spout 訊息派生出來的 tuple tree 的。
2)acker 對於每個 tuple 儲存一個 ack-val 的校驗值(一個64 bit數字),它的初始值是0。 然後每發射一個 tuple (即訊息的建立),或者 ack 一個 tuple (即訊息的被應答),那麼 tuple 的 id 都要跟 ack-val 異或一下,並且把得到的值更新為 ack-val 的新值。假設每個發射出去的 tuple 都被 ack 了, 那麼最後 ack-val 一定是0(因為一個數字跟自己異或得到的值是0)。
總的來說,ack-val 是這棵樹上所有建立的 tuple-id 以及 ack 的 tuple-id 一起異或(XOR)。ack-val 表示了整棵樹的的狀態,無論這棵樹多大,只需要這個固定大小的數字就可以跟蹤整棵樹。
每當 acker 發現一棵樹的 ack val 值為0時,它就知道這棵樹已經被完全處理了。
因為訊息的隨機ID是一個64bit的值,因此ack val在樹處理完之前被置為0的機率非常小。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30316686/viewspace-2120714/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Revival 的演算法跟蹤演算法
- sp_trace_setfilter sqlserver篩選跟蹤或跟蹤過濾FilterSQLServer
- opencv的目標跟蹤演算法OpenCV演算法
- 目標跟蹤演算法概述演算法
- 演算法分析__遞迴跟蹤演算法遞迴
- 12c 程式跟蹤檔案異常
- 目標跟蹤演算法分類演算法
- SuperCleaner V2.50 漢化版的演算法跟蹤演算法
- iOS異或加密演算法iOS加密演算法
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- 【跟蹤演算法】MOSSE論文翻譯演算法
- 基於行跟蹤的ROWDEPENDENCIES實現資訊變化跟蹤
- Oracle中如何跟蹤SQL或資料庫操作 [final]OracleSQL資料庫
- git的跟蹤分支和遠端跟蹤分支學習筆記Git筆記
- 基於MeanShift的目標跟蹤演算法、實現演算法
- AVI-GIF V1.0.9 漢化版的演算法跟蹤演算法
- SQL 的跟蹤方法traceSQL
- sqlnet跟蹤SQL
- ORACLE 跟蹤工具Oracle
- 【TRACE】如何設定或動態跟蹤Oracle net偵聽器Oracle
- 如何在Python中保留異常裝飾器的堆疊跟蹤Python
- git 刪除已經新增到git跟蹤的檔案或資料夾Git
- C#中準確跟蹤錯誤異常所在的檔案位置方法C#
- HP下對程式的跟蹤
- 跟蹤 sql 的trace檔案SQL
- 跟蹤使用者的SQLSQL
- 【Longkin】ASP.NET應用程式跟蹤---(一)跟蹤頁面ASP.NET
- 反跟蹤技術
- 【TRACE】Oracle跟蹤事件Oracle事件
- Oracle跟蹤會話Oracle會話
- Oracle 跟蹤事件【轉】Oracle事件
- Oracle跟蹤檔案Oracle
- 主力跟蹤戰法
- 演算法之字首樹——最大異或和演算法
- ORACLE 10046 設定跟蹤事件後無跟蹤檔案Oracle事件
- Mac好用的時間跟蹤器Mac