為您的物聯(lián)網(wǎng)系統(tǒng)選擇合適的數(shù)據(jù)庫的4個步驟
為物聯(lián)網(wǎng)解決方案選擇正確的數(shù)據(jù)庫平臺是一項艱巨的任務。首先,物聯(lián)網(wǎng)解決方案可以跨地理區(qū)域分布。與集中式的基于云的解決方案相反,更多的解決方案正在采用邊緣霧計算和云計算的組合。因此,您的數(shù)據(jù)庫平臺必須為您提供在邊緣處理數(shù)據(jù)以及在邊緣服務器和云之間進行同步的靈活性。
其次,根據(jù)您的物聯(lián)網(wǎng)使用情況,您需要的數(shù)據(jù)庫功能可能包括實時數(shù)據(jù)流、數(shù)據(jù)過濾和聚合、接近零延遲的讀取操作、即時分析、高可用性、地理分布、模式靈活性等等。本文介紹了為物聯(lián)網(wǎng)解決方案選擇正確的數(shù)據(jù)庫平臺的四個步驟:
步驟1 確定解決方案的數(shù)據(jù)需求
物聯(lián)網(wǎng)解決方案依賴于從聯(lián)網(wǎng)設(shè)備中收集和處理數(shù)據(jù),做出智能決策,如觸發(fā)通知或動作,計算實時分析,從歷史數(shù)據(jù)中收集模式,等等。
為了便于討論,在通用的物聯(lián)網(wǎng)解決方案中,可以在整個企業(yè)中安裝傳感器和執(zhí)行器。成千上萬的傳感器和執(zhí)行器與一臺edge服務器相連。物聯(lián)網(wǎng)解決方案不斷從所有傳感器收集數(shù)據(jù),做出實時決策來控制傳感器和執(zhí)行器,向系統(tǒng)監(jiān)視器發(fā)出異?;顒泳瘓螅樽罱K用戶提供分析的歷史視圖。

在決定使用哪些服務和與之配套的數(shù)據(jù)庫之前,有必要清楚地了解如何使用數(shù)據(jù)以及在何處使用數(shù)據(jù)。一些問題可以幫助理解和優(yōu)先考慮你的數(shù)據(jù)需求:
- 哪些數(shù)據(jù)處理和決策被委托給邊緣服務器?
- 云解決方案是部署在一個地區(qū),還是分散在多個地區(qū)?
- 從設(shè)備到邊緣服務器和從邊緣服務器到中央服務器傳輸?shù)臄?shù)據(jù)量是多少?估計的峰值容量是多少?
- 物聯(lián)網(wǎng)解決方案是否控制設(shè)備或致動器?如果是,它們需要實時響應嗎?
- 從歷史數(shù)據(jù)中獲得的業(yè)務洞察力是什么?
步驟2 將解決方案分解為獨立的軟件服務
在此步驟中,您將設(shè)計執(zhí)行獨立的特定任務的軟件服務或組件。
當將前面描述的樣例物聯(lián)網(wǎng)解決方案分解為獨立的服務時,可以得到圖2所示的設(shè)計。物聯(lián)網(wǎng)解決方案本身是地理分布的,其中一些組件部署在邊緣網(wǎng)絡(luò),其余組件在一個集中位置。

