一级毛片福利影院_国产一区二区三区高清av_亚洲网友拍到精美视频_黄色网站在线看精品

時(shí)序數(shù)據(jù)庫(kù)進(jìn)入云原生時(shí)代,濤思數(shù)據(jù)創(chuàng)始人陶建輝詳解TDengine3.0

        【每日科技網(wǎng)】

  在 8 月 13 日的 TDengine 開(kāi)發(fā)者大會(huì)上,濤思數(shù)據(jù)創(chuàng)始人陶建輝進(jìn)行了題為《高性能、云原生的極簡(jiǎn)時(shí)序數(shù)據(jù)處理平臺(tái)》的主題演講。在本次演講中,他不僅分享了時(shí)序數(shù)據(jù)庫(kù)現(xiàn)階段的技術(shù)痛點(diǎn),還深入闡釋了打造 TDengine3.0 的原因以及實(shí)踐思路。本文根據(jù)演講內(nèi)容整理而成。

  在 2017 年剛開(kāi)始做時(shí)序數(shù)據(jù)庫(kù)(Time-Series Database,TSDB)時(shí),學(xué)物理的我想當(dāng)然地認(rèn)為做好數(shù)據(jù)庫(kù)沒(méi)有大家說(shuō)的那么難,但做了 5 年后才發(fā)現(xiàn),這真的不是一件很容易的事。下面我具體說(shuō)說(shuō)難在哪里:

  水平擴(kuò)展性(Scalability)問(wèn)題。 在 TDengine 剛開(kāi)發(fā)沒(méi)多久時(shí),我用一臺(tái) 128 核的機(jī)器對(duì) TDengine 進(jìn)行了測(cè)試,結(jié)果性能遠(yuǎn)遠(yuǎn)沒(méi)有達(dá)到預(yù)期,這件事情也讓我清楚地意識(shí)到,理想的水平擴(kuò)展能力很難實(shí)現(xiàn)。

  沒(méi)有真正的云原生化。 我個(gè)人特別堅(jiān)信云是未來(lái),數(shù)據(jù)庫(kù)也一定要走向云原生(Cloud Native),但在深度研究市面上的數(shù)據(jù)庫(kù)產(chǎn)品后,我發(fā)現(xiàn)大部分?jǐn)?shù)據(jù)庫(kù)都不是云原生,而僅僅是“云就緒”(Cloud Ready),即數(shù)據(jù)庫(kù)服務(wù)提供商在轉(zhuǎn)售云平臺(tái)。真正的云原生數(shù)據(jù)庫(kù)應(yīng)該具備存算分離、計(jì)算和存儲(chǔ)能力彈性擴(kuò)張、能夠在云上部署、自動(dòng)化部署等特點(diǎn)。

  復(fù)雜性(Complex)問(wèn)題。 2016 年我看到很多人在處理一些簡(jiǎn)單的時(shí)序數(shù)據(jù)時(shí),要把整個(gè) Hadoop 系統(tǒng)搬過(guò)來(lái),要加 HBase 層,還要把 Flink、Spark 等等全部加上,這對(duì)于研發(fā)人員來(lái)講就是個(gè)災(zāi)難。但時(shí)至今日,這個(gè)復(fù)雜性也并沒(méi)有隨著時(shí)序數(shù)據(jù)庫(kù)的發(fā)展得到充分的解決,只有打造一個(gè)集 Kafka、Flink、Spark、Redis 等第三方工具功能于一體的極簡(jiǎn)時(shí)序數(shù)據(jù)處理平臺(tái),這一問(wèn)題才有望充分解決。

  數(shù)據(jù)分析能力跟不上。 諸如 InfluxDB、Prometheus 等較為流行的 Time-Series Database,由于不支持 SQL,導(dǎo)致很多正常的數(shù)據(jù)服務(wù)、數(shù)據(jù)倉(cāng)庫(kù)的分析方法都用不上。結(jié)合我過(guò)往不斷跨界的經(jīng)驗(yàn),我發(fā)現(xiàn)了這個(gè)問(wèn)題,所以 TDengine 早就支持了 SQL,不過(guò)仍然需要優(yōu)化和加強(qiáng)。

  發(fā)現(xiàn)并解決上述的問(wèn)題,便是我們打造 TDengine 3.0 的初衷。從去年 6 月開(kāi)始,在 40 多個(gè)研發(fā)一年多的努力下,TDengine 3.0 終于在今天正式和大家見(jiàn)面了。

  下面我們就一起看看 TDengine 3.0 是什么樣子的。

  云原生時(shí)序數(shù)據(jù)庫(kù)

  水平擴(kuò)展

