Database

機器對機器通信的協議選擇 - 級別:n00b

  • September 25, 2013

我正在為灌溉泵和連接的管道建構一個監控系統。至此我已經完成了感測器網路。一切都連接到一個微控制器板(實際上是 4 個 Teensy 3.0板),並且該板被程式為以預定間隔輸出一串格式化數據(讀數)。

我想要做的是通過 USB 串列將板連接到RaspberryPI(或其他一些 SBC),並讓電腦將從感測器板接收到的讀數發送到遠端伺服器進行記錄。

我考慮過的選項是:

1 - Syslog…它很早就讓我想到了一種可能性,因為它似乎提供了我需要的幾乎所有東西。不過,複雜性讓我害怕。

2 - REST…讓RaspberryPI通過網路將數據逐行發佈到伺服器上的CouchDB。

3 - HTTP… 與 node.js 保持開放的 HTTP 連接並“寫入”數據行。它當然需要由第二個 node.js 腳本接收以儲存在數據庫中。

現在到要求:

~ 它需要輕巧且相對較快。會有很多數據(1s 間隔),而 RaspberryPI 不是強大的。

~ 我非常喜歡壓縮字元串的選項。上行鏈路是通過 3G 進行的,我希望採用“小型”月度計劃。

〜加密會很好,但不是強制性的。偏執狂對鄉下人很強烈……

〜我真的需要這個盡可能KISS。

長話短說,我認為這是某種網路串列連接,其中一台電腦將一行接一行地饋送到另一台電腦。

那麼,我在這裡有哪些選項更可取?或者更好,有沒有人有更好的主意?

老實說,如果有人有好的觀點,我願意編輯甚至重新發布這個問題。

編輯:

到目前為止,所有評論和答案都已得到讚賞和考慮。

Syslog 確實很棒,但我確實需要避免複雜性和成本。此外,經過一些測試,RaspberryPI 似乎在啟動 rsyslog 後不久就停止了。

到目前為止,已經決定 DBMS 將成為 CouchDB。

顯而易見的選擇是使用 curl 或殘留的 node.js 伺服器在數據到達後立即對數據庫伺服器進行 REST 呼叫。這雖然簡單而有效,但出於多種原因並不可取。安全也是一個問題;我不喜歡在現場使用微型 PC 直接呼叫 DBMS 的想法。

我開始賞金的原因是我希望有人可以提出以下構想:“遠端微型PC和DBMS之間的某種持久連接。數據將通過某種協議格式化並通過此連接轉發為了在另一端被接收。這個連接需要盡可能的輕量級,盡可能少的成本”。

您是否考慮過使用 SMTP(電子郵件)?Raspberry 上有兩個程序:一個讀取數據並將它們附加到文件中,另一個(可能在 crontab 中)移動文件(可能聚合一些文件)並通過電子郵件將它們發送到目標機器。這樣一來,採樣頻率和日誌記錄頻率之間就沒有耦合,如果您可以接受的話(例如,每 20 秒或每分鐘發送一封電子郵件)。

郵件可以被壓縮、加密(使用 SMTP TLS)。此外,它具有彈性:如果您失去了上行鏈路,我們將在鏈路恢復時發送數據。從您的日誌記錄過程的角度來看,連結始終是“向上的”。

在您的 couchdb 伺服器(或連接到 couchdb 的另一台機器)上,您創建一個專用使用者並在其 .forward 中放置一個腳本,用於解壓縮消息並將其提供給 couchdb。

如果要進行身份驗證,可以使用從共享密鑰到 PGP 簽名的多種方案!

我們這樣做是為了給我們的數據倉庫提供數據,因為我們不希望它上面有任何類型的傳入連接(https 或 ssh),誠然不是以 1 秒的採樣率(但有更大的數據)。

最後但同樣重要的是,您可以單獨測試每個組件(記錄器、發送器、接收器和 db-feeder),而無需執行所有基礎架構。

引用自:https://serverfault.com/questions/538552