turbine是怎麼收集指標資料的

2021-09-14 00:15:03 字數 3602 閱讀 9113

我們通過url:http://localhost:10000/turbine.stream?cluster=default可以獲取到指標的json資料。那麼指標資料又是從何處獲取到的。

答案是:從各個服務的/manage/hystrix.stream端點獲取的

可以找到turbine的架構設計

詳細資訊參考

說明:turbine啟動的時候,會去連線需要監控的主機,建立起監聽,每乙個例項會有乙個監聽。當例項監聽從各個服務獲取到資料的時候,會將資料填充到派發器dispatcher中,由派發器將資料輸出到各個客戶端。

turbine的實現在turbine核心包下

com.netflix.turbine:turbine-core

在該包下,可以找到幾個關鍵的類

instancemonitorhandlerqueuetupleturbinedatadispatcherturbinestreamservlet

我們啟動除錯的時候,可以看到

例項的url其實是指向具體需要監控的例項的端點,即

檢視這個鏈結我們可以看到

instancemonitor啟動監聽

public void startmonitor() throws exception 

taskfuture = threadpool.submit(new callable()

} catch(throwable t) finally

cleanup();

monitorstate.set(state.cleanedup);

}return null;

}});

}

private void init() throws exception 

}

dowork()方法做了什麼呢

private void dowork() throws exception  else 

listlist = new arraylist();

list.add(instancedata);

/* send to all handlers */

//將獲取到的資料新增到dispatcher中

boolean continuerunning = dispatcher.pushdata(getstatsinstance(), list);

if(!continuerunning)

}

getnextstatsdata讀取資料

那麼派發器是什麼呢,它的實現檢視turbinedatadispatcher

檢視它的pushdata方法

發現呼叫的是tuple.pushdata(statsdata);tuple其實就像乙個管道,檢視handlerqueuetuplepushdata方法

public void pushdata(k data) 

boolean success = queue.writeevent(data);

if (iscritical()) else }}

看到queue.writeevent(data)、往佇列裡寫資料

這個佇列又是什麼呢?

其實就是乙個事件佇列eventqueue,檢視它的寫事件方法

public boolean writeevent(t event) 

count.incrementandget();

queue.add(event);

return true;

}

如果佇列中的長度大於maxcapacity,將不會再往佇列裡填充資料。當客戶端連線上的時候,queue就會被消費。如果客戶端沒有連線上的時候,queue讀出來,經過一系列的操作會寫回queue中,直到佇列滿了就不在寫了。1、當沒有客戶端連線上的時候

eventhandler經過一些列的處理,資料會被寫回到queue中

2、當有客戶端連上的時候,假設我們通過瀏覽器位址列輸入了

此時我們看到eventhandler為turbinestreamingconnection,見下圖

handldata()就變成了turbinestreamingconnection中的方法

public void handledata(collectiondata) 

//將資料寫到steamhandler中

writetostream(data);

}

writetostream()中有個關鍵的操作streamhandler.writedata(jsonstringfordatahash)

writedata()方法就可以將資料寫到response中

客戶端訪問http://localhost:10000/turbine.stream?cluster=default的時候,其實就是通過turbinestreamservlet獲取到響應結果的。

網路資料是怎麼傳輸的

上圖是iso的七層網路體系結構,每一層都有其相應的工作協議。資料傳輸過程如下 如qq 在傳送主機a上,傳送的資料經過應用層時,應用層對資料進行了包裝,它在要傳輸的資料上加了乙個應用層首部ah後,繼續向傳輸層傳送。傳輸層接收到應用層的資料後,將資料 應用層ah當做資料,給它進行包裝,加上自己的首部,此...

什麼是資料傾斜,怎麼解決資料傾斜?

相信很多接觸mapreduce的朋友對 資料傾斜 這四個字並不陌生,那麼究竟什麼是資料傾斜?又改怎樣解決這種該死的情況呢?何為資料傾斜?正常的資料分布理論上都是傾斜的,就是我們所說的2 8原理 80 的財富集中在20 的人手中,80 的使用者只使用20 的功能,20 的使用者貢獻了80 的訪問量,不...

怎麼來看遊戲常規指標資料 I

前些天,寫了一篇遊戲資料分析的內容,大家的反響效果不錯,可能內容有些簡陋,有些小白,的確,在遊戲bi之外,可能boss或者旁觀者只能去關注這些指標性的資料,並問一些問題,而這是對於運營人員最要命的,因為要在很短的時間內去反饋和分析這些指標資料背後的問題。運營人員所熟知的資料指標其實是比較有限的,但是...