官术网_书友最值得收藏!

1.1 什么是InfluxDB

1.1.1 簡介

在介紹InfluxDB之前,先來介紹下時(shí)序數(shù)據(jù)。按照時(shí)間順序記錄系統(tǒng)、設(shè)備狀態(tài)變化的數(shù)據(jù)被稱為時(shí)序數(shù)據(jù)(Time Series Data),如CPU利用率、某一時(shí)間的環(huán)境溫度等。時(shí)序數(shù)據(jù)以時(shí)間作為主要的查詢緯度,通常會(huì)將連續(xù)的多個(gè)時(shí)序數(shù)據(jù)繪制成線,制作基于時(shí)間的多緯度報(bào)表,用于揭示數(shù)據(jù)背后的趨勢(shì)、規(guī)律、異常,進(jìn)行實(shí)時(shí)在線預(yù)測(cè)和預(yù)警,時(shí)序數(shù)據(jù)普遍存在于IT基礎(chǔ)設(shè)施、運(yùn)維監(jiān)控系統(tǒng)和物聯(lián)網(wǎng)中。時(shí)序數(shù)據(jù)主要有如下3個(gè)特點(diǎn):

?抵達(dá)的數(shù)據(jù)幾乎總是作為新條目被記錄,無更新操作。

?數(shù)據(jù)通常按照時(shí)間順序抵達(dá)。

?時(shí)間是一個(gè)主坐標(biāo)軸。

時(shí)序型數(shù)據(jù)庫是存放時(shí)序數(shù)據(jù)的專用型數(shù)據(jù)庫,并且支持時(shí)序數(shù)據(jù)的快速寫入、持久化、多緯度的實(shí)時(shí)聚合運(yùn)算等功能。傳統(tǒng)數(shù)據(jù)庫通常記錄數(shù)據(jù)的當(dāng)前值,時(shí)序型數(shù)據(jù)庫則記錄所有的歷史數(shù)據(jù),在處理當(dāng)前時(shí)序數(shù)據(jù)時(shí)又要不斷接收新的時(shí)序數(shù)據(jù),同時(shí)時(shí)序數(shù)據(jù)的查詢也總是以時(shí)間為基礎(chǔ)查詢條件,并專注于解決以下海量數(shù)據(jù)場景的問題:

?時(shí)序數(shù)據(jù)的寫入:如何支持千萬級(jí)/秒數(shù)據(jù)的寫入。

?時(shí)序數(shù)據(jù)的讀取:如何支持千萬級(jí)/秒數(shù)據(jù)的聚合和查詢。

?成本敏感:海量數(shù)據(jù)存儲(chǔ)帶來的是成本問題,如何更低成本地存儲(chǔ)這些數(shù)據(jù),是時(shí)序型數(shù)據(jù)庫需要解決的關(guān)鍵問題。

InfluxDB是一個(gè)由InfluxData公司開發(fā)的開源時(shí)序型數(shù)據(jù)庫,專注于海量時(shí)序數(shù)據(jù)的高性能讀、高性能寫、高效存儲(chǔ)與實(shí)時(shí)分析,在DB-Engines Ranking時(shí)序型數(shù)據(jù)庫排行榜上位列榜首,廣泛應(yīng)用于DevOps監(jiān)控、IoT監(jiān)控、實(shí)時(shí)分析等場景。具體的DB-Engines Ranking時(shí)序型數(shù)據(jù)庫的排行榜(源自2019年5月的DB-Engines Ranking數(shù)據(jù))如圖1-1所示。

圖1-1 時(shí)序型數(shù)據(jù)庫DB-Engines Ranking排名

