上周六(8 月 13 日),濤思數據舉行了成立 5 年來的第一次 TDengine 開發者大會,近 400 名開發者和客戶來到了現場。大會主旨之一是發布 TDengine 3.0 版,而且我們將其核心代碼全部開源。37 萬行產品源代碼,23 萬行測試代碼,以及 181 份共 13.6 萬字的完整文檔,已經全部在 GitHub() 上公開,供全球開發者下載、查看并體驗。
TDengine 是一款時序數據庫(Time Series Database,TSDB),3.0 版本完全解決了困擾業界的高基數(High Cardinality)問題,能夠支持 10 億個設備采集的數據,集群規模可以超過 100 個節點。除超強的水平擴展能力之外,3.0 實現了存儲計算分離,計算資源與存儲資源可以彈性伸縮,采用 RAFT 協議實現數據的一致性來保證系統的高可用,讓 TDengine 成為真正的云原生數據庫。3.0 重構了計算引擎,更好的支持標準 SQL 查詢以及各種時序數據特有的查詢,讓時序數據的分析變得高效而且簡單。3.0 還優化和重構了緩存、消息隊列、流式計算的實現,讓 TDengine 成為一個真正的極簡時序數據處理平臺,大幅降低了系統設計的復雜度,降低了運營和維護成本。?

