十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
背景介紹:
為博望等地區(qū)用戶提供了全套網(wǎng)頁設(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ù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(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 是否稱職的非常重要的標(biāo)準(zhǔn)。
單純離散的指標(biāo)本身是沒有實(shí)際意義的,只有將離散的指標(biāo)通過某種方式進(jìn)行存儲(chǔ),并支持對(duì)終端用戶友好的查詢以及聚合,才會(huì)真正的有意義。因此,一個(gè)性能足夠的,分布式的,用戶友好且方便下面 DevOps 團(tuán)隊(duì)進(jìn)行部署的 TSDB ( Time Series Database )就成了一個(gè)不可缺少的系統(tǒng)。
常見的 TSDB 包括 InfluxDB , OpenTSDB , Prometheus 等,其中,開源版本的 InfluxDB 雖然優(yōu)秀,但并不支持集群部署,且 TICK Stack 本身對(duì)數(shù)據(jù)清洗的靈活性支持并不太好,直接使用開源版本,會(huì)有統(tǒng)計(jì)信息被收集并上報(bào);而 OpenTSDB 由于基于 HBase ,在部署時(shí)成本過高,且本身并不是一套完整的監(jiān)控系統(tǒng),而基于 Prometheus 與 TiKV 進(jìn)行開發(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 ,用到了上圖中沒有體現(xiàn)到的一個(gè) Prometheus 的功能:Remote Storage ,如其名所示,其主要功能是給 Prometheus 提供了遠(yuǎn)程寫的能力,這個(gè)功能對(duì)于查詢是透明的,主要用于長(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é)合,可以查詢到需要的 Value 。
為了查詢這些記錄,需要構(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è)梳理:

寫入過程
生成 labelID
構(gòu)建 time index,index:timeseries:
寫入時(shí)序數(shù)據(jù) timeseries:doc:
查詢過程
根據(jù)倒排索引查出 labelID 的集合,多對(duì) Label 的查詢會(huì)對(duì) labelID 集合求交集。
根據(jù) labelID 和時(shí)間范圍內(nèi)的時(shí)間分片查詢包含的 Timestamp 。
Why TiPrometheus
該項(xiàng)目最初源于參加 PingCAP 組織的 Hackathon ,當(dāng)時(shí)希望與參與者一起完成大家腦海里的想法,其實(shí)最重要的事情就是,做出來的東西并不是為了單純的 Demo ,而是要做一個(gè)在實(shí)際工作中應(yīng)用于生產(chǎn)環(huán)境的實(shí)際能力,且能解決生產(chǎn)中的問題。
剛開始還有過各種奇思妙想,包括在 TiSpark 上做一套 ML ,Hadoop over TiKV 等,不過這些想法實(shí)現(xiàn)起來都有些過于硬核,對(duì)于只有兩天工作時(shí)間就需要完成的項(xiàng)目來說,可能性太??;或者說,如果希望實(shí)現(xiàn) Demo ,所需 Hack 的點(diǎn)過多。而 GEO 全文檢索在融云現(xiàn)有的生產(chǎn)上,以及現(xiàn)有的系統(tǒng)中,也并沒有需要去填補(bǔ)的大坑,因此,也就沒有什么必要去在這方面花費(fèi)力氣去解決一個(gè)并不存在的問題。
由于 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ù)庫設(shè)計(jì)提供了一個(gè)可行的思路。
為 Prometheus 的長(zhǎng)存儲(chǔ)提供了一套實(shí)用的解決方案。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。