六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

服務(wù)器減少一半,TDengine 在華自科技的落地實(shí)踐

華自科技 寧龍

2021-12-08 /

作者:寧龍 華自科技

小 T 導(dǎo)讀:華自科技專注于自動(dòng)化、信息化和智能化技術(shù),為能源、環(huán)保、工業(yè)控制、水利等領(lǐng)域用戶提供核心軟硬件產(chǎn)品與系統(tǒng)解決方案,是多能物聯(lián)技術(shù)領(lǐng)航企業(yè)。公司在電站及泵站自動(dòng)化控制設(shè)備市場(chǎng)占有率全球領(lǐng)先,是聯(lián)合國(guó)工業(yè)發(fā)展組織國(guó)際小水電中心控制設(shè)備制造基地。

物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái)是電站及泵站智慧運(yùn)維平臺(tái)的核心組成,其整體架構(gòu)如下:

整體架構(gòu) TDengine Database

物聯(lián)網(wǎng)數(shù)據(jù)平臺(tái)的數(shù)據(jù)來(lái)源主要為電站、水廠、儲(chǔ)能站,通過(guò)數(shù)據(jù)網(wǎng)關(guān),將各場(chǎng)站端的設(shè)備運(yùn)行數(shù)據(jù)傳輸至云平臺(tái)的消息隊(duì)列(MQ)中,數(shù)據(jù)處理服務(wù)訂閱MQ的消息,根據(jù)設(shè)定的規(guī)則引擎,進(jìn)行實(shí)時(shí)數(shù)據(jù)處理,之后將數(shù)據(jù)存儲(chǔ)落盤。數(shù)據(jù)服務(wù)API則根據(jù)業(yè)務(wù)需求提供包含實(shí)時(shí)數(shù)據(jù)和歷史數(shù)據(jù)在內(nèi)的數(shù)據(jù)API。

一、現(xiàn)狀及痛點(diǎn)

對(duì)于歷史數(shù)據(jù),目前我們采用的MySQL分庫(kù)分表方案來(lái)存儲(chǔ);實(shí)時(shí)數(shù)據(jù)會(huì)存儲(chǔ)在Redis中。在測(cè)點(diǎn)數(shù)較少或者集控需求不是很多的場(chǎng)景下,基本滿足需求。

歷史數(shù)據(jù)

歷史數(shù)據(jù)用MySQL存儲(chǔ),一個(gè)站點(diǎn)對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù);一個(gè)測(cè)點(diǎn)對(duì)應(yīng)一張表,建表語(yǔ)句大致如下:

CREATE TABLE `yc_測(cè)點(diǎn)id` (
  `ts` datetime NOT NULL,
  `val` double NOT NULL
);

實(shí)時(shí)數(shù)據(jù)

實(shí)時(shí)數(shù)據(jù)緩存到Redis中,以測(cè)點(diǎn)Id為key,同時(shí)緩存數(shù)據(jù)上報(bào)的時(shí)間、測(cè)量值和質(zhì)量值等信息。

數(shù)據(jù)計(jì)算查詢

我們利用MySQL的各種函數(shù)、多表連接、應(yīng)用程序內(nèi)存計(jì)算等方式,計(jì)算出結(jié)果返回給前端,對(duì)于月、年等報(bào)表類的計(jì)算,則采用定時(shí)任務(wù)生成。

痛點(diǎn)

隨著平臺(tái)業(yè)務(wù)的發(fā)展,接入的站點(diǎn)越來(lái)越多,或者單站的測(cè)點(diǎn)數(shù)越來(lái)越多,問(wèn)題逐漸凸顯出來(lái)了。具體可以歸納為如下幾個(gè)方面:

運(yùn)維難

  • 對(duì)于新接入的站點(diǎn),首先得為這個(gè)站建立好數(shù)據(jù)庫(kù)、數(shù)據(jù)表,增加了接站的工作量;
  • 由于一個(gè)站對(duì)應(yīng)著一個(gè)數(shù)據(jù)庫(kù),隨著平臺(tái)接入的站點(diǎn)越來(lái)越多,數(shù)據(jù)庫(kù)不斷增加,數(shù)據(jù)庫(kù)的管理和備份成本不斷提高;
  • 隨著測(cè)點(diǎn)的增加,緩存實(shí)時(shí)數(shù)據(jù)的單機(jī)Redis遲早有一天會(huì)撐不住,需要考慮維護(hù)Redis集群。

