背景介紹:
為博望等地區(qū)用戶(hù)提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及博望網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、博望網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶(hù)提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶(hù)的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!作為一名 Infra,管理平臺(tái)的各種基礎(chǔ)組建以及基本的服務(wù)質(zhì)量是必修的功課,而如何對(duì)復(fù)雜和繁多的基礎(chǔ)平臺(tái),甚至包括上面運(yùn)行的 Ops 系統(tǒng)、業(yè)務(wù)系統(tǒng),其穩(wěn)定性的各項(xiàng)指標(biāo)都是衡量 Infra 是否稱(chēng)職的非常重要的標(biāo)準(zhǔn)。
單純離散的指標(biāo)本身是沒(méi)有實(shí)際意義的,只有將離散的指標(biāo)通過(guò)某種方式進(jìn)行存儲(chǔ),并支持對(duì)終端用戶(hù)友好的查詢(xún)以及聚合,才會(huì)真正的有意義。因此,一個(gè)性能足夠的,分布式的,用戶(hù)友好且方便下面 DevOps 團(tuán)隊(duì)進(jìn)行部署的 TSDB ( Time Series Database )就成了一個(gè)不可缺少的系統(tǒng)。
常見(jiàn)的 TSDB 包括 InfluxDB , OpenTSDB , Prometheus 等,其中,開(kāi)源版本的 InfluxDB 雖然優(yōu)秀,但并不支持集群部署,且 TICK Stack 本身對(duì)數(shù)據(jù)清洗的靈活性支持并不太好,直接使用開(kāi)源版本,會(huì)有統(tǒng)計(jì)信息被收集并上報(bào);而 OpenTSDB 由于基于 HBase ,在部署時(shí)成本過(guò)高,且本身并不是一套完整的監(jiān)控系統(tǒng),而基于 Prometheus 與 TiKV 進(jìn)行開(kāi)發(fā)的話,整個(gè)系統(tǒng)可在保持最簡(jiǎn)潔的同時(shí),也有非常豐富的生態(tài)支持。
因此,基于實(shí)際情況,融云最終選擇 TiPrometheus 作為 Infra 部的監(jiān)控平臺(tái)存儲(chǔ)方案。
項(xiàng)目簡(jiǎn)介:
上圖為 Prometheus 的官方系統(tǒng)架構(gòu)圖,而實(shí)現(xiàn) TiPrometheus ,用到了上圖中沒(méi)有體現(xiàn)到的一個(gè) Prometheus 的功能:Remote Storage ,如其名所示,其主要功能是給 Prometheus 提供了遠(yuǎn)程寫(xiě)的能力,這個(gè)功能對(duì)于查詢(xún)是透明的,主要用于長(zhǎng)存儲(chǔ)。而我們當(dāng)時(shí)的 TiPrometheus 實(shí)現(xiàn)了基于 TiKV 以及 PD 實(shí)現(xiàn)的 Prometheus 的 Remote Storage 。
核心實(shí)現(xiàn)
Prometheus 記錄的數(shù)據(jù)結(jié)構(gòu)分為兩部分 Label 及 Samples 。 Label 記錄了一些特征信息,Samples 包含了指標(biāo)數(shù)據(jù)和 Timestamp 。
Label 和時(shí)間范圍結(jié)合,可以查詢(xún)到需要的 Value 。
為了查詢(xún)這些記錄,需要構(gòu)建兩種索引 Label Index 和 Time Index ,并以特殊的 Key 存儲(chǔ) Value 。
l Label Index
每對(duì) Label 為會(huì)以 index:label:
l Time Index
每個(gè) Sample 項(xiàng)會(huì)以 index:timeseries:
l Doc 存儲(chǔ)
我們將每一條 Samples 記錄以 timeseries:doc:
下面做一個(gè)梳理:
寫(xiě)入過(guò)程
生成 labelID
構(gòu)建 time index,index:timeseries:
寫(xiě)入時(shí)序數(shù)據(jù) timeseries:doc:
查詢(xún)過(guò)程
根據(jù)倒排索引查出 labelID 的集合,多對(duì) Label 的查詢(xún)會(huì)對(duì) labelID 集合求交集。
根據(jù) labelID 和時(shí)間范圍內(nèi)的時(shí)間分片查詢(xún)包含的 Timestamp 。
Why TiPrometheus
該項(xiàng)目最初源于參加 PingCAP 組織的 Hackathon ,當(dāng)時(shí)希望與參與者一起完成大家腦海里的想法,其實(shí)最重要的事情就是,做出來(lái)的東西并不是為了單純的 Demo ,而是要做一個(gè)在實(shí)際工作中應(yīng)用于生產(chǎn)環(huán)境的實(shí)際能力,且能解決生產(chǎn)中的問(wèn)題。
剛開(kāi)始還有過(guò)各種奇思妙想,包括在 TiSpark 上做一套 ML ,Hadoop over TiKV 等,不過(guò)這些想法實(shí)現(xiàn)起來(lái)都有些過(guò)于硬核,對(duì)于只有兩天工作時(shí)間就需要完成的項(xiàng)目來(lái)說(shuō),可能性太?。换蛘哒f(shuō),如果希望實(shí)現(xiàn) Demo ,所需 Hack 的點(diǎn)過(guò)多。而 GEO 全文檢索在融云現(xiàn)有的生產(chǎn)上,以及現(xiàn)有的系統(tǒng)中,也并沒(méi)有需要去填補(bǔ)的大坑,因此,也就沒(méi)有什么必要去在這方面花費(fèi)力氣去解決一個(gè)并不存在的問(wèn)題。
由于 IM 服務(wù)是一種計(jì)算密集型的服務(wù),且服務(wù)質(zhì)量是融云的核心競(jìng)爭(zhēng)力;而目前存儲(chǔ)資源呈現(xiàn)出零散分布的節(jié)點(diǎn),且每個(gè)節(jié)點(diǎn)的存儲(chǔ)資源使用率并不高,為了大化利用現(xiàn)有的閑置資源,融云最終設(shè)計(jì)并實(shí)現(xiàn)了這套 TiPrometheus 系統(tǒng)。
Result
打通了 TiKV 與 Prometheus ,為基于 K , V 存儲(chǔ)的時(shí)序數(shù)據(jù)庫(kù)設(shè)計(jì)提供了一個(gè)可行的思路。
為 Prometheus 的長(zhǎng)存儲(chǔ)提供了一套實(shí)用的解決方案。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。