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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- sp_trace_setfilter sqlserver篩選跟蹤或跟蹤過濾FilterSQLServer
- opencv的目標跟蹤演算法OpenCV演算法
- 目標跟蹤演算法概述演算法
- 演算法分析__遞迴跟蹤演算法遞迴
- 目標跟蹤演算法分類演算法
- 【跟蹤演算法】MOSSE論文翻譯演算法
- Akka 和 Storm 的設計差異ORM
- 如何在Python中保留異常裝飾器的堆疊跟蹤Python
- git的跟蹤分支和遠端跟蹤分支學習筆記Git筆記
- 【TRACE】如何設定或動態跟蹤Oracle net偵聽器Oracle
- git 刪除已經新增到git跟蹤的檔案或資料夾Git
- 主力跟蹤戰法
- 反跟蹤技術
- 演算法之字首樹——最大異或和演算法
- git列出跟蹤的檔案列表Git
- Mac好用的時間跟蹤器Mac
- [20190402]跟蹤vmstat.txt
- Linux 跟蹤器之選Linux
- SQLServer進行SQL跟蹤SQLServer
- 會話跟蹤技術會話
- 跟蹤執行命令T
- 除錯跟蹤利器---strace除錯
- 異或
- 像跟蹤分散式服務呼叫那樣跟蹤 Go 函式呼叫鏈分散式Go函式
- CVPR2016跟蹤演算法Staple的配置(Staple: Complementary Learners for Real-Time Tracking)演算法
- 深度學習|基於MobileNet的多目標跟蹤深度學習演算法深度學習演算法
- 分散式系統的跟蹤系統分散式
- Git跟蹤與提交檔案Git
- ATC系統跟蹤事項
- .gitignore忽略跟蹤指定檔案Git
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- Zipkin — 微服務鏈路跟蹤.微服務
- APT組織跟蹤與溯源APT
- [20210603]如何跟蹤索引分裂.txt索引
- Sleuth服務跟蹤:整合 Logstash
- 模版匹配定位跟蹤原始碼原始碼
- 計算機視覺中,究竟有哪些好用的目標跟蹤演算法(上)計算機視覺演算法
- 計算機視覺中,究竟有哪些好用的目標跟蹤演算法(下)計算機視覺演算法
- 基於kalman濾波的UAV三維軌跡跟蹤演算法matlab模擬演算法Matlab