OpenTsdb驅動簡單實現

2021-09-25 09:50:04 字數 3077 閱讀 9504

時序時空資料庫tsdb簡介和使用方案可以看文件

tsdb對外只提供restful api,而且tsdb作為時序資料庫,在後台的微服務的使用大部分場景只做查詢,資料的寫入交由其他的資料採集服務負責。我們之前有個使用場景是通過canal去監聽mysql binlog,將實時的資料寫入tsdb中。由其他服務通過http post方式去讀取。

阿里雲提供的tsdb http api方法看以看

tsdb查詢的http api方法如下:

http://ip:port/api/query
tsdb查詢的包體如下:

/*單值查詢*/

type query struct

type queryparams struct `json:"start"`

end inte***ce{} `json:"end,omitempty"`

queries query `json:"queries,omitempty"`

}

metric是查詢你需要的 指標名,可以理解為mysql或者mongodb裡面的表,這些表裡面有很多字段,想要查詢的字段寫在tags中

tsdb查詢成功會返回這樣的引數:

type queryresponse struct
如果查詢失敗不是直接在http上返回error,而是直接返回乙個error的報文:

/*返回錯誤結構體*/

type queryerrormsg struct

type errormsg struct

tsdb 時序資料庫的含義指它能方便的查出從資料第一次寫入時間到任意時間段的值,比如我們需要獲取哪一天的哪一秒的值,就可以構造這樣的引數:這裡用curl 先模擬一下:}]

}'

返回:

[

,"aggregatetags": [

],"dps":

}]

dps的value表示查詢得到的值

首先我們設計乙個tsdb balance,主要用來做負載均衡。這裡可以為每乙個tsdb的ip設計相應的權重,如果某台tsdb伺服器出現故障,可以自動的降低權重,並且可以設計乙個配置的超時時間恢復該連線的權重,這個時間對tsdb伺服器進行修復,這樣就可以達到高可用的目的。

type tsdbinstance struct 

type tsdbbalance struct

func newtsdbbalance() *tsdbbalance

tsdb.ip = make(*tsdbinstance, 0)

return tsdb

}func (t *tsdbbalance) register(ts tsdbinstance)

}func (t *tsdbbalance) getrandtsdbinstance() *tsdbinstance

var best *tsdbinstance

total := 0

t.rlock()

for i := 0; i < len(t.ip); i++

} t.runlock()

if best == nil

best.currentweight -= total

return best

}func (t *tsdbbalance) updateweight(ts *tsdbinstance) error

} return fmt.errorf("tsdb instance not found ")

}

對於tsdb伺服器請求,需要設計乙個連線池去進行連線的復用,可以使用net/http自帶的連線池:

maxidleconns: maxidleconns, //最大空閒連線數

maxidleconnsperhost: maxidleconnsperhost, //最大與伺服器的連線數 預設是2

idleconntimeout: idleconntimeout * time.second, //空閒連線保持時間

},} return client

}這裡引數需要對tsdb伺服器所在的機器配置進行合理的評估,通過壓測分析最合理的配置~~,不然會發現和不用連線池的時間差別不大。連線池主要作用是連線的復用,合理配置引數才能有更高的效率,不要盲目的套用網上某些部落格上配置。

請求連線的過程如下:

/*如果是服務端出錯,應該中斷與該服務端的連線*/

if errmsg.error.code == 500 || errmsg.error.code == 501 )

if err != nil

} else if errmsg.error.code == 503 )

} else

}

驅動python python實現事件驅動

eventmanager事件管理類實現,大概就百來行 左右。encoding utf 8 系統模組 from queue import queue,empty from threading import class eventmanager def init self 初始化事件管理器 事件物件列表...

驅動開發3 簡單的led驅動

一 字元裝置驅動框架 字元裝置驅動的編寫主要就是驅動對應的open close read。其實就是file operations結構體的成員變數的實現。二 驅動模組的載入與解除安裝 1 linux驅動程式有兩種存在形式 編譯到kernel裡面,也就是zimage 編譯為模組,ko。tip 1 編譯驅...

ADC驅動例項(簡單)

adc驅動 僅一路輸入 s3c2410 adc.h ifndef s3c2410 adc h define s3c2410 adc h define adc write ch,prescale ch 16 prescale 將頻道和預分頻合併為乙個資料,這樣可以作為乙個引數傳入 define adc...