維護操作(maintenance operations)作為本文闡述的物件,是在kudu正常執行的過程中,執行在後台的程序。為了保證kudu系統操作的流暢,維護管理器(maintenancemanager)必須要明智的排程維護操作。某種程度上說,這是在當前效能和未來效能之間的權衡。比如說,做compaction操作就是消耗當前的io,是的之後的插入效能提高。從另外一面說,這有是必須執行的任務,因為不執行的話會導致系統不穩定。比如,如果我們不去重新整理memrowsets,最終會導致kudu記憶體溢位。記憶體的的下降最終會導致處理請求速度的減慢。
為了做出正確的決定,我們需要權衡的最重要的事情包括以下幾點:
記憶體使用情況
tablet的統計
memrowsets的存在時間
除此之外,我們還考慮的其他一些標準(版本1中不需要考慮這些),包括:
可用磁碟空間。
磁碟之間的負載平衡,它將受維護操作影響
如果管理得當的話,可用磁碟空間不應成為問題。我們後面還會討論這點,但對於初始版本,最好假設我們有足夠的空間。
我們現在不能考慮基於磁碟的排程,因為我們還沒有支援多個磁碟。
記憶體使用可以分解為以下幾個部分:
系統開銷(c ++資料結構,作業系統開銷等)。
memrowsets
lru塊快取
我們假設#1相對恆定。維護操作排程程式可以通過決定將某些memrowsets重新整理到磁碟來在#2和#3之間進行權衡。
我們希望保持#1,#2和#3所佔的總記憶體量不會過大。目前,我們的目標是保持這總記憶體使用的相對穩定。我們還沒有實現將tcmalloc儲存的記憶體返回給作業系統。
如果我們知道tablet的工作負載是掃瞄密集型(而不是插入密集型),我們可能希望對該tablet進行主要的增量壓縮以加快掃瞄速度。對於使用頻繁的表進行壓縮可能比在不怎麼使用的表上進行壓縮更聰明。
這可能是最難有效利用的資訊**,因為它涉及許多依賴於工作負載的假設和啟發式方法
memrowset和deltamemrowset物件在儲存一定時間後必須重新整理到磁碟。如果我們不這樣做,預寫日誌(wal)將不受限制地增長。這種增長會浪費磁碟空間並使啟動速度變慢,因為在啟動過程中必須遍歷整個wal。
我們應該在每個memrowsets和deltamemrowset中嵌入乙個wal操作id。排程程式將更傾向於重新整理存在時間比較久的memrowset。在操作id落後太多之後,排程程式無論如何都會嘗試重新整理這個memrowset。
這些操作需要花費一些i / o或cpu以釋放記憶體。完成後,它們可能會提高效能。這些操作不能無限延遲,因為ram是一種有限的資源。
開銷:
效益:
其他:基本上與memstore重新整理開銷相同
其他好處:todo:重新整理也可以大大加快掃瞄速度。與掃瞄等效的memstore相比,掃瞄快取檔案要快得多,需要對此進行實驗 。也許同乙個數量級。
開銷:如果驅逐了key列的快取,查詢和插入速度會變慢
效益:釋放ram
這些操作消耗現在的某種i / o和cpu,以便在系統完成後提高系統效能。它們是必要的,因為如果我們不去執行它,系統最終會越來越慢。
開銷:
效益:成本:
效益:成本:
效益:
每個tablet都會建立多個maintenanceop物件,表示可以對其執行的各種維護操作。它使用maintenancemanager註冊這些操作。
maintenancemanager有乙個主線程,它定期輪詢已註冊的maintenanceop物件並確定它是否應該執行它們中的任何乙個。預設輪詢間隔為250毫秒,但這是可配置的。假定訪問maintenanceop是執行緒安全的。值得注意的是,排程程式可以選擇任何可用的操作。它不一定以先到先得的方式執行操作。
如果maintenancemanager決定執行其中乙個操作,它將在可配置大小的執行緒池中執行它。我們假設維護操作是阻塞的並且需要執行緒上下文。如果操作失敗,maintenancemanager將記錄警告訊息並重新觸發主線程。在可配置的寬限期到期之前,將不會重試失敗的maintenanceop。
maintenanceop有各種字段,表明它可能釋放多少記憶體,它將使用多少cpu,等等。它還有乙個字段,標記它當前不可執行。例如,某些ops可能會使用它,這些ops不希望它們的多個例項同時執行。
我們希望保持至少乙個執行緒可以自由執行重新整理操作,這樣我們就不會遇到這種情況:當我們需要釋放記憶體時,所有維護操作執行緒都在進行壓縮或其他操作。希望大多數壓縮都會相當短,因此我們不必排程長時間的壓縮。
kudu基礎 讀寫操作
kafka kudu 結構化資料 靜態資料集 儲存在hdfs中 高吞吐量 半結構化資料 儲存在hbase和cassandra。可適應於低延遲的記錄級讀寫,但是在對ml和基於sql的分析等應用上連續讀吞吐量上遠遠落後於靜態檔案格式 為什麼需要kudu?hdfs 吞吐量高,列式儲存,不支援record ...
scala通過jdbc操作kudu
val driver com.cloudera.impala.jdbc41.driver val url jdbc impala class.forname driver val client drivermanager.getconnection url 注意 sql語句後面新增分號,估計是imp...
安全相關之操作維護 網路協議
ddos攻擊 分布式拒絕服務攻擊指借助於客戶 伺服器技術,將多個計算機聯合起來作為攻擊平台,對乙個或者多個 目標發布ddos攻擊,從而成倍地提高拒絕服務攻擊的威力。換句話說就是對伺服器傳送大量無意義的請求,導致正常使用者無法訪問伺服器造成阻塞,甚至導致伺服器的癱瘓 ddos攻擊趨勢變化 2014,5...