日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

使用linux服务器的意义,RRDCached的意义

發布時間:2023/12/8 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用linux服务器的意义,RRDCached的意义 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不知道從什么時候開始,rrdtool里帶了rrdcached這個程序,準備試用一下。官網已經有了比較詳細的介紹,但是都是英文,翻譯一個先。

當rrdcached接收到update的命令的時候,它并不會把這個命令寫入磁盤,它會在多個隊列中,尋找相應rrd文件的隊列,如果沒有的話,會創建一個隊列,并且把自己,和當前的時間戳插進去。注意:當前的時間戳并不是update命令中帶的那個時間戳哦,這個當前的時間戳,就有了特殊的含義,在判斷是否刷新磁盤的時候會用到,我們把它叫做First。此時,這條update命令的時間戳(Time)和值(Value),已經添加成為了隊列樹的節點。

當下一個節點要進入隊列的時候,它會先檢查,這個隊列是不是需要把隊列中的數據flush到rrd文件中了,當 現在的時間戳 - First >= Timeout 的時候,它就會觸發flush操作,注意,是觸發,而不是直接寫rrd,這個問題隨后解釋。這個Timeout,是在啟動rrdcached的時候,用-w參數指定的,默認為5分鐘。

所謂的觸發flush操作,并不是直接寫rrd文件,而是把這個隊列移動到一個update queue中,當下一次寫rrd的線程被觸發的時候,這些在update queue中的值,就會被真正的寫到磁盤中。

我們會起多個update的線程,來進行rrd的寫操作。每個線程都會取出update queue中的第一個值,并且將它寫入磁盤的rrd文件中,這種方式十分高效,當update queue非空的時候,rrd文件會在最短的時間內被寫入。

我們可能都發現了一個問題————只有隊列接到update命令的時候,進程才會檢測,這個隊列是不是需要被flush到rrd中了,有一種場景:如果一個rrd文件,有了一次update之后,很久很久都沒有更新了,那隊列中就一直有這么一個值,而無法被寫入到rrd中,這個現象,顯然不是我們希望看到的……所以,我們每隔一段時間,所有的緩存隊列中的值,都會一起被flush到update queue中,等待被更新到rrd文件中。這個操作,一般來講,是非常消耗資源的,所以,不應該經常的做這種事情,這個間隔應該調的大一點,是由-f參數指定的,默認是一個小時一次。

rrdtool給這種cache提供了一個flush的命令,我們可以針對特定的rrd文件進行flush,當rrdcached接到這個命令的時候,它會先找到這個rrd文件的隊列,并且將這個隊列添加到update queue的頂端,當這些數據全部被寫rrd的線程寫到磁盤中以后,這個命令才會返回。

1、文件的隊列以平衡樹的方式存儲

2、平衡樹中的節點,和update queue的節點是一個struct

3、First和update命令中帶的時間,可能會不一樣

4、觸發update的那個節點,被添加到隊列尾部

5、flush命令,會將值插到update queue的頭部

6、ascII編碼通訊

官方文檔還提到了以下的幾點:

1、用戶認證:暫時沒有

2、授權:對每個socket進行授權,就是,每個socket可以接受的命令是不同的

3、加密:沒有加密

4、檢查:沒有,你讓它寫哪個文件,它就寫哪個文件,如果你用root起了這個進程,而它給一個很敏感的文件寫了些東西,把你寫死了……你就掛了

協議:

它的協議很簡單,沒有經過任何認證和加密,很容易用腳本實現,也可以直接telnet上來敲命令。⊙﹏⊙b汗……

命令是基于行的,一個命令就是一行或者多行,行和行之間用'\n'分隔。

命令格式:

都很簡單,有個HELP命令,可以看到詳細的幫助。

有兩個命令需要注意下:

BATCH

在執行了BATCH以后,你可以插入多行,這個時候,rrdcached會執行update的操作,但是并不會有返回,只有client端輸入一個結束標志:'.'的時候,rrdcached才會返回,你執行了多少命令,錯了多少行,哪行錯了,是哪些錯……

STATS

輸出rrdcached運行到現在的狀態,監控用。

QueueLength:有多少節點在update queue中等待寫入rrd

UpdatesReceived:總共接受了多少update命令

FlushesReceived:總共接受了多少flush命令

UpdatesWritten:總共update的次數

DataSetsWritten:總共有多少Data set被寫入了磁盤

TreeNodesNumber:在平衡樹中有多少節點

TreeDepth:平衡樹的深度

JonunalBytes:總共寫了多少Byte到journal

JournalRotate:journal總共滾動了幾次

翻譯至此結束……如果覺得意猶未盡,請直接看官網的文檔,如果還覺得不爽,請直接看源碼……

rrdtool還是個不錯的東東,但是有兩個磁盤寫上的問題很麻煩:

1、當rrd文件非常多的時候,而且都是監控數據,5分鐘就需要全部更新,更新的時候,光尋道都尋死了,而且如果內存無法全部cache,每次更新,都會造成大量內存和硬盤之間的數據交換……非常耗資源

2、每次update,都先打開一個file handler,然后更新一條,然后關閉file handler,當更新下一條的時候,繼續這么搞……很耗資源

第一個問題,通過mysql來解決,數據庫中以時間戳做pk,監控數據先插數據庫,這樣,在數據庫中做insert delay,因為mysql中的數據按照pk進行聚合,所以,就成為了批量順序寫入,而且mysql自己會保持文件句柄。

當需要繪圖的時候,先向數據庫發送請求,取出要插入這個rrd的數據,然后update,然后繪圖,這樣雖然多了一個步驟,但是,在update的時候,這個繪圖的rrd文件可以保證都cache在內存中,也可以一次性被flush到硬盤,以此來提高寫入rrd的速度。當批量更新rrd的時候,內存和硬盤只需要交互一次,就更新了全部的數據,而原先,交互一次才更新一條……

但是,這個方法,還是無法解決update的時候頻繁打開file handler的問題,有了rrdcached以后,這個問題貌似被解決了,在批量更新一個rrd的時候,我可以先將數據都準備好,然后再一個BATCH命令中,一次性更新上去,然后對此文件進行FLUSH操作,如果只需要打開一次文件句柄,就完成了所有數據的更新,那就最好了,但是,這種批量更新,是否真的是只打開一個文件句柄,還需要看源碼了……

總結

以上是生活随笔為你收集整理的使用linux服务器的意义,RRDCached的意义的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。