從我 2016 年底寫下第一行代碼,TDengine 已經走過了 5 年,版本從 1.0 到 2.0,到今天的 3.0。對于時序數據庫產品究竟要解決什么問題,我之前已經從技術層面寫過一篇博客來闡述:研發了5年的時序數據庫,到底要解決什么問題?作為一個從 1984 年就開始寫程序的持續創業者,我雖非常享受通過技術來實現創新的過程,哪怕一天 14 小時敲代碼也是樂此不疲,但三家公司的創業經歷也讓我深知,作為一個產品,最重要的是去挖掘并滿足“用戶需求”。
在企業類軟件、基礎軟件幾乎被歐美公司壟斷的情況下,中國的企業類軟件、基礎軟件能發展起來,并走向全球市場,是中國無數 IT 人的夢想。我想結合 TDengine 的發展歷程,分享一下我的想法。
1、中國企業類、基礎類軟件成長的怪圈
中國的企業軟件、基礎軟件的發展一直深陷一個怪圈。
以中美之間的軟件對比來作為例子。20 年前,中國的軟件都沒有美國做得好。但今天,相當多大眾類的軟件,中國都比美國做得好。比如,微信就比 WhatsApp、Facebook 這類軟件好用得多;企業辦公軟件飛書,就比 Confluence 用起來更舒服。為什么?不是微信、飛書團隊的程序員更聰明,能力更強,而主要是中國的用戶群大,而且競爭激烈,來自用戶端的需求在源源不斷地提出,逼迫這些產品快速地迭代升級。
反觀企業類軟件、基礎軟件,與歐美相比,中國依然相當落后。為什么?不是中國程序員不想做好或者能力不夠,而是由于開發出的企業類軟件,普通企業都沒有買單能力。有買單能力的大多是政府、國企和軍工,而這些單位往往一大堆定制化需求,最后企業類軟件公司都變成了做集成、做項目的公司,很難開發出全球使用的標準化產品,難以規模化。一年多前我們團隊上線用友財務系統,但沒想到做了 30 年財務軟件的公司,依然是 BUG 一堆,發票上傳就經常有問題。拋開研發管理的問題,我想不是用友研發不努力,核心原因還是與 SAP、Oracle 相比,他們用戶數不夠,迭代升級太慢。
我相信,中美程序員之間的技能并沒有太大差別,即使有差距,經過幾個有挑戰性的項目,也可以掌握,關鍵是要交給中國程序員真正的需求和問題,他們一定能學會,一定能解決。TDengine 創始團隊的四位程序員,除了廖博士,勝亮、洪澤和我自己都沒有研發數據庫的經驗,但 5 年下來,處理過太多太多的技術問題,在時序數據領域,在全球范圍都應該是絕對的專家了。
好的產品不是程序員在計算機面前想出來的,而是用戶用出來的,提出問題比解決問題更為重要。而只有拿到足夠數量、足夠場景的客戶需求,得到足夠的用戶使用反饋,才能真正地不斷打磨和迭代產品。支持 10 億設備的數據采集,看似很難,但仔細分析,是完全可以解決的。
因此,無法短期內獲取大量用戶和場景,已經成為企業類和基礎類軟件可以快速且在正確方向前進的最大障礙。但值得慶幸的是,我們找到了開源這個利器。?
2、開源打破怪圈,帶來巨變
2019 年 7 月 12 日我們宣布 TDengine 單機版開源,10 多萬行 C 語言代碼被上傳到 GitHub。沒想到,我們的開源迎來了開發者社區的熱烈歡迎,不到四個月的時間,GitHub 的 star 就達到一萬,多次在全球趨勢排行榜上排名第一,獲得無數的贊美。
但同時,也獲得很多專業的批評,有人仔細分析并測試我們代碼,認為多線程的處理有瑕疵,高并發大數據量的持續測試一定會撞到問題;有人認為模塊結構不清,耦合過重,難以增加新的功能;多維度的聚合分析在一些場景中并不高效;亂序數據的處理效率很低等等。而且還有人發現,我們沒有建立起標準的 CI/CD 流程,難以保證質量。
對于一個擁有開放心態的我而言,每每看到這些中肯的批評,我都是很開心,這說明產品還有努力的空間。因此 2019 年 12 月,TDengine 團隊正式啟動 2.0 的開發。包括我自己在內,8 位程序員日夜奮戰,力圖把大家發現的這些技術問題全部解決。
2020 年 8 月,TDengine 2.0 正式發布,同時開源了集群功能。全球開發者又一次把 TDengine 推向新的高度。贊美之外,迎來的又是被大家發現的不少問題:雖然亂序插入的效率問題已得到很好的解決,系統穩定性也大幅度提升,但是集群有時不工作;更有人仔細分析我公布的數據同步設計文檔,指出里面的設計漏洞;雖然支持 SQL,但支持不夠徹底,很多復雜查詢做不了;業內普遍存在的“High Cardinality”問題,TDengine 并沒有真正解決,雖然能處理五千萬臺設備的數據,但系統重啟的時間至少需要半個小時,無法忍受……
雖然 TDengine 2.0 的設計經過了很多次內部討論,但依然有些問題沒有考慮到。感謝開源社區的反饋,讓我們意識到產品還有可提升的空間。因此 2021 年 6 月我決定正式啟動 3.0 的開發,不僅要解決大家發現的問題,實現標準的 SQL,將數據庫、流式計算、緩存、消息隊列融為一體,實現真正可以實用的極簡時序數據處理平臺,而且還準備瞄準未來,設計出真正的云原生時序數據庫。
但經過 1.6、2.0 的發布,我頭腦清醒了不少,意識到僅靠幾個十倍程序員是不夠的,而且底層數據庫軟件的研發確實如大家所說,就是難,沒有那么簡單。因此這次我們組織了 40 人的全職研發團隊來研發 3.0 版本,測試研發組就有 8 人,開發各種連接器、周邊工具的也有 8 人。TDengine 第一個演示版本是我一個人兩個月時間開發出來的,1.6 是 4 個程序員的奮斗,2.0 是 8 個程序員的努力,3.0 則包含了40 個程序員夜以繼日的汗水。
從開源到現在,GitHub 上報告的 TDengine 的 issue 已經超過一萬。TDengine 用戶微信群近 20 個,每天都是很活躍,贊譽之外,同樣有各種問題和吐槽。如果沒有開源,很難讓用戶指出這些問題,或者這些問題要等到相當多用戶相當長時間使用后才會發現。可以說,開源幫我們找來了高質量的設計評審、代碼評審、系統測試,開源大大加速了我們產品的迭代和升級。
沒有開源,TDengine 不可能在短短的三年,就有 13.9 萬的安裝實例。沒有開源,我們不可能在歐洲、美國、日本、韓國等地收獲客戶。沒有開源,我們產品的 BUG、設計上的缺陷,需求的挖掘,不可能依靠一個小小的團隊來發現,也就不可能快速地迭代升級。即使我們都是十倍程序員,也無法與在市場上存在已久的歐美大公司一爭高低。
3、用戶才是技術進步的推動力
2016 年底,我想到的最好的 TDengine 的應用場景是汽車、能源和 IT 運維行業。但沒想到的是,開源之后,除自己設想的行業外,居然物流、智能制造在用,金融行業在用,煤礦在用,建筑工地在用,石油、石化在用,連鋼鐵廠、卷煙廠、啤酒廠都在用,農業、畜牧業等很多完全出乎意料的領域都有客戶在用,TDengine 的適用場景一下子幾乎覆蓋了所有的行業。我們公開的 100 多個案例分析里,包括蔚來、理想、零跑汽車,包括西門子、順豐、中通、大疆、OPPO、京東、TCL、玉溪卷煙廠、中天鋼鐵、同花順等眾多行業巨頭。
收獲這么多用戶,當然開心。但最重要的是,通過海量的用戶,我們了解到了很多想象不到的需求。
2017 年初,我根本沒想到時序數據有亂序的可能,而且看到 Prometheus 也不處理亂序數據,因此設計中就沒去處理它。但在與車企交流之后,我才意識到亂序是必然存在的,最后只能用補丁的方式來解決,自然運行效率就不行,而且代碼也變得丑陋不堪。
我們也沒想到過一個設備居然能采集幾千個物理量,但在與風電企業交流之后我才發現,一臺風機完全可能有 1000 個以上的指標,因此只能修改設計,支持 4096 列。更沒想到,物聯網上報的數據里有可能有空值,而且比例可能很大,只好又在設計上做出修改。
我們很自豪地推出了連續查詢,但在與一些制造業的客戶交流后,發現他們還希望有基于狀態窗口的聚合,比如某個閥門處于關閉或打開狀態時的聚合;在與車聯網企業的客戶交流后,發現他們希望有基于會話窗口的聚合,比如發動機運轉時的聚合。于是我們就推出了 session 窗口與 state 窗口功能。但大部分平臺都采用一個流式計算引擎做數據的清洗、計算,整個流式計算平臺的維護成本還遠超時序數據庫,因此我們才意識到光有時間窗口驅動的流式計算還不夠,必須支持事件驅動的流式計算,才能把用戶數據平臺的復雜度和成本進一步降低。
在與能源、制造等行業的用戶交流后,我們知道了邊云協同不只是概念,而是他們真實的需求,他們需要把某個邊緣節點的數據有選擇的同步到區域中心,然后再同步到集團。在與金融、證券等行業的用戶交流后,我們知道了他們對數據的訂閱有過濾的需求。結合各種反饋,最后,我們抽象出了 TDengine 獨有的數據訂閱功能,API 與 Kafka 一樣,但可以訂閱一個設備或一組設備(表),可以訂閱指定的列,可以對值進行過濾,訂閱時還可以做計算,從而大幅降低數據的傳輸量,降低應用端的復雜度。
如果沒有開源,沒有海量的用戶,我們聽到的只是少數客戶的聲音,而且由于是付費的,他們的需求可能并不代表真正的行業需求。TDengine 推出的極簡時序數據處理平臺,好幾個特殊的分析函數,寬表的支持,多達 128 個標簽,包括 JSON 格式的標簽,Schemaless 寫入等等,完全是傾聽了很多開發者用戶的聲音之后才推出的。
TDengine 開源了 3 年,我深刻地意識到用戶才是技術進步的推動力,是一款成功產品背后的英雄。因此在 TDengine 開發者大會上,一開場就先邀請了京東科技 IoT 產品部技術總監閆政和中通科技資深架構師黃國石作為用戶代表上臺,給參會者分享他們在業務中使用 TDengine 的故事。
4、你的反饋,我們前行的勇氣
中國的基礎軟件能發展起來并與全球巨頭直接競爭,是無數 IT 人的夢想。將 TDengine 打造成全球第一的時序數據庫,是我創業時的立下的目標。要實現它,必須認真傾聽用戶的反饋,用不斷提升的產品品質服務好用戶。而且我們要看到,中國企業類軟件,只占全球 10% 的市場,還有 90% 的用戶不在中國,因此 TDengine 必須全球化。我們需要有英文文檔、英文技術社區,目的是吸納更多的用戶來使用,發現更多的用戶場景和使用的問題,進一步加速產品的迭代升級。
怎么做到?我選擇了將核心代碼全部開源的方式。
無論你是我們的付費用戶,還是使用開源版本的社區用戶,不管你在世界的任何地方,只要登錄 GitHub (),無論是贊譽的 star、fork,還是提 issue、吐槽、報告問題,都是對 TDengine 的最大支持,都是我們沒日沒夜不斷迭代升級產品的最大動力。

你與我們的任何一次互動,都會推動 TDengine 的技術進步,都會讓我們離目標更近一步。
過去,因為有大量用戶的支持和鞭策,我們迭代到了 3.0,未來,只要大家繼續去下載、體驗、測試,并在業務中使用,我們就一定能解決所發現的問題,我們就一定會不懼國際巨頭的競爭,將性能、用戶體驗做到極致,TDengine 就一定會成為時序數據處理的事實標準、成為全球第一的時序數據庫。
我特別欣賞丘吉爾的一段話 “Success is not final, failure is not fatal, it’s the courage to continue that counts” 。TDengine 開源才三年的時間,未來的路還很漫長,而且一定會困難重重,但我們唯有堅持走下去,才能實現自己的夢想。
陶建輝
2022年8月16日于北京望京



