1.jpg

  TDengine 的新分布式架構(gòu)

  打造云原生時(shí)序數(shù)據(jù)庫(kù),第一個(gè)要素就是必須是分布式架構(gòu)。其實(shí) TDengine 以前也是分布式架構(gòu),但為了實(shí)現(xiàn)云原生的種種特性,我們?cè)诖思軜?gòu)基礎(chǔ)上引入了一個(gè)新的節(jié)點(diǎn)——計(jì)算節(jié)點(diǎn) Qnode。

2.jpg

  那通過(guò)云原生如何解決可擴(kuò)展性問(wèn)題?還是通過(guò)分片分區(qū)來(lái)解決,數(shù)據(jù)切分的方法我們沒(méi)有做太多改動(dòng),TDengine 一開(kāi)始就是這么做的,在時(shí)間軸上以天或周為單位對(duì)數(shù)據(jù)進(jìn)行切分,同時(shí)將定量設(shè)備的數(shù)據(jù)分配給每個(gè)區(qū)(Vnode)進(jìn)行處理。

  跟 2.x 相比,3.0 的不同就是元數(shù)據(jù)的管理也變成了完全分布式的。 這也是我在此前版本中吸取了一個(gè)教訓(xùn)而做出的改變,最開(kāi)始我沒(méi)想到元數(shù)據(jù)的管理如此之難。

  有一次我們和涂鴉聊合作,他們要測(cè)五千萬(wàn)個(gè)設(shè)備的數(shù)據(jù),TDengine 2.0 在測(cè)試中就出現(xiàn)了高基數(shù)問(wèn)題。在 2.x 的設(shè)計(jì)中,我們的元數(shù)據(jù)統(tǒng)一存放在 mnode 中,這在此次測(cè)試中就成為了一個(gè)瓶頸——在進(jìn)行聚合操作時(shí),光是把五千萬(wàn)個(gè)設(shè)備中的標(biāo)簽數(shù)據(jù)拉出來(lái)就需要很長(zhǎng)時(shí)間,聚合速度可想而知。也因此,高基數(shù)成為了我們?cè)?3.0 版本中解決的首要問(wèn)題。

  現(xiàn)在的 TDengine 管理節(jié)點(diǎn)不再存儲(chǔ)每個(gè)設(shè)備或每張表的元數(shù)據(jù)了,而是把這些元數(shù)據(jù)還有時(shí)序數(shù)據(jù)完全存儲(chǔ)在 vnode 里,之后會(huì)用 B+ 樹(shù)、一次性哈希來(lái)處理。這樣一來(lái),我們?cè)诓迦胍粋(gè)數(shù)據(jù)到任何一個(gè)片或者一個(gè)區(qū)時(shí)都不再需要經(jīng)過(guò)任何中間節(jié)點(diǎn),徹底解決了高基數(shù)的問(wèn)題。

  經(jīng)過(guò)測(cè)試,TDengine 3.0 完全能夠支持 10 億個(gè)設(shè)備、100 臺(tái)服務(wù)器節(jié)點(diǎn) ,同時(shí)整個(gè)啟動(dòng)時(shí)間也很快,不到一分鐘整個(gè)集群就能啟動(dòng)。盡管此前的 2.6 也能支持五千萬(wàn)的設(shè)備數(shù),但啟動(dòng)時(shí)間就大概要三四十分鐘,設(shè)備數(shù)量多的時(shí)候不太給力。

  中國(guó)智能電表至少要有十億臺(tái),給十億臺(tái)電表做聚合操作可以說(shuō)相當(dāng)不容易,解決高基數(shù)問(wèn)題是很重要的,TDengine 發(fā)展到 3.0 版本才算是真正把這個(gè)問(wèn)題解決了。

  彈性