現(xiàn)在讓我們將架構(gòu)分解為服務,并分析它們的職責和數(shù)據(jù)需求:
數(shù)據(jù)攝取
目的:收集和存儲設(shè)備日志和消息。
數(shù)據(jù)庫需求:支持高速寫操作,因為數(shù)據(jù)可能以突發(fā)的方式到達,確保數(shù)據(jù)在不尋常的情況下不會丟失。
邊緣分析
用途:對輸入數(shù)據(jù)執(zhí)行數(shù)據(jù)轉(zhuǎn)換、分類、聚合、過濾和功能。它負責在邊緣進行實時決策。
數(shù)據(jù)庫需求:支持高速讀寫與亞毫秒延遲;提供工具和命令來對數(shù)據(jù)執(zhí)行復雜的分析計算。
設(shè)備管理器
用途:向設(shè)備傳遞信息。
數(shù)據(jù)庫需求:以最小的延遲訪問和向設(shè)備發(fā)送消息。
系統(tǒng)分析
目的:從邊緣服務器收集數(shù)據(jù),執(zhí)行數(shù)據(jù)轉(zhuǎn)換和分析操作。
數(shù)據(jù)庫需求:提供對數(shù)據(jù)執(zhí)行分析計算的命令,并根據(jù)分析引擎的需要長時間存儲數(shù)據(jù)。
C&C (命令和控制)儀表板
目的:提供物聯(lián)網(wǎng)生態(tài)系統(tǒng)當前狀態(tài)的可視化表示。
數(shù)據(jù)庫需求:保持數(shù)據(jù)的當前和準確,讀取數(shù)據(jù)的延遲小于毫秒。
商業(yè)智能
用途:從歷史數(shù)據(jù)運行報告、查詢和推斷。
數(shù)據(jù)庫需求:長時間存儲數(shù)據(jù),節(jié)約成本;提供查詢和分析數(shù)據(jù)的工具。
物聯(lián)網(wǎng)數(shù)據(jù)流出口
用途:將數(shù)據(jù)規(guī)范化為一種通用格式,并將其推送給訂閱服務器。
數(shù)據(jù)庫需求:高效執(zhí)行數(shù)據(jù)轉(zhuǎn)換操作的能力;支持發(fā)布和訂閱功能。
步驟3:根據(jù)數(shù)據(jù)需求對服務進行分組,并選擇正確的數(shù)據(jù)庫
下一步是根據(jù)每個服務的數(shù)據(jù)選擇正確的數(shù)據(jù)庫。圖3將我們的物聯(lián)網(wǎng)示例中的服務連接到圖中,根據(jù)數(shù)據(jù)在數(shù)據(jù)庫中停留的時間和服務所需的數(shù)據(jù)讀/寫速度對它們進行分類。
您將看到數(shù)據(jù)不斷進出數(shù)據(jù)攝取服務器,在數(shù)據(jù)庫中停留的時間非常短。同時,數(shù)據(jù)的到達量大,速度快。因此,我們需要一個具有低延遲的高速數(shù)據(jù)庫來保存用于攝入服務的數(shù)據(jù)。另一方面,商業(yè)智能服務依賴于歷史數(shù)據(jù)。

下一步是對具有類似數(shù)據(jù)訪問特征的服務進行分組,目標是限制數(shù)據(jù)庫的數(shù)量(多余的數(shù)據(jù)庫和不符合您需求的數(shù)據(jù)庫),從而減少操作開銷。