InfluxDB部署簡單、使用方便,在技術(shù)實(shí)現(xiàn)上充分利用了Go語言的特性,無須任何外部依賴即可獨(dú)立部署;提供類似于SQL的查詢語言,接口友好,使用方便;擁有豐富的聚合運(yùn)算和采樣能力;提供靈活的數(shù)據(jù)保留策略(Retention Policy)來設(shè)置數(shù)據(jù)的保留時(shí)間和副本數(shù);在保障數(shù)據(jù)可靠性的同時(shí),及時(shí)刪除過期數(shù)據(jù),釋放存儲(chǔ)空間;提供靈活的連續(xù)查詢(Continuous Query)來實(shí)現(xiàn)對(duì)海量數(shù)據(jù)的采樣。支持多種通信協(xié)議,除了HTTP、UDP等原生協(xié)議,還兼容CollectD、Graphite、OpenTSDB、Prometheus等組件的通信協(xié)議。

講到InfluxDB,就不能不提InfluxData的開源高性能時(shí)序中臺(tái)TICK(Telegraf +InfluxDB + Chronograf + Kapacitor), InfluxDB是作為TICK的存儲(chǔ)系統(tǒng)進(jìn)行設(shè)計(jì)和開發(fā)的。TICK專注于DevOps監(jiān)控、IoT監(jiān)控、實(shí)時(shí)分析等應(yīng)用場景,是一個(gè)集成了采集、存儲(chǔ)、分析、可視化等能力的開源時(shí)序中臺(tái),由Telegraf、 InfluxDB、Chronograf、Kapacitor 4個(gè)組件以一種靈活松散但緊密配合、互為補(bǔ)充的方式構(gòu)成,各個(gè)模塊相互配合、互為補(bǔ)充,整體系統(tǒng)架構(gòu)如圖1-2所示。

圖1-2 TICK系統(tǒng)架構(gòu)

Telegraf是用于采集和上報(bào)指標(biāo)的數(shù)據(jù)采集程序,采用靈活的、可配置的插件實(shí)現(xiàn)。Telegraf可以通過配置文件的配置,采集當(dāng)前運(yùn)行主機(jī)的指定指標(biāo),如CPU負(fù)載、內(nèi)存使用等,也可以從第三方消費(fèi)者服務(wù)(如StatsD、Kafka等)拉取數(shù)據(jù),上報(bào)到已支持的多種存儲(chǔ)系統(tǒng)、服務(wù)或消息隊(duì)列,如InfluxDB、Graphite、OpenTSDB、Datadog、Librato、Kafka、MQTT、NSQ等。

InfluxDB是專注于時(shí)序數(shù)據(jù)場景(如DevOps監(jiān)控、IoT監(jiān)控、實(shí)時(shí)分析等)的高性能時(shí)序型數(shù)據(jù)庫,支持靈活的自定義保留策略和類SQL的操作接口。

Chronograf是可視化的、BS架構(gòu)的管理系統(tǒng),可用于配置和管理接收到的監(jiān)控?cái)?shù)據(jù)、告警,并支持通過靈活強(qiáng)大的模塊和庫,快速配置數(shù)據(jù)可視化儀表盤、告警規(guī)則、可視化規(guī)則。

Kapacitor是從零構(gòu)建的原生數(shù)據(jù)處理引擎,支持流式處理和批量處理,支持靈活強(qiáng)大的自定義功能,如定義新的告警閾值、告警指標(biāo)特征、告警統(tǒng)計(jì)異常特征等,以及后續(xù)的告警處理行為。除了靈活,Kapacitor也很開放,能靈活地集成對(duì)接第三系統(tǒng),如HipChat、OpsGenie、Alerta、Sensu、PagerDuty、Slack等。

1.1.2 歷史和發(fā)展

2013年下半年,Errplane的創(chuàng)始人Paul Dix和Todd Persen以開源項(xiàng)目的形式開始了InfluxDB的開發(fā),其目標(biāo)是提供一個(gè)高性能的監(jiān)控及告警的解決方案。2014年11月,Errplane獲得了由梅菲爾德風(fēng)險(xiǎn)投資公司與Trinity Ventures領(lǐng)投的810萬美元的A輪投資。2015年,Errplane正式更名為InfluxData Inc.,更名后又分別于2016年9月和2018年2月獲得了金額分別高達(dá)1600萬美元和3500萬美元的B輪、C輪投資。