3.jpg

  云原生里面一個(gè)很重要的東西就是彈性,它跟水平擴(kuò)展的彈性還略有不同,首先一定要把計(jì)算和存儲(chǔ)分離,我上面說(shuō) 3.0 新增了一個(gè)計(jì)算節(jié)點(diǎn) Qnode,它是專門(mén)用來(lái)做計(jì)算的,但簡(jiǎn)單查詢 Vnode 就可以直接操作了,如果牽扯到 group by、 order by 等復(fù)雜查詢,就需要在 Qnode 上進(jìn)行了。

  Qnode 的優(yōu)點(diǎn)就是操作者可以動(dòng)態(tài)地啟動(dòng)、停止 ,也就是說(shuō)它的計(jì)算資源可以動(dòng)態(tài)地進(jìn)行操控,這樣就實(shí)現(xiàn)了存算分離。同時(shí) Vnode 也可以進(jìn)行拆分或合并,保證存儲(chǔ)也可以彈性伸縮。

  如果系統(tǒng)不能做到真正的彈性伸縮,就一定不是云原生的,很多企業(yè)打著云原生的幌子,但實(shí)際上連云原生是什么都說(shuō)不清楚。在我看來(lái),云原生就是要充分利用云平臺(tái)的優(yōu)勢(shì),即計(jì)算資源、存儲(chǔ)資源、網(wǎng)絡(luò)資源,且要完全彈性,你想要就馬上給你,不想要就馬上釋放,這樣才能真正實(shí)現(xiàn)成本的節(jié)約。

  韌性

  云原生里還有一個(gè)重要概念叫韌性,簡(jiǎn)單來(lái)講就是高可靠、高可用。 TDengine 在設(shè)計(jì)之初就考慮到了這一點(diǎn),其高可用就是用多個(gè)副本來(lái)實(shí)現(xiàn),但后面發(fā)現(xiàn)以前的同步算法還是存在漏洞,因此 3.0 就完全采用了標(biāo)準(zhǔn) RAFT 協(xié)議來(lái)實(shí)現(xiàn)數(shù)據(jù)復(fù)制,以此保證數(shù)據(jù)一致性。

  除了高可用,合格的韌性還要保證系統(tǒng)的高可靠,保證機(jī)器即使宕機(jī)了依然還能重啟,且還能繼續(xù)工作,數(shù)據(jù)也不會(huì)丟失。

  部署、維護(hù)

  我們以前都是建議用戶到 Kubernetes 上部署,但并沒(méi)有出詳細(xì)的自動(dòng)化流程,3.0 版本給出了詳細(xì)的 Kubernetes 部署文檔,只需修改兩個(gè)配置文件,馬上就能部署整個(gè)集群,極其簡(jiǎn)單。

  除了更加理解云原生,3.0 給我?guī)?lái)的另一個(gè)收獲就是對(duì)于可觀測(cè)性的理解,可觀測(cè)性其實(shí)遠(yuǎn)遠(yuǎn)不只是監(jiān)控,它包括了 logging、tracing、metrics,我們?cè)?3.0 上實(shí)現(xiàn)了整個(gè)架構(gòu),讓用戶對(duì) TDengine 所有集群的運(yùn)行狀態(tài)都能真正監(jiān)測(cè)到,讓系統(tǒng)維護(hù)變得更加簡(jiǎn)單。在維護(hù)上,還有關(guān)鍵一點(diǎn)就是要做到自動(dòng)化,一切都要腳本化,減少人工手動(dòng)操作的成本。

  極簡(jiǎn)的時(shí)序數(shù)據(jù)處理平臺(tái)

  在 TDengine 創(chuàng)建之初,打造一款極簡(jiǎn)的時(shí)序數(shù)據(jù)處理平臺(tái)就是我的初衷。要知道,一個(gè)通用的架構(gòu)往往是要先把采集數(shù)據(jù)送到 Kafka 或者各種消息隊(duì)列里,消費(fèi)之后一部分?jǐn)?shù)據(jù)再送到 Spark 或者 Flink 里做流計(jì)算處理,一部分?jǐn)?shù)據(jù)送到數(shù)據(jù)庫(kù)做直接存儲(chǔ),還有一部分則會(huì)傳輸?shù)?Redis 做緩存,這樣一個(gè)數(shù)據(jù)處理平臺(tái),里面要集成很多軟件,維護(hù)起來(lái)相當(dāng)困難。

  要打造一款極簡(jiǎn)的時(shí)序數(shù)據(jù)處理平臺(tái),首先要解決的問(wèn)題就是緩存,因?yàn)榫彺鎸?duì)于物聯(lián)網(wǎng)、車聯(lián)網(wǎng)來(lái)講都是極其關(guān)鍵的,TDengine 早就具備了緩存功能,這個(gè)也是很多用戶特別喜歡的功能,非常方便。