在圖4中,我們將示例服務分組到兩個主數(shù)據(jù)庫中—一個熱數(shù)據(jù)庫和一個冷數(shù)據(jù)庫。保存熱數(shù)據(jù)的數(shù)據(jù)庫部署在靠近物聯(lián)網(wǎng)設(shè)備的位置,以最小化網(wǎng)絡(luò)延遲。熱數(shù)據(jù)和冷數(shù)據(jù)的數(shù)據(jù)庫選擇是:
熱數(shù)據(jù)庫:由于RAM的成本越來越便宜,內(nèi)存中的數(shù)據(jù)庫通常是一個不錯的選擇。內(nèi)存中的數(shù)據(jù)庫以最小的延遲交付數(shù)據(jù)讀寫能力。當選擇一個熱數(shù)據(jù)庫時,這些額外的功能和能力將幫助您縮小選擇范圍:
- 數(shù)據(jù)格式的靈活性——幫助您支持廣泛的設(shè)備和通信格式
- 查詢功能——使您能夠?qū)崟r運行高效的查詢
- 消息傳遞和排隊——驅(qū)動通信和數(shù)據(jù)交換
- 分層內(nèi)存模型-提供一個經(jīng)濟有效的內(nèi)存模型,但高性能
- 高可用性和災難恢復-幫助您保持業(yè)務的所有時間
- 地理分布-服務地理分布的物聯(lián)網(wǎng)部署
- 二進制安全-幫助您保存二進制數(shù)據(jù)
冷數(shù)據(jù)庫:物聯(lián)網(wǎng)解決方案的歷史數(shù)據(jù)可能增長到多個tb,在某些情況下可能超過一個pb。存儲歷史數(shù)據(jù)的流行選擇包括在普通硬件上存儲解決方案。查詢通常遵循map-reduce模式。通常,歷史數(shù)據(jù)也會在搜索引擎中建立索引,用于模式匹配和數(shù)據(jù)聚合。如果您要將數(shù)據(jù)存儲在云中,請與您的云服務提供商聯(lián)系,在您所在的地區(qū),哪種數(shù)據(jù)存儲方案最劃算。
第四步:評估成本、資源效率
將數(shù)據(jù)庫分為熱數(shù)據(jù)庫和冷數(shù)據(jù)庫有助于縮小數(shù)據(jù)庫選擇范圍。對于大多數(shù)物聯(lián)網(wǎng)用例,一個高速數(shù)據(jù)庫可以滿足熱數(shù)據(jù)庫的所有需求。對于冷數(shù)據(jù)庫,選項可能從關(guān)系數(shù)據(jù)庫到數(shù)據(jù)湖。設(shè)計人員經(jīng)常犯的一個錯誤是為每個服務創(chuàng)建具有專門數(shù)據(jù)庫的多語言體系結(jié)構(gòu)。這增加了應用程序堆棧的復雜性以及操作開銷和成本。
擁有一個數(shù)據(jù)庫的總成本是許多參數(shù)的函數(shù)。數(shù)據(jù)庫本身的成本只是成本的一小部分。以下是一些費用:
- 數(shù)據(jù)庫許可證成本:該成本可能與cpu數(shù)量、集群中的碎片數(shù)量、數(shù)據(jù)庫大小、吞吐量(每秒最大操作數(shù)量)、時間(年、月、小時等)、高可用性和恢復特性、云的多個區(qū)域的可用性等有關(guān)。如果您使用的數(shù)據(jù)庫可以作為開放源碼軟件使用,根據(jù)許可證的類型,數(shù)據(jù)庫成本甚至可能為零。
- 基礎(chǔ)設(shè)施成本:基礎(chǔ)設(shè)施成本取決于數(shù)據(jù)庫的資源效率。例如,一個輕量級、線程安全的數(shù)據(jù)庫可能只使用兩個商用服務器每秒執(zhí)行100萬次讀/寫操作,而傳統(tǒng)數(shù)據(jù)庫可能需要更多的服務器才能得到相同的結(jié)果。除了數(shù)據(jù)庫效率,硬件成本還取決于吞吐量、cpu數(shù)量、RAM、數(shù)據(jù)大小、閃存、網(wǎng)卡等。用于高可用性的數(shù)據(jù)庫體系結(jié)構(gòu)也發(fā)揮了作用。例如,基于仲裁的故障轉(zhuǎn)移架構(gòu)將只需要一個備用服務器副本,但非基于仲裁的架構(gòu)將需要兩個數(shù)據(jù)副本,以避免分裂大腦。
- 數(shù)據(jù)丟失成本:為數(shù)據(jù)丟失提供適當?shù)谋kU是極其重要的,特別是對于商用物聯(lián)網(wǎng)解決方案。您丟失數(shù)據(jù)的總成本為:虧損的業(yè)務數(shù)據(jù)丟失的概率*恢復數(shù)據(jù)的成本
- 您可以使用數(shù)據(jù)庫供應商提供的適當SLA來抵消部分成本。
- 操作開銷:自動化是成功的咒語。如果數(shù)據(jù)庫提供控制來自動化部署、配置、故障轉(zhuǎn)移、擴展、數(shù)據(jù)分區(qū)、備份和恢復、監(jiān)視和警報等操作,那么將有助于高效地操作。
結(jié)論
當為下一代物聯(lián)網(wǎng)解決方案選擇正確的數(shù)據(jù)庫時,很容易迷失在現(xiàn)有的大量數(shù)據(jù)庫中。但是,如果將解決方案分解為組件服務并理解它們的數(shù)據(jù)庫需求,就可以有效地縮小數(shù)據(jù)庫選擇范圍。大多數(shù)物聯(lián)網(wǎng)解決方案都依賴于熱數(shù)據(jù)庫進行實時數(shù)據(jù)收集、處理、消息傳遞、分析,而冷數(shù)據(jù)庫用于存儲歷史數(shù)據(jù)和收集商業(yè)智能。這將使架構(gòu)簡單、精簡和健壯。
最后需要說明的是,Redis實驗室贊助的開源內(nèi)存數(shù)據(jù)庫Redis是物聯(lián)網(wǎng)解決方案的熱門數(shù)據(jù)庫。它被物聯(lián)網(wǎng)解決方案廣泛用于數(shù)據(jù)攝取、實時分析、消息傳遞、緩存和許多其他用例。