cassandra 0 3 原始碼學習筆記 2

2021-05-02 03:18:28 字數 1848 閱讀 8864

原始碼中對節點的如下稱呼應該是等價的: end point , node ,  machine , datacenter , host。

cassandra節點的啟動main()在類org.apache.cassandra.service.cassandradaemon中,細節在 setup()中。過程中會start乙個cassandraserver的例項peerstorageserver。 peerstorageserver在建立的時候,內部會例項化乙個 storageservice例項,在該storageservice例項初始化的過程中,該節點的所有功能服務會被配置啟用,這些操作是在 storageservice的預設構造器中完成的。

storageservice的構造器中大致做了如下幾件事情:

1)生成乙個storageloadbalancer_s例項負責負載均衡,現在還沒有明白原理。

2)生成乙個endpointsnitch_例項,這個提供了對兩個end_point進行比較的乙個途徑,基本上是判斷兩個end_point是不是同乙個ip等

3)啟動了messagingservice,並且註冊了一些handler例項。messagingservice是負責該end_point與其他end_point進行通訊的。兩個節點間通訊的內容被封裝在乙個message的例項裡面。

比如,如果節點a想向節點b獲得一定的資料,那麼a需要通過自己的messageservice向節點b傳送乙個message例項,這個例項裡面包含了 如下資訊:這個請求的型別(屬於什麼stage) , 這個請求要呼叫的b的哪個handler來處理,以及這個請求的其他具體內容。當節點b接收到節點a傳送過來的message例項後,會將根據這個 message例項內部指定的handler資訊,將該例項**相應的handler去處理。當然這樣做的前提是這個指定的handler已經在b節點注 冊了,而這個註冊過程就是在storageservice啟動的時候完成的。

4)consistencymanager_:還沒明白什麼意思。

5)stagemanager的配置:

這個stage的概念來自於「seda「( staged event driven architecture)中的"s",參考http://www.eecs.harvard.edu/~mdw/*****s/seda-sosp01.pdf。

大致意思好像是可以將乙個工作流程分為若干個階段(stage),然後給各個stage動態的分配執行緒資源來處理stage內定義的邏輯。stage和 stage之間的通訊是通過任務佇列完成的,當乙個stage的邏輯執行完後,如果需要呼叫下乙個stage來繼續執行,那麼就往下乙個stage保有的 任務佇列中寫入必要的任務資訊。

這樣的seda結構的好處是:在實際的執行當中各個stage的忙閒程度是不一樣的,可以通過將比較閒的stage上的執行緒資源分配給同期比較忙的stage來實現效率上的提高。

在cassandra中,還是以3)中例子說明,在a節點發往b節點的message例項中有乙個「這個請求的型別」的資訊,這個資訊儲存在 message例項內header例項的type_上,是乙個字串。這個字串標明了當messageservice獲取了message例項後究竟由 那個 stage來負責執行指定的handler物件。因為handler物件只是定義了對message的處理邏輯,所以需要stage裡面的執行緒來對其進行 執行。

當前的stage只有4種,依次在stroageservice的 /* all stage identifiers */標註下被定義,分別負責不同的任務,「row-read-stage」是負責讀取的,其他的含義還沒有完全搞清楚,大概是負責修改,資料壓縮和 http後台頁面資訊接收的。

stagemanager部分的原始碼還沒喲看到,可能是負責各個stage間執行緒排程的吧。

6)設定nodepicker_定義了當前節點對周圍節點的查詢策略,具體的還不清楚

Redux createStore原始碼學習

redux apiexport原始碼結構上面我們看到了redux的api和原始碼結構,看的出來,warning.js和index.js不用解析,都看得懂,關鍵時其餘的幾個module,那我們從最重要的createstore講起。export var actiontypes 首先定義了乙個action...

pytorch geometric 原始碼學習

作者大神真的太屌了,膜拜,工程實現能力太強了 本文希望能夠記錄學習其原始碼的過程 data dataset 部分 涉及優化?property 一種python內建裝飾器,可以將乙個成員函式當成成員變數來訪問,例如 class planetoid inmemorydataset url def ini...

logback原始碼閱讀 根據原始碼學擴充套件點 七

原始碼 點選跳轉 1.xml定義 xml version 1.0 encoding utf 8 configuration property name charset value utf 8 name class encoder pattern p d t logger line n m n n p...