4.jpg

  TDengine 的數(shù)據(jù)訂閱實(shí)現(xiàn)機(jī)制

  對(duì)于 TDengine 3.0 來(lái)說(shuō),還有一個(gè)很大的改進(jìn)是重構(gòu)并優(yōu)化了數(shù)據(jù)訂閱功能。 TDengine 是用 WAL 來(lái)做的訂閱,技術(shù)人員應(yīng)該都知道,WAL 本身就可以看作一個(gè)隊(duì)列,完全按照數(shù)據(jù)到達(dá)順序來(lái)追加寫(xiě)入。在 TDengine 3.0 中,既可以訂閱一個(gè)數(shù)據(jù)庫(kù),也可以訂閱一個(gè)自帶標(biāo)簽的“超級(jí)表”,直接實(shí)現(xiàn)過(guò)濾,比如只想訂閱功率超過(guò)多少的智能電表數(shù)據(jù),直接就能實(shí)現(xiàn)。訂閱完成后無(wú)需再拿到應(yīng)用端去過(guò)濾,極大提升了數(shù)據(jù)傳輸?shù)男省?/p>

  我們做產(chǎn)品的目的就是要讓大家用起來(lái)簡(jiǎn)單,因此在做消息隊(duì)列功能時(shí),API 全部對(duì)標(biāo)的都是 Kafka,現(xiàn)在不光是初始化和每條命令,連測(cè)試都完全一樣。以前經(jīng)常有友商會(huì)對(duì)標(biāo) TDengine,提出性能要超出 TDengine 一百倍之類的觀點(diǎn),但標(biāo)準(zhǔn)就是自己定義的,甚至都沒(méi)有公開(kāi)。但我們只采用國(guó)際通用的測(cè)試標(biāo)準(zhǔn)來(lái)測(cè),包括消息隊(duì)列,直接用 Kafka 公開(kāi)的 benchmark 進(jìn)行測(cè)試,我們認(rèn)為這樣才有說(shuō)服力,才是客觀的。歡迎大家體驗(yàn)。

  TDengine 3.0 還有一個(gè)很大的改進(jìn)就是繼續(xù)優(yōu)化了流計(jì)算功能。 之前 TDengine 就已經(jīng)支持一個(gè)連續(xù)查詢的流計(jì)算,這種周期性的查詢流計(jì)算還是很有用的,但是功能覆蓋卻還不夠。在 IoT 場(chǎng)景下做數(shù)據(jù)清洗、過(guò)濾時(shí),要做一些實(shí)時(shí)的觸發(fā),必須使用事件驅(qū)動(dòng)的流計(jì)算,經(jīng)過(guò)一年多的努力,TDengine 3.0 終于升級(jí)了這計(jì)算功能。