開(kāi)發(fā)難

隨著平臺(tái)的業(yè)務(wù)發(fā)展,越來(lái)越多的站被接入平臺(tái),集控需求(跨站聚合分析需求)增加,跨庫(kù)跨表的查詢操作越來(lái)越多,這就增加了系統(tǒng)開(kāi)發(fā)的難度,嚴(yán)重影響了系統(tǒng)響應(yīng)速度和穩(wěn)定性。

成本高

成本主要有兩個(gè)方面,一個(gè)是人力成本高,由于開(kāi)發(fā)、運(yùn)維的難度增加,造成員工工作量增加,工作效率變低,從企業(yè)經(jīng)營(yíng)角度看,人力成本變高;另一個(gè)是硬件資源成本高,由于服務(wù)節(jié)點(diǎn)眾多,占用的主機(jī)、內(nèi)存和磁盤空間也會(huì)很多,購(gòu)買或租用這些硬件資源需要支出更多費(fèi)用。

二、技術(shù)選型

為了解決目前這些問(wèn)題,我們決定重新進(jìn)行技術(shù)選型,尋找替代方案,升級(jí)目前數(shù)據(jù)庫(kù)存儲(chǔ)方案。結(jié)合平臺(tái)實(shí)際需要,我們確定了幾個(gè)選型要求:

  • 業(yè)務(wù)改動(dòng)?。罕M可能減少對(duì)現(xiàn)有業(yè)務(wù)的影響;
  • 開(kāi)源免費(fèi):必須是開(kāi)源的,并且允許免費(fèi)商用,最好也有商業(yè)版;
  • 迭代更新:社區(qū)活躍,不斷在迭代更新和發(fā)布新版本;
  • 性能高:?jiǎn)螜C(jī)能支持每秒10萬(wàn)以上的插入效率;
  • 開(kāi)銷低:服務(wù)節(jié)點(diǎn)少,占用的內(nèi)存、CPU和磁盤空間少;
  • 支持集群:能夠集群部署,容量可水平擴(kuò)展;
  • 安裝維護(hù)簡(jiǎn)單: 數(shù)據(jù)量較小的情況下,支持單機(jī)部署,并且占用資源較少;

我們了解了多款典型的時(shí)序數(shù)據(jù)庫(kù)(Time-Series Database)產(chǎn)品,最終InfluxDB、庚頓、麥杰、TimescaleDB、TDengine這幾款進(jìn)入了我們的考察范圍。下面我們來(lái)具體看一下:

1.InfluxDB

在開(kāi)源時(shí)序數(shù)據(jù)庫(kù)領(lǐng)域長(zhǎng)期霸榜,社區(qū)活躍,生態(tài)也比較豐富,性能也算中規(guī)中距,唯一的缺陷就是集群模塊不開(kāi)源。

2.庚頓、麥杰

兩者都是傳統(tǒng)老牌工業(yè)領(lǐng)域的時(shí)序數(shù)據(jù)庫(kù)王者,功能、性能都非常不錯(cuò),唯一的缺點(diǎn)就是不開(kāi)源,只有商業(yè)版,而且價(jià)格昂貴。

3.TimescaleDB

它是在PostgreSQL之上開(kāi)發(fā)的一個(gè)插件,是基于關(guān)系數(shù)據(jù)庫(kù)的時(shí)序數(shù)據(jù)庫(kù),對(duì)于我們現(xiàn)有的業(yè)務(wù)使用幾乎無(wú)感知,上層可以繼續(xù)用MyBatis、JPA等ORM框架,但它不是一個(gè)純粹的時(shí)序數(shù)據(jù)庫(kù);另外,它對(duì)集群支持不好,不支持水平擴(kuò)展。

4.TDengine

