黃向東:工業物聯網數據庫 IoTDB及其應用
IoTDB源自清華大學軟件學院。王院長帶領團隊從2011年開始關注,2014/2015年開始研制,一路走來始終圍繞工業數據軟件,其中包括了數據管理軟件、機器學習軟件、數據處理軟件以及應用開發軟件。我主要負責數據管理軟件。讓數據發揮價值,首先要把數據管起來,便于未來的數據處理和應用開發。
今天分享關于工業時序數據庫IoTDB(全稱Apache IoTDB)及它的一些應用,主要分四個方面:IoTDB在解決什么類型的數據;它和工業之間的關系是什么;對于這類數據有哪些管理的挑戰;IoTDB有什么特性以及我們的一些應用實踐。
工業與時序數據
我們要管理的工業數據到底是什么,它和工業之間是什么關系?如下圖所示,隨著產業的發展,生產型制造在整個G D P的占比會越來越低,而服務型制造會快速發展。其本質是隨著競爭越來越激烈,怎么才能在有限的生產資源下提供更強的生產力,以及在相同的生產力下怎么能將自己制造出來的產品價值進一步提升?
在疫情影響下,很多工業企業進一步加強生產制造的產品自身的價值,并基于產品做增值服務,提升競爭力。那怎么做才能讓這樣一個向下的曲線變成一個向上的綠色曲線呢?
大數據是整個工業數字化轉型升級中的核心生產資料和關鍵賦能技術。大致分成三類:
第一類,是工業信息化數據,來自傳統的CRM、PLM等系統,包括生產過程中的訂單信息、維修信息等等,主要是人為產生。第二類,是跨界數據,因為所有的生產運行一定和大環境相關,例如災害天氣、油價提升等問題都會對工業最終生產價值產生一些波動。第三類,是機器設備產生的數據,這個時代的工業設備,帶有大量的傳感器,幫助人們去診斷和查看設備的運行狀態,從而更有效地去管理或者運維這些設備。
這三類數據共同構成了工業大數據的主體,今天我們主要講的機器設備的數據和人產生的數據很不一樣。很多情況下,機器7X24小時工作,比如一個發電廠點一次火,可能需要幾百萬的投入,一旦點著了火,即使電量飽和要降低生產,也只會降低功率,并不會停工把機器關掉。很多大型設備需要連軸轉很多天,而且設備采集數據的頻率可能會很高,每秒、每毫秒甚至每微秒會采一次數據。由此,這些機器設備產生數據的速率會遠遠高于人產生數據的速率。
慢慢地,機器設備變成了產生工業大數據的主體。而有了這些數據之后,人類可以更好地去驅動或調整這些設備,于是這些設備本身也成了消費這些數據的主體。這些機器設備數據就是我們今天要講的時序數據。
為什么叫做時序數據呢?因為這些數據最典型的特征是記錄了每個設備在不同時刻的某些指標的變化情況。如果用一個關系數據庫來看,它就是一個表的結構,可視化出來,橫軸做時間軸,就會看到每一條時序在表示一個設備的某些物理量或指標在時間維度上的變化。
時序數據和工業之間的關系
GE早在2012年就指出,海量時序數據是未來驅動新一代工業革命的歷史性機遇。
以電力為例,發電、輸電、配電各個環節的自動化系統,一直在產生和收集這些數據,大量數據怎么去管理和使用,才能保障安全、優化供需平衡?
例如,金風通過收集風速數據和風機轉向角的數據和發電數據,可以有效幫助每一臺風機提升它的發電量,從而產生非常直觀和大量的經濟價值。
在制造環節,不管是離散制造,還是流程制造,都有大量的工藝參數數據值得被收集,從而進一步保障生產安全以及提高良品率和產能。例如半導體行業做SMT元器件的貼樁,通過收集每一個元器件的面積、高度、體積、偏移值等數據變化,能盡早發現SMT產線上刀片磨損程度和錫膏濃度對良品率的影響。同時,通過這些時序數據,可以訓練出來一些對應的模型,增強監測設備的復判能力,降低需要二次人工復判的工作量,進一步提高良品率的穩定性。
通過對工程機械實際油耗的消耗程度、設備所處地理位置信息的變化、當時的載重和司機踩油門的輕重等系列數據的收集和分析,能幫助司機,合理規劃應該怎么踩油門、怎么去跑線路才能使工程機械最省油。在工業運輸和工程機械的使用過程中,省10%的油,就能帶來很高的經濟效益。
要在工業場景中持續發揮數據價值,本質上取決于到底能采集和管理多少時序數據。現在很多智能設備都號稱可以監測設備的實時狀態,但只管理了實時數據。當這些實時數據能被存到數據庫中變成歷史數據,就可以進一步做更多有價值的探索。
下圖從左到右是對實際數據管理從少到多的一個過程,同時,也是時序數據能發揮出來的價值從低變高的過程。有了實時數據,就可以做狀態監控、遠程運維;有了較長時間的數據,就可以對這些設備做一些數字畫像,進行健康評估,發現劣化趨勢,進行故障預測和備件調度;有了設備全生命周期的數據,就可以通過它服役狀態下的設備表現情況,對它的制造工藝進行改進和控制。歷史數據沉淀得越多,可挖掘的價值深度就越高。
時序數據管理的新需求和新挑戰
在工業行業,時序數據并不是一個新概念,自動化設備被發明出來并且被大批量使用的時候,這些數據就已經被收集和存在了DCS系統。為什么現在又重新把這些數據拿出來講?因為在工業領域的需求在發生變化。
傳統DCS系統大多部署在工廠側,但是現在有智能電表、智能網聯車、智能路燈以及許多可移動的智能設備,這些設備也具備了數據的采集能力,數據都需要被管理。
同時,為了做更精細的應用,設備采集數據的頻率可能從原來的五秒鐘一次變成了現在一秒鐘一次,甚至一毫秒一次,這對底層的數據管理系統的性能要求大幅提高,從原來的數萬點每秒到千萬點每秒甚至一億點每秒。
而傳統的狀態監測和實時告警等應用,對歷史數據的存儲需求并不高,所以很多情況下,大家會采用采十寸一、采百存一的策略,只存下來部分關鍵數據,而那些正常或細微變化的數據就丟掉了。但量變引起質變,正是這些細微的變化,幫助我們更快更深地洞察問題,所以現在逐漸向應存盡存、全量存儲轉變。
此外,以往在設備側產生數據之后,就向云端發送,在數據中心端就可以看到數據。現在由于硬件越來越便宜,邊緣計算能力在增強,本地智能化也需要有數據管理能力,并且能和云端做很好的協同。在上述新需求下,如果這些時序數據只是簡單存下來,就是不停增加管理成本,只有對數據進行充分的分析、計算,才從成本變成價值。這個過程中,工業用戶獨特場景帶來的時序數據管理的挑戰很多。
工業設備足夠復雜,尤其是昂貴的工業設備上觀測的指標數量非常多。以一個電廠為例,由于一些歷史原因和二次加工數據,一個電廠需要被觀測的指標可能超過三十萬個;此外,為了做振動分析,這些數據的采樣頻率可能達到兆赫茲的級別。
由于工業場景的環境惡劣和工業控制器的升級問題,很多實時數據并未按照時間產生的順序到達云端。而一個工業設備可能由多個控制器來組成,且品牌不一,由不同的控制器根據零部件的重要程度不同來決定采集數據的頻率,采集數據的起始時刻也不一樣。如果用一張表來表示,會看到雖然這個設備有三十萬個指標要監測,但是某一個時刻下可能只有七八個指標,另一個時刻下有30個指標。這樣參差不齊,會使得用戶將來使用數據的成本和難度大幅提升。
邊緣設備迭代快。以前一個設備監測三五個點,隨著應用的逐漸深化,有更多重要的點需要監測,給設備做診斷時加裝小零部件,又增加了一些可采集和可傳感的數據。
用傳統的關系型數據庫存儲時,對于schema的維護工作量非常大,并且往往會出現一些錯誤,導致采到大量數據卻無法入庫。IoTDB針對這樣的情況,采用了云端適配邊緣端的方法,根據傳過來的數據自動創建這個序列的元數據,來降低管理成本,并且盡可能地讓更多數據入庫。
復雜設備測點數海量。傳統關系數據庫會用垂直分表方案,把一個表縱向切成幾個表,去表達一個復雜對象或復雜設備,這會造成額外工作量且性能低。而IoTDB容納的時間序列數量無上限,允許對于單個設備任意復雜化地去描述其資產管理關系和設備的組成關系,以及這些組成關系和零部件上各個測點的關系。
采樣頻率高。當采樣頻率變得很高時,用關系數據庫易達到1000萬行的單表存儲上限,且水平分表分庫等方案需要每天分表,所以在很多IT系統里有一些日表的概念。這會對查詢等操作帶來困擾。IoTDB對時序數據的特有處理,能幫助用戶持續高效地寫入、查詢和管理超高吞吐量的數據,并且存儲成本非常低。容納PB級別數據。
各數據獨立采集。一個設備上不同零部件的數據采集是獨立的,采集頻率不一樣,采集時刻對不齊,會造成在可視化或者做兩條序列的相關性分析等時候,出現向量長度不一樣等現實問題。IoTDB把數據整理工作,下放到數據庫中,讓數據庫支持時序數據把多條序列按時間對齊,把缺失的值進行空值填充等方式,讓用戶更方便地使用數據、發揮價值。
工業環境數據亂序到達。工業環境網絡質量難以保證,經常出現如延遲、斷網,導致數據無法完全保序到達。而IoTDB 支持時間序列的亂序寫入。
總的來講,對時序數據的處理,一些時序數據庫不論是在性能、功能、存儲成本上,都存在一定的不足。市面上也有很多新的時序數據庫,但它們的應用場景和底層技術棧不是面向工業設計的,而是面向互聯網企業應用性能監控的場景而設計,面對工業場景下特殊需求,就會出現很不穩定或者很差的性能表現。
IoTDB與衍生產品
做IoTDB的初衷,是幫助工業用戶解決時序數據的存儲查詢使用問題,能支撐機器數據海量讀寫,能支撐用戶超低成本地存儲數據和深度的分析挖掘。我們希望IoTDB成為智能制造或者是未來工業物聯網的基礎設施之一。
IoTDB的主要特性,除了高吞吐數據、低成本、高壓縮、高可用外,還有面向物聯網原生的模型和端邊協同的模式。作為數據庫,它也給用戶提供了寫入和查詢的接口形態。
IoTDB起源于863計劃的一個課題,和國內的某家龍頭工業企業合作的過程中注意到,他們的工程機械設備數據在Oracle中管理出現了瓶頸,上層沒辦法進一步做業務運用。
從2015年,我們開始自研IoTDB,在很多場景和技術上做了驗證。2018年,我們正式把IoTDB推到Apache基金會,吸引了國內和國際上一系列的同行,圍繞IoTDB做一些開發和使用。2020年,IoTDB正式畢業,成了Apache的全球頂級項目。之后在持續的推廣過程中,IoTDB拿到了國內一系列的開源獎項。
目前,IoTDB是Apache物聯網數據庫的唯一項目,甚至可以說是唯一一個專門為時序數據打造的項目。IoTDB也入選了國家“十三五”科技創新成就展、北京市科技進步一等獎等。IoTDB自主研發過程中產生了大量面向時序數據的新專利,也發表了一些論文。它是一個物聯網原生的時序數據庫,具有它自己的基準性能。
我們希望通過這個產品幫助用戶利用數據提質增效、降低數據的管理成本。最重要的是,能低成本、高性能地給用戶提供服務,更便捷地從其他的系統中把數據導入IoTDB,提供豐富的數據處理生態和一站式解決方案。
和一些其他的開源系統對比,IoTDB寫入性能遙遙領先,并且在實際的用戶案例下,一臺IoTDB可替代原來15臺NoSQL數據庫服務器組成的集群。從查詢性能上,IoTDB不管是原始數據查詢還是聚合查詢,都領先同類產品。一個IoTDB就能同時滿足實時數據監控以及海量歷史數據查詢。
IoTDB樹型結構管理的數據模型非常適合工廠。一個工廠同一個型號的生產設備不止一臺,這些相同型號的設備,當觀測指標都相同的時候,IoTDB提供了模板化管理方式。對于設備上多個指標,它能同時去采集;采集頻率也相同的時候,可以用對齊的采集模式。對于不同時刻采集,采集頻率不一樣的形式,我們提供了單元序列的方式,各測點獨立采集。對于這些數據,既有靜態的數據管理,也有沿時間變化的數據管理。此外,也可以在樹上添加一些節點,實現動態模型化。
雖然對傳統的IT人員有一些學習成本,但對于OT域人員,這和業務場景更匹配。為了實現低成本的存儲,我們自研了一個列式文件格式叫Tsfile。它既有列式的存儲形態,又有高壓縮的編碼結構,還有各種各樣的分段聚合的語句和信息,幫助用戶盡快做降采樣、聚合查詢、生成報表等。在文件的末尾,我們也有文件集的索引來幫助用戶在海量的數據下快速查找數據。
當采樣頻率提升到毫秒級之后,要做可視化或者做不同應用,需要查詢數據的采樣頻率是不一樣的。因此我們給用戶提供了實時降采樣的能力,將一條序列降采樣成數據密度更稀疏的序列,來減輕業務端或應用端的壓力。我們可以把處理后的降采樣或者其他結果,再重新寫回數據庫,從而將原始數據、加工后的數據、再一次加工后的數據分別生成出來,最終變成一些知識和決策。
對于質量不高的數據,可以通過簡單的降采樣,再把數據按時間對齊,并把每分鐘里缺失的數據進行補全,來幫助用戶拿到一個更整齊和更便于分析的數據。除了寫入建模、寫入查詢以外,IoTDB提供了大量的分析函數,支持定制化分析,自行開發和創建函數以滿足工業機理分析。目前,IoTDB已經陸續完成了75種函數。
不止于此,從數據進到IoTDB開始的采集、存儲、查詢和分析全生命周期,都提供了數據計算的能力。當一個數據采集過來要寫入到數據庫,就提供了觸發器機制。用戶對每個新寫入的數據都可以去做預知、判斷、告警,都可以對數據進行加工和修改,把多個數據計算a+b衍生出來c計算出來衍生變量。
當數據進入到數據庫之后,我們也給用戶提供了一個后臺離線的計算模式,幫助用戶把數據查出來,進行處理,之后重新寫回數據庫。在數據庫中,它可能被叫做物化視圖。通過定期執行的方式,在后臺不繁忙的時候幫助用戶把原始數據逐漸加工出來。用戶實時查詢的時候,通過UDF函數機制,也可以實時做一些計算。
當把IoTDB和spark、flink等等大數據生態集成之后,就可以做更多的大數據分析應用。整個過程中,既可以對每個采過來的數據值做計算,也可以按照時間窗口做計算,讓用戶自定義自己的計算邏輯,幫助用戶更好地整理數據。
此外,IoTDB端邊云協同的設計理念,希望打破原來端測產生數據之后,要在本地編碼解編碼,壓縮之后傳到云端,解碼再解壓,再把數據寫入到數據庫,數據庫耗費CPU和內存對數據進行排序和鍵索引的過程。當端側有了足夠的計算能力,就可以把數據編碼,上傳到云端,云端可以直接落盤并分析使用了。這種模式下,云端CPU使用率大幅減小,網絡帶寬也會大幅降低。我們也和一些生態軟件進行了搭配,用戶可以很方便地拿我們的數據庫去做數據可視化、數據交互式分析,以及用大數據spark等標準語言做時序數據的分析應用。
IoTDB繼承了很多屬于Apache的開源項目,以及部署Apache,覆蓋從采集、處理、分析、應用的各階段。
作為一個時序數據庫,IoTDB更多是提供時序數據的建模查詢、處理分析,和低成本存儲的能力。在此之外,我們也逐漸圍繞IoTDB衍生出向前向后的一些功能,幫助用戶更好的去做數據的采集告警、基于規則引擎的計算來產生更復雜的告警、對數據進行組態可視化、對數據進行交互分析和大數據分析等。
應用案例
清華已推動IoTDB很多年,陸續得到開源用戶和企業客戶的大量使用,目前已服務幾百家企業。包括一系列中字頭的企業、工業龍頭企業,以及國家的一些雙跨平臺。
目前用得最遠的是在一顆衛星上,有一個小的盒子里面安裝了IoTDB,在太空中去管理現場的實時數據。稍微低一些,是管理飛機的數據,中國商飛的大飛機C919試飛階段的數據管理用的是IoTDB,成飛無人機的試飛數據等也是在用IoTDB。目前,IoTDB已經管理了幾萬億個數據點,數據量達到十幾個T。
在地面,我們跟大量的工廠、地鐵車輛做了鏈接;在海上,我們和中船合作,管理船舶和水文變化數據。
IoTDB在國際上也有大量用戶,和德國的企業合作去服務寶馬、德鐵等企業。和博世、西門子等企業的合作也在陸續展開。
首先講講國內的應用:
和中車合作,管理上海地鐵所有列車的數據。之前是15臺KairosDB+底層Cassandra,管理144列車的數據,每列車有3000個測點,采樣頻率是500毫秒采集一次。升級后,單臺IoTDB就可以管理這種數據量級,并且能大幅提升上限容量。當系統完全切換成IoTDB,我們將它原來在CTV中三年的數據重新導入,過去用其他系統三年存儲的200TB的數據,在IoTDB能被壓縮到16TB,幾乎降低了90%的存儲成本。
和博世合作,博世的ctrlX AUTOMATION,圖中右上角亮燈的小盒子,在工廠側可以直接部署應用。一定程度上和國內的工控機有點像。但是因為和博世的其他設備打通得更好,所以它潛力極大。之前,盒子不具備管理歷史數據的能力,我們把IoTDB安裝在盒子內,現在它可以管理歷史數據。上個月,此產品在德國博世的展會和SPS展上進行了發布。
和湖南中煙合作,兩三年前,幫助管理集控車間和工廠的數據,監控制絲和卷包車間 260 個設備的狀態,涉及90135個時間序列數據的采集,將多個工廠的數據匯總到公司級大數據平臺,形成了車間、工廠、集團這樣多層次的數據管理體系,管理各種制造過程中工藝參數數據,提升生產效率、降低損耗。
和大唐先一合作,在4個火電廠和60多個新能源發電企業替換掉open TSDB,對數據進行管理,原來需要一個集群才能搞定的事情,現在單個節點就能搞定,減少 95% 運維成本。
和國家電網合作,應用于成都世代積家充電場站、北京亦莊光伏場站等業務場景,把IoTDB放在電表箱內部,實現了充電場站實時狀態監測,及本地負荷計算、諧波計算、終端故障預警等能力。
和長安汽車合作,幫助長安汽車把數據匯總到云端,建設了云平臺,使得原來做一些故障數據查詢的響應速度,從分鐘級提升到秒級,帶來更好的用戶體驗,從而去做更多的業務應用。
和太極合作,是一個火電廠的應用,使用 IoTDB 替換 Apache Druid, 構建發電機組的遠程分析平臺,管理了11個發電機組的數據,大幅降低了運維成本。
和中國氣象局合作,把全國十萬個地面氣象觀測站的實時數據進行存儲。之前不方便查看單站數據,尤其不方便查看單站一段歷史時間數據,因為氣象預報員預報數據的時候,一定程度上會依賴于所謂的視覺殘差。要快速查看數據在不同時刻的變化情況,在視覺上形成動畫效果,這就要求數據庫能非常高速的去突出每個時刻的數據變化情況,IoTDB恰好滿足這樣的場景。
和東方國信合作,打造東方國信Cloudiip平臺,連續四五年入選國家十大雙跨平臺。底層的時序數據庫是基于IoTDB,并且基于IoTDB發布了CirroData-TimeS 的衍生產品。
和用友合作,管理了工廠生產設備的數據。用友目前也在基于IoTDB打造對應的產品。還有一些和工業稍微離得遠一些的應用場景,包括金融、DFS等場景。歡迎大家關注開源項目IoTDB。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。
電容器相關文章:電容器原理
電容相關文章:電容原理 漏電開關相關文章:漏電開關原理