5.jpg

  全新優(yōu)化的流計(jì)算功能

  TDengine 3.0 所支持的流計(jì)算功能是非常典型的,如上面的架構(gòu)圖所示,數(shù)據(jù)源要先進(jìn)入 Input Queue,再進(jìn)入流計(jì)算的 Task,再輸出到另外一個(gè)列。而且流計(jì)算可以嵌套,一層一層形成一個(gè)數(shù)據(jù)的 pipeline。從方便用戶使用的角度出發(fā),TDengine 的流計(jì)算語(yǔ)法就是 SQL,里面做了 windows 等擴(kuò)展,可以在數(shù)據(jù)寫(xiě)入時(shí)觸發(fā),也可以在窗口結(jié)束觸發(fā)。

  此外, TDengine 3.0 對(duì) UDF 的支持也進(jìn)行了優(yōu)化。 3.0 對(duì) UDF 進(jìn)行了重新實(shí)現(xiàn),加上時(shí)間驅(qū)動(dòng)的流計(jì)算,我覺(jué)得至少在時(shí)序數(shù)據(jù)的場(chǎng)景下,TDengine 已經(jīng)能夠完全代替 Spark 和 Flink。

6.jpg

  極簡(jiǎn)的時(shí)序數(shù)據(jù)處理平臺(tái)

  但在此我需要再重申一下,我們優(yōu)化 TDengine 的緩存、消息隊(duì)列、流計(jì)算等功能,并不是想代替 Flink、Spark、Kafka 這類通用型的消息隊(duì)列軟件、流計(jì)算軟件,只是想簡(jiǎn)化這款基于時(shí)序數(shù)據(jù)場(chǎng)景做的數(shù)據(jù)庫(kù)軟件,更加便于大家使用,通過(guò)降低系統(tǒng)復(fù)雜度來(lái)真正降低運(yùn)維和存儲(chǔ)成本,這也是我們搭建極簡(jiǎn)時(shí)序數(shù)據(jù)處理平臺(tái)的原因。

  便捷的數(shù)據(jù)分析

7.jpg

  重新構(gòu)建查詢引擎

  TDengine 3.0 還有一個(gè)較大的改變就是重新設(shè)計(jì)了計(jì)算引擎 ,現(xiàn)在像 Planner、優(yōu)化器、執(zhí)行器等都具備了。對(duì)于數(shù)據(jù)來(lái)說(shuō),查詢是非常重要的,數(shù)據(jù)存儲(chǔ)好之后,用戶最重要的就是要從中挖掘數(shù)據(jù)價(jià)值,TDengine 對(duì) SQL 的支持已經(jīng)做的很好了。

  但是 SQL 這個(gè)概念也很復(fù)雜,我們不可能像 Oracle 一樣支持那么多詳細(xì)的復(fù)雜查詢,3.0 的查詢對(duì)標(biāo)的是 Hive,Hive 能做的所有的分析 TDengine 已經(jīng)都能做了。此外,TDengine 也有很多針對(duì)時(shí)序數(shù)據(jù)的特有函數(shù),比如說(shuō)移動(dòng)平均、時(shí)間加權(quán)平均等等。

  重構(gòu)查詢引擎的 TDengine 3.0 已經(jīng)成為了一個(gè)很好的查詢工具,再輔以下面的這些手段,足以讓查詢變得更有效:

  超級(jí)表適合做多維度分析

  計(jì)算與存儲(chǔ)分離

  數(shù)據(jù)分片、分區(qū)

  流處理

  歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)統(tǒng)一分析

  來(lái)自控制臺(tái)的臨時(shí)查詢

  Python Pandas,數(shù)據(jù)框支持

  Grafana,用于可視化的谷歌數(shù)據(jù)工作室

  TDengine 3.0 的最后一個(gè)更新功能叫作 taosX,它充分利用了 TDengine 的數(shù)據(jù)訂閱功能來(lái)解決增量備份、異地容災(zāi), 即把一個(gè)集群的數(shù)據(jù)復(fù)制到另外一個(gè)地方去,以實(shí)現(xiàn)邊云協(xié)同。眾所周知,邊云協(xié)同在物聯(lián)網(wǎng)里面很重要,如果說(shuō)工廠的數(shù)據(jù)想要同步到集團(tuán),就需要一個(gè)邊云的盒子一層接一層做同步,而這個(gè)需求,在 TDengine 中就靠 taosX 解決了。

  此外除了技術(shù)上的種種進(jìn)步外,今天我還要給大家同步一個(gè)好消息。為了方便工業(yè)場(chǎng)景下大量的 Windows 客戶,TDengine 3.0 的 Windows 版本也正式發(fā)布了,包括客戶端和服務(wù)器。 同時(shí),大概在 10 月 1 日,TDengine 的 Mac 版本也將正式對(duì)外發(fā)布,大家敬請(qǐng)期待。

