- InfluxDB原理與實戰
- 韓健
- 2字
- 2020-04-30 17:41:07
前言
為何寫作本書
從2016年起,筆者在騰訊公司負責QQ后臺的海量服務分布式組件的架構設計和研發工作,如微服務開發框架、名字路由、名字服務、配置中心等,做了大量分布式架構、高性能架構、海量服務、過載保護、柔性可用、負載均衡、容災、水平擴展等方面的工作,以公共組件的形式支撐來自QQ后臺和其他BG海量服務的海量流量。2018年年底,筆者負責監控大數據平臺的研發工作,致力于減少現有監控后臺成本,以及支撐內部和外部海量監控數據的需求,打造千億級監控大數據平臺。
筆者發現,當前監控技術領域缺乏優秀的監控系統,尤其是在海量監控數據場景中,很多團隊常用的做法是堆服務器和堆開源軟件,比如大量采用高配置的服務器,單機近百CPU核數、TB內存、數十TB的SSD存儲,安裝了大量開源軟件,如Elasticsearch、Druid、Storm、Kafka、Hbase、Flink、OpenTSDB、Atlas、MongoDB等,但實際效果并不理想,眾多開源軟件的組合是在增加了系統的運營成本和數據的處理延遲的情況下解決接入計算,在海量標簽和時間序列線情況下,常出現查詢超時、數據拉不出來等問題,且成本高昂。
筆者認為,海量或千億級是整體的量,是個籠統的概念,可以分而治之,通過分集群的方法來解決,海量監控數據的真正挑戰在于以下幾點:
?能否做到實時。實時是種質變的能力,可將一個離線監控平臺提升為一個實時決策系統。難點在于能否設計實現高性能的架構,以及能否實現水平擴展等。
?分集群后,單個業務的流量大小、標簽集多少是關鍵。流量大,相對容易解決,主要涉及系統性能和水平擴展等。標簽集多,海量標簽,海量時間序列線,如何做查詢優化是挑戰,如筆者遇到的一些業務上報的監控數據,有幾十個維度的標簽,并將QQ號和URL作為標簽值,有非常海量的時間序列線。
?針對監控數據多寫少讀、成本敏感的特點,如何設計高效的存儲引擎?既能充分發揮硬件性能,又能在高效壓縮存儲的同時保障查詢效率。
為了更好地打造有競爭力的監控系統,我們將技術理念定位為“技術降成本,堅決反對開源軟件堆砌”。首先,我們認為云計算是基建,決定它能否成功的關鍵在于能否在基礎技術上突破,打造出相比開源軟件更有成本優勢的云原生軟件;其次,雖然現在開源軟件非常繁榮,基于開源軟件,我們很容易搭建一個基礎系統,將功能跑起來,但絕大部分開源軟件側重的是功能,而不是針對海量監控數據的場景進行設計,或多或少都有其局限性,且成本也非常高昂。因此我們要做的是借助強大的技術和工程能力,直面問題,在架構和源碼層面解決它,而不是引入和堆砌更多的開源軟件。
出于工程效率的考慮,我們選擇基于開源軟件進行二次開發,使用開源軟件的部分代碼,按照我們的想法進行架構設計和功能開發。在對眾多的開源軟件進行調研分析后,我們最終選擇了以InfluxDB源碼為基礎進行二次開發。之所以選擇InfluxDB源碼,主要是因為我們對InfluxDB源碼背后的技術和工程實力比較認可。InfluxDB研發團隊能真正解決海量監控數據場景的問題,也是在認真地打造一款優秀的監控產品(出于讀寫性能和可用性的考慮,InfluxDB研發團隊曾2次重構存儲引擎)。
在筆者著手以InfluxDB源碼為基礎開發集群等功能時,業界還沒有團隊實現了真正可用的InfluxDB集群能力。一些團隊只是通過Proxy實現了負載均衡,卻無法突破單機接入計算和存儲的限制,缺乏一致性能力。有些團隊在對InfluxDB進行了多年的學習和研究后,最終考慮到基于時序分片的復雜度而放棄了基于InfluxDB開發集群能力,轉而選擇基于RocksDB、Zookeeper等開源軟件進行自建。
筆者在3個月內快速開發出了CP和AP架構分離、時序分片、水平擴展等基本集群能力,另外,根據業務的特點,在索引引擎、冷熱分離、查詢實現、第三方協議、高可用性、可運營性等方面也做了大量的工作。最終的效果也是符合預期的,如從替換現有監控系統后臺的實施對比來看,我們用了不到10%的機器成本就支撐起原監控后臺所支撐的海量監控數據,成本優勢突出。
InfluxDB是一款非常優秀的軟件,直接推動監控技術進入了實時、納秒級的新時代,除了類SQL查詢語言、RESTful API等現代特性外,還具有讀寫性能高、存儲壓縮率高、生態豐富、功能強大等特性。為了更好地推動監控技術的發展,幫助更多的讀者掌握構建實時監控系統的方法和分布式時序型數據庫的架構設計與開發技巧,筆者規劃了兩本書。
第一本就是本書,側重于InfluxDB的原理和實戰,致力于幫助讀者完全理解InfluxDB的功能原理并掌握實戰技巧。第二本正在籌劃中,側重于InfluxDB的設計實現剖析、分布式技術、InfluxDB集群能力開發實戰等。關于第二本書的更多信息和進展,敬請關注微信訂閱號“華章書院”。
最后,筆者衷心希望本書能幫助讀者更快地掌握InfluxDB的核心特性、功能原理和實戰技巧,幫助讀者打造更有競爭力的監控產品,賦能業務。
- 我們都是數據控:用大數據改變商業、生活和思維方式
- 數據浪潮
- 數據庫原理及應用教程(第4版)(微課版)
- 數據驅動:從方法到實踐
- The Game Jam Survival Guide
- INSTANT Apple iBooks How-to
- Construct 2 Game Development by Example
- Google Cloud Platform for Developers
- 改變未來的九大算法
- 中文版Access 2007實例與操作
- Web Services Testing with soapUI
- Expert Python Programming(Third Edition)
- 數據庫應用系統技術
- MySQL技術內幕:InnoDB存儲引擎
- 大數據技術體系詳解:原理、架構與實踐