支持使用類SQL查詢語(yǔ)言來(lái)插入或查詢數(shù)據(jù),內(nèi)嵌消息隊(duì)列和緩存機(jī)制、無(wú)歷史數(shù)據(jù)與實(shí)時(shí)數(shù)據(jù)之分、分布式架構(gòu),支持線性擴(kuò)展、支持多副本,無(wú)單點(diǎn)故障??吹焦倬W(wǎng)的這些介紹,瞬間感覺(jué)TDengine就是為我們準(zhǔn)備的,于是馬上做了各種驗(yàn)證,結(jié)果表明,TDengine完全符號(hào)我們的選型要求。

為什么沒(méi)有采用傳統(tǒng)Hadoop生態(tài)

提到大數(shù)據(jù),人們可能第一反應(yīng)就會(huì)想到Hadoop生態(tài)。因此我們前期也考查過(guò)騰訊云的TBDS數(shù)據(jù)套件。說(shuō)實(shí)話那一套東西真的是太笨重了,Hadoop、HBase、HDFS、ZooKeeper、Hive、Spark\Flink這系列的東西搞下來(lái),還真不是一般團(tuán)隊(duì)能玩得轉(zhuǎn)的,另外我司的業(yè)務(wù)場(chǎng)景不止云端服務(wù),還有可能會(huì)私有化部署在站內(nèi),硬件條件可能也就是一兩臺(tái)狀況一般的服務(wù)器。

三、TDengine存儲(chǔ)模型設(shè)計(jì)

由于TDengine Database可以設(shè)置將最新一條數(shù)據(jù)存儲(chǔ)在內(nèi)存中,因此我們利用這個(gè)特性替換掉了用Redis存儲(chǔ)實(shí)時(shí)數(shù)據(jù)這個(gè)環(huán)節(jié),改成實(shí)時(shí)數(shù)據(jù)直接查詢TDengine。

TDengine里有超級(jí)表的概念,每種設(shè)備對(duì)應(yīng)一個(gè)超級(jí)表。這個(gè)超級(jí)表只負(fù)責(zé)存儲(chǔ)這種類型的設(shè)備數(shù)據(jù),數(shù)據(jù)存儲(chǔ)采用橫表存儲(chǔ)。但是,這顯然不符合我們的場(chǎng)景,因?yàn)樵谖覀兊膱?chǎng)景里沒(méi)有固定的某一設(shè)備對(duì)象,且每個(gè)測(cè)點(diǎn)的頻率都可能不一致。

同時(shí)為了盡可能減少對(duì)現(xiàn)有業(yè)務(wù)的影響,我們將超表設(shè)計(jì)成如下結(jié)構(gòu):

CREATE STABLE IF NOT EXISTS stb_站點(diǎn)id  (    ts timestamp,        val double        ) TAGS (測(cè)id nchar(64))

TDengine的子表,可以在插入數(shù)據(jù)時(shí)動(dòng)態(tài)創(chuàng)建,這是TDengine的一個(gè)很好用的功能。這樣能省去創(chuàng)建子表的業(yè)務(wù)環(huán)節(jié),降低了業(yè)務(wù)復(fù)雜度。子表結(jié)構(gòu)如下:

insert into 測(cè)點(diǎn)類型_測(cè)點(diǎn)id  USING stb_站點(diǎn)id (測(cè)點(diǎn)id) VALUES ( ts, val,q)    eg:  insert into yc_15143115161750995367 USING stb_站點(diǎn)id ('15143115161750995367') VALUES ( ts, val,q)

四、使用到的TDengine特性

1.緩存(Cache)

我們直接使用TDengine提供的緩存(Cache)功能,替換了原有系統(tǒng)中的Redis。創(chuàng)建數(shù)據(jù)庫(kù)直接開(kāi)啟cachelast=1,將每張表的最后一條記錄緩存,應(yīng)用程序通過(guò)last_row函數(shù)快速獲取實(shí)時(shí)數(shù)據(jù)。

2.數(shù)據(jù)訂閱(Publisher/Subscriber)

在我們的業(yè)務(wù)場(chǎng)景中有一類數(shù)據(jù)叫SOE事件告警數(shù)據(jù),這類數(shù)據(jù)要實(shí)時(shí)動(dòng)態(tài)在前端頁(yè)面上滾動(dòng)。原有做法是通過(guò)頁(yè)面輪訓(xùn)來(lái)實(shí)現(xiàn)的,現(xiàn)在直接使用taos的數(shù)據(jù)訂閱功能,配合WebSocket,可以優(yōu)雅地實(shí)現(xiàn)這一功能,大大提升了用戶體驗(yàn)。

