物聯網的 DevOps︰成功的九個技巧
物聯網的興起使設計的重心從硬體轉移到了軟體。這為物聯網開發人員提供了一個機會,能採用著重於快速迭代與部署的 DevOps 原則。
但在物聯網中採用 DevOps 也可能會遇到許多挑戰。直到最近,嵌入式開發人員都還是採用硬體中心式的觀點。Canonical 行銷副總裁 Thibaut Rouffineau 說︰「他們活在一個要對 RAM 的每一個位元組進行優化的世界」。這種方法不符合 DevOps 加速交付的概念。
相反地,現代的物聯網開發人員通常具有 IT 軟體背景,擁有敏捷式開發等與 DevOps 相似的概念。他們認為硬體是一種需要管理的風險,而不是需要最佳化的資產,但這種想法也並非完全適合嵌入式設計。
舉例來說,在伺服器當機時,IT 解決方案是在另外一個伺服器上啟動一個新執行個體。由此解決問題。因為在物聯網領域中,硬體是已經部署完成,且無法快速替換的,所以無法輕易採用這種方法。
為了結合這些觀點,Rouffineau 為物聯網裝置建置人員概略指出九個實務 DevOps 課程。無論背景如何,每個課程都能提供不同程度的支援。
1. 盡可能進行標準化
對物聯網來說,第一條 DevOps 規則就是盡可能使用標準化硬體。Rouffineau 認為搭載 Intel® Atom™ 處理器,且具有藍牙功能的 Intel® NUC 就是一個很好的例子,很適合作為物聯網設計基礎的標準化小巧硬體平台。他表示「這很適合作為藍牙熱點、數位看板,以及工業物聯網閘道,且具有非常多的功能」。IEI Integration Corp. 使用此 NUC 作為他們 TANK-801-BT 無風扇嵌入式系統的基礎(圖 1)。
Rouffineau 認為開發人員可能可以透過更進一步最佳化的機板省下 50 美元,但這並不划算。此外,這 NUC 還「具有執行未來應用程式的效能餘裕」。隨著客戶使用的應用程式越來越進階,再結合人工智慧 (AI),這樣的擴充性便更加重要。這也能用於開發與生產平台。
標準硬體的原則也能套用在軟體上。Rouffineau 推薦使用如 Ubuntu 等標準、經過認證的現成作業系統。「既然可以保持簡單,為何要選擇複雜?」他問。使用 Ubuntu 代表只要作業系統還在使用中,便能擁有隨時可用的技術支援。
2. 使用正確的開發工具
根據一份 Canonical 的研究,有 68% 的物聯網專家認為僱用擁有正確物聯網技能的員工很困難。但是,根據 Rouffineau 的說法,問題在於他們想要員工具有過於廣泛的技能,從後端程式編寫到硬體與商務技巧等,而想要找到同時能掌握這些專長的人幾乎是不可能的。
他說,最簡單的解決方案就是使用標準的 Linux 開發環境,如此便能更簡單地組成具有各種所需技巧的團隊。此外,若環境與裝置上的作業系統相符,就能更簡單地進行開發與部署。這樣的相容性可簡化程式編寫與除錯,並避免對全端開發人員(例如以 node.js 進行快速開發,然後使用 C 編寫程式以進行最佳化)的需求。
3. 重複使用程式碼
Rouffineau 引用 Nextcloud 的私有雲儲存作為範例,表示「重複使用程式碼是以新方法進行物聯網開發的優點之一,尤其是在使用 Linux 時」。
Nextcloud 想要開發他們儲存解決方案的小型裝置版本。透過重複使用 Ubuntu 的雲端軟體,此企業得以在三個月內便建立了 Raspberry Pi 的解決方案。
4. 使用可複製的建置程序
採用 Linux 的問題是開發人員會開始打造自己的影像,修改應用程式、共用程式庫,以及裝置驅動程式等變數。「現在,您的影像取決於影像建立人員的決定」,Rouffineau 這麼說。
為了避免這個狀況,Canonical 開發了 Ubuntu Core,將軟體封裝在「Snap」中(圖 2)。這些封裝可確保軟體擁有特定的屬性,例如︰
- 它們為固定不變的,僅能讀取。
- 可進行追蹤與驗證,因此可從商店內下載。
- 可簡易升級。
Snaps 的眾多優勢之一,就是讓開發人員可根據程式碼的來源切割影像。舉例來說,核心與裝置可能來自晶片製造商或作業系統廠商,並可能是由作業系統中切割出來的,而作業系統又是從上層的應用程式封裝中所切割而得。您可以使用 Ubuntu Core,透過命令列管理這整個結構。
5. 建置程序自動化
「這就是我們想從 DevOps 觀點所獲得的優勢」,Rouffineau 表示,而不是透過命令列為每個建置寫下指示。為了達到這個目的,程式碼會推送至一個中樞,為不同架構進行建置,然後再配送到裝置上。
6. 自動配送程式碼
「我們還沒有一個妥善、通用的方法,能在嵌入式空間內配送軟體」,Rouffineau 說。DevOps 解決了這個問題。使用 Ubuntu Core,處理會從將更新送入 Snap 開始,且僅會送入更新部份,而不是完整的程式碼,以避免傳輸過大的檔案(圖 3)。
接下來,會將原始的 Snap 與其資料備份在目標裝置上。若在更新時發生錯誤,或是在測試升級時偵測到異常,便只要回復至原始的資料與 Snap 即可。
7. 打造長遠的安全性
自動化配送對裝置安全性格外重要。一份 Canonical 的報告指出,有 57% 的受訪者期望由服務供應商或裝置製造商來處理安全性。
裝置在第一次部署時,可能可以解決當下的所有弱點。但在一年以後,光是在 Linux 核心中就會出現超過 450 個弱點。
「DevOps 並不需要考慮這個問題,這會透過即時修復自動處理」,Rouffineau 表示。「為什麼不在這裡也利用相同的概念呢?」所有安全性修復檔案都可使用 Ubuntu 自動部署,不需要專門的人員來處理安全性問題。
8. 加速建置、部署,與測試的循環
DevOps 程序可用於持續更新裝置與避免裝置過時。「您甚至可以針對關鍵客戶進行 beta 測試」,Rouffineau 指出。使用 DevOps 的最佳實務,裝置在部署後即可開始進化,更可在客戶取得裝置後延續許久。
9. 以 DevOp 的方式運作
Rouffineau 認為應該「從您的服務價值主張開始,然後隨著客戶的需求提高而不停進化」,直到產出完美的產品。以無人機作為範例,無人機的硬體是一種「逐底競爭」,但透過加上軟體服務,便可擁有更優異的價值主張(圖 4)。
圖 4︰舉例來說,使用 DevOps 方法可使無人機製造商由單次硬體銷售,轉換至長期銷售以軟體為基礎的服務。(資料來源︰Canonical)
現在,無人機供應商可以長期銷售軟體服務,甚至驅使第三方廠商建立在無人機上執行的應用程式。或是他們可以銷售來自無人機的資料,這些方向都能讓供應商擁有更高的價值,也比較不會遭到其他低成本硬體取代。
在物聯網 DevOps 的全新世界中,可能可以由標準化硬體開始,達成更快的上市速度,以及更高的安全性和可靠度。最重要的是,您可以長期留住客戶,而不是仰賴單次的硬體銷售。對嵌入式開發人員來說,這需要心態上的轉換,但所帶來的優勢也很值得。
若要進一步瞭解此主題,請觀看「以 DevOp 方式建置物聯網裝置」網路研討會。