8.jpg

  目前 TDengine 3.0 的代碼已經(jīng)在 GitHub 上公開(kāi),大家可以完全參照我們的 readme 文件來(lái)編譯,也可以到 TDengine 的官網(wǎng)去下載。如果你是一個(gè)開(kāi)發(fā)者,覺(jué)得 TDengine 這個(gè)項(xiàng)目有意思,可以選擇加入我們的開(kāi)發(fā)者社區(qū),學(xué)習(xí)源代碼,甚至是貢獻(xiàn)代碼。如果你是一個(gè)物聯(lián)網(wǎng)或者工業(yè)互聯(lián)網(wǎng)應(yīng)用的開(kāi)發(fā)者,那歡迎你把 TDengine 應(yīng)用起來(lái),你可以加入我們的用戶群,我們很樂(lè)意回答你的問(wèn)題。如果你是個(gè) DBA ,那歡迎你馬上下載,去體驗(yàn)我剛才講的各種功能。

  中國(guó)的開(kāi)源軟件特別需要大家的支持和使用,我經(jīng)常跟銷售團(tuán)隊(duì)起爭(zhēng)論,比如在決定哪些功能必須放在企業(yè)版時(shí),我就表示所有的核心功能都必須同步在開(kāi)源版本上,而絕不能只放在企業(yè)版里。為什么?因?yàn)橄胍龊瞄_(kāi)源就一定要給用戶帶來(lái)價(jià)值,我希望有越來(lái)越多的人能夠成為 TDengine 的布道者。

  結(jié)語(yǔ)

9.jpg

  我特別喜歡丘吉爾的這段名言,翻譯成中文就是“成功不是終點(diǎn),失敗不是終結(jié),唯有你繼續(xù)前行的勇氣最為關(guān)鍵”。從創(chuàng)建 TDengine 到現(xiàn)在,我們已經(jīng)走過(guò)了 5 個(gè)年頭,開(kāi)源也已經(jīng)走過(guò)了 3 年,在這個(gè)過(guò)程中取得了一些小小的成功,但是我們前面的路還很漫長(zhǎng),我已經(jīng)做好了再戰(zhàn) 5 年、10 年的準(zhǔn)備。希望我在七八十歲的時(shí)候還能繼續(xù)寫(xiě)代碼,和大家一起討論問(wèn)題,度過(guò)真正有價(jià)值的一生。

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與每日科技網(wǎng)無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。

本網(wǎng)站有部分內(nèi)容均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé),若因作品內(nèi)容、知識(shí)產(chǎn)權(quán)、版權(quán)和其他問(wèn)題,請(qǐng)及時(shí)提供相關(guān)證明等材料并與我們聯(lián)系,本網(wǎng)站將在規(guī)定時(shí)間內(nèi)給予刪除等相關(guān)處理.