2016年3月,在向InfluxDB開源社區(qū)貢獻(xiàn)了一個(gè)名為InfluxDB-Relay的高可用套件后,InfluxData宣布閉源仍在開發(fā)中的InfluxDB集群功能,水平擴(kuò)展等集群功能將包含在商業(yè)產(chǎn)品(InfluxDB企業(yè)版和InfluxDB Cloud)中單獨(dú)銷售,目的是為InfluxDB的持續(xù)開發(fā)建立一個(gè)穩(wěn)定的收入來源。

1.1.3 使用場景

InfluxDB是一個(gè)專注于時(shí)序數(shù)據(jù)場景的時(shí)序型數(shù)據(jù)庫,適用于各種時(shí)序數(shù)據(jù)場景,如服務(wù)器指標(biāo)、應(yīng)用程序性能指標(biāo)、函數(shù)接口調(diào)用指標(biāo)、網(wǎng)絡(luò)流量數(shù)據(jù)、探測(cè)器數(shù)據(jù)、日志、市場交易記錄等,在本節(jié)中將以DevOps監(jiān)控、IoT監(jiān)控為例詳細(xì)介紹InfluxDB的使用場景。

DevOps監(jiān)控,通過監(jiān)控基礎(chǔ)設(shè)施(如服務(wù)器、容器、數(shù)據(jù)庫、微服務(wù)、云服務(wù)等)的核心指標(biāo)來及時(shí)發(fā)現(xiàn)問題并在影響關(guān)鍵業(yè)務(wù)之前解決問題。盡管新興技術(shù),如微服務(wù)、容器、網(wǎng)絡(luò)存儲(chǔ)、軟件自定義網(wǎng)絡(luò)、混合云等,提升了基礎(chǔ)設(shè)施的DevOps監(jiān)控的復(fù)雜性,但I(xiàn)nfluxDB都能很好地適應(yīng)。InfluxDB通過靈活的Telegraf插件的形式,采集系統(tǒng)指標(biāo)或從第三方服務(wù)(如StatsD、Kafka等)拉取數(shù)據(jù),并通過自定義配置按需上報(bào)給外部存儲(chǔ)系統(tǒng),如InfluxDB、Graphite、OpenTSDB、Datadog、Librato、Kafka、MQTT、NSQ等,然后實(shí)時(shí)分析和執(zhí)行預(yù)定義操作,在影響核心業(yè)務(wù)運(yùn)行前,發(fā)現(xiàn)并解決問題。典型客戶(如Coupa)就采用InfluxDB作為DevOps監(jiān)控的時(shí)序存儲(chǔ)和分析的后臺(tái)。

IoT監(jiān)控,用于接收和處理來自IoT設(shè)備的海量數(shù)據(jù),并進(jìn)行實(shí)時(shí)分析,在無人工干預(yù)的情況下,執(zhí)行預(yù)定義操作。IoT設(shè)備無處不在,公路攝像頭、智能網(wǎng)聯(lián)車、智能衣服、手機(jī)、微波爐、冰箱等都有它的身影。不過由于IoT設(shè)備的硬件性能及緩存能力有限,數(shù)據(jù)往往是以流式的方式實(shí)時(shí)上報(bào),所以需要一個(gè)彈性、擴(kuò)展性強(qiáng)的高性能時(shí)序后臺(tái)來應(yīng)對(duì)突發(fā)流量的挑戰(zhàn)。InfluxDB的水平擴(kuò)展、實(shí)時(shí)分析等能力,是專門針對(duì)這類場景設(shè)計(jì)的。它具有足夠的讀寫性能和容量彈性,在突發(fā)流量下,可以穩(wěn)定地接收數(shù)據(jù),并進(jìn)行實(shí)時(shí)分析,快速?zèng)Q策。典型用戶(如tado°)使用InfluxDB云PaaS,接收和分析采集到的海量時(shí)序數(shù)據(jù),幫助用戶理解節(jié)省能源的方法并節(jié)省能源使用。