3.其它一些很用的功能

比如降采樣查詢、多表聚合查詢、各種標(biāo)準(zhǔn)函數(shù)等。

五、改造遷移

由于TDengine采用了類SQL的語(yǔ)法,支持MyBatis等ORM框架,因此對(duì)于老的業(yè)務(wù),我們?cè)诖a層面的改動(dòng)非常少,改動(dòng)最多的就是將原來(lái)的MySQL函數(shù)結(jié)合應(yīng)用代碼的一些計(jì)算邏輯直接用TDengine的函數(shù)替換掉。

在試運(yùn)行階段,因?yàn)槲覀兌际峭ㄟ^(guò)自研數(shù)據(jù)網(wǎng)關(guān)將數(shù)據(jù)通過(guò)TCP發(fā)送上來(lái)的,所以我們利用tcp-copy,將數(shù)據(jù)復(fù)制一份存到TDengine集群,然后通過(guò)業(yè)務(wù)系統(tǒng)觀察和驗(yàn)證各項(xiàng)功能是否正常。

驗(yàn)證正常之后,就是歷史數(shù)據(jù)的遷移了。由于TDengine的表結(jié)構(gòu)與原來(lái)的MySQL存儲(chǔ)結(jié)構(gòu)基本類似,因此我們采用DataX的TDengine插件,很方便就將歷史數(shù)據(jù)遷移過(guò)來(lái)了。

至此,我們就用TDengine Database替換了原有的存儲(chǔ)架構(gòu)。

總結(jié)

初始接觸一個(gè)新產(chǎn)品,難免會(huì)遇到一些困難。好在辦法總比困難多,在同事們的支持下,在TDengine的工程師們的支持下,我們總算是基本完成了這次實(shí)時(shí)數(shù)據(jù)存儲(chǔ)查詢的升級(jí)改造。

當(dāng)前項(xiàng)目數(shù)據(jù)測(cè)點(diǎn)大概在18萬(wàn)左右,改造后數(shù)據(jù)存儲(chǔ)周期由原來(lái)的5分鐘減少到1秒鐘,存儲(chǔ)的數(shù)據(jù)維度更精細(xì)了,能為平臺(tái)的智能診斷、智能分析服務(wù)提供更準(zhǔn)確的數(shù)據(jù)支持,同時(shí)各業(yè)務(wù)場(chǎng)景下的計(jì)算查詢性能也提升了不少,數(shù)據(jù)庫(kù)服務(wù)器由原來(lái)的6臺(tái)減少到目前的3個(gè)節(jié)點(diǎn)集群。

最后來(lái)個(gè)小廣告

TD-Workbench 是一個(gè)基于Electron構(gòu)建的,針對(duì)時(shí)序數(shù)據(jù)庫(kù)TDengine的圖形化管理工具。具有跨平臺(tái)、易于使用、版本適應(yīng)性強(qiáng)等特點(diǎn)。(gitee地址:https://gitee.com/bhdweb/tdengine-workbench)

TD-Workbench是本人利用周末的時(shí)間,參考開(kāi)源社區(qū)部分優(yōu)秀代碼設(shè)計(jì)并實(shí)現(xiàn)的,目前已經(jīng)開(kāi)源。 這個(gè)僅代表我本人的業(yè)余好愛(ài),與公司或某個(gè)組織無(wú)關(guān),歡迎大家去star/fork。由于TDengine官方并未提供客戶端GUI工具,社區(qū)目前能找到的兩款工具都不是很完善。本工具是在TDengineGUI基礎(chǔ)上改造而來(lái),部分源碼來(lái)自此處。

作者介紹:

寧龍,碼云昵稱【村口的大爺】,目前就職于華自科技。后端程序猿一個(gè),混跡Java界十余年,就愛(ài)寫(xiě)點(diǎn)代碼。一杯茶一首歌,一個(gè)參數(shù)秀一天。