1.1.4 社區(qū)和生態(tài)

前文提到,InfluxDB是一個(gè)開源時(shí)序型數(shù)據(jù)庫,是開源時(shí)序中臺(tái)TICK的組成部分,基于持續(xù)開發(fā)和建立一個(gè)穩(wěn)定收入來源的考慮,InfluxData還推出了具備水平擴(kuò)展集群能力、強(qiáng)大可運(yùn)營性的商業(yè)化產(chǎn)品——InfluxDB企業(yè)版和InfluxDB Cloud。

InfluxDB是由開源社區(qū)驅(qū)動(dòng)的單機(jī)版時(shí)序型數(shù)據(jù)庫,專注于時(shí)序存儲(chǔ)和實(shí)時(shí)分析,當(dāng)前穩(wěn)定版本為v1.7.8,集群能力在v0.11.1版之后閉源,InfluxData推出了一個(gè)開源版負(fù)載均衡工具——InfluxDB-Relay,提供基本可用性。InfluxDB和InfluxDB-Relay源碼地址如代碼清單1-1所示。

代碼清單1-1 InfluxDB和InfluxDB-Relay源碼地址

        InfluxDB GitHub:https://github.com/influxdata/influxdb
        InfluxDB-Relay GitHub:https://github.com/influxdata/influxdb-relay

注意

本書將以InfluxDB-v1.7.8版本為例介紹InfluxDB的功能和用法,默認(rèn)使用的是開源版,當(dāng)涉及集群等企業(yè)版才有的功能時(shí),將以InfluxDB-v1.7.8企業(yè)版為例進(jìn)行介紹和講解。

TICK是一個(gè)集成了采集、存儲(chǔ)、分析、可視化等能力的開源時(shí)序型中臺(tái),由Telegraf實(shí)現(xiàn)采集功能、InfluxDB實(shí)現(xiàn)時(shí)序存儲(chǔ)和分析功能、Chronograf實(shí)現(xiàn)可視化功能、Kapacitor實(shí)現(xiàn)實(shí)時(shí)流式處理功能,是一個(gè)完善的時(shí)序數(shù)據(jù)解決方案。TICK組件源碼地址如代碼清單1-2所示。

代碼清單1-2 TICK組件的源碼地址

        Telegraf GitHub:https://github.com/influxdata/telegraf
        InfluxDB GitHub:https://github.com/influxdata/influxdb
        Chronograf GitHub:https://github.com/influxdata/chronograf
        Kapacitor GitHub:https://github.com/influxdata/kapacitor

InfluxDB企業(yè)版和InfluxDB Cloud是InfluxData推出的商業(yè)產(chǎn)品,該產(chǎn)品強(qiáng)化了集群能力、安全性、可運(yùn)營性等功能,是一款支持水平擴(kuò)展、具有強(qiáng)大可運(yùn)營性、支持私有化部署等的商業(yè)產(chǎn)品,可部署于客戶自定義的IaaS上。InfluxDB Cloud是一個(gè)支持水平擴(kuò)展集群能力、自動(dòng)備份和恢復(fù)、包含TICK和Grafana等的云端PaaS。

建議

如果相關(guān)時(shí)序數(shù)據(jù)和分析結(jié)果不敏感,推薦使用InfluxDB Cloud版本。

主站蜘蛛池模板: 郑州市| 永修县| 凌源市| 辽中县| 宁南县| 济阳县| 太白县| 太和县| 安阳县| 景泰县| 宝山区| 丹棱县| 沙河市| 平远县| 庆阳市| 平定县| 嵊州市| 沈阳市| 嘉定区| 凤阳县| 景宁| 乌鲁木齐县| 清丰县| 海伦市| 潞城市| 彝良县| 南充市| 青岛市| 吴忠市| 兴文县| 木兰县| 彩票| 潢川县| 沙田区| 庆阳市| 法库县| 双牌县| 手机| 商城县| 县级市| 泌阳县|