許多開發人員認為物聯網和嵌入式 Linux 設備是他們今天工作環境的擴展。但現實情況是,為嵌入式 Linux 設備開發和維護應用程序伴隨著一系列獨特的挑戰和工作流程。此外,一些創建新物聯網產品的嵌入式開發人員由于各種原因沒有采用容器等現代工具及其實踐。
軟件開發更復雜
毫無疑問,軟件開發,尤其是云計算,這些年來變得更加復雜。同樣的復雜程度也適用于物聯網和嵌入式 Linux 系統。嵌入式設備越來越復雜,并將繼續變得越來越復雜。當前的 Raspberry Pi 和 Nvidia 板就是很好的例子。這些是片上系統 (SOC) 的示例,它提供了許多具有許多創新功能的資源,可以使開發和管理應用程序和其他系統變得更加復雜。
云開發人員所需的技能范圍廣泛而多樣,無論是從單個開發人員的角度來看,還是從整個團隊的角度來看都是如此。云開發人員需要處理許多不同的系統,從像 Git 這樣的源代碼控制存儲庫到像 Kubernetes 這樣的自動化持續集成和部署管道和編排系統。盡管如此,在你開始將應用程序部署到云之前,你還需要掌握開發應用程序的語言和框架以及存儲系統。
嵌入式工程師和硬件
嵌入式工程師還有管理硬件的額外要求。與擁有近乎無限資源的云不同,嵌入式工程師還必須評估板的功能和限制。
嵌入式 Linux 產品也往往會在市場上銷售很長時間,有時甚至長達 10 年。因此,另一個考慮因素是軟件和固件必須可靠且易于更新。大多數設備都是連接的,并且像裸機服務器一樣是物聯網基礎設施的基本組件。嵌入式開發人員最不想擔心的是會導致整個網絡或生態系統崩潰的關鍵軟件錯誤。
嵌入式工程和現代云技術
通過采用容器及其實踐等現代云技術,可以滿足許多這些特定于嵌入式的要求。但采用容器還有許多其他好處,可以幫助嵌入式工程團隊,例如更快的周轉時間,以將概念原型驗證到生產就緒,以及提高開發速度。
從概念驗證到生產就緒
在處理新的和復雜的框架和庫時,嵌入式工程師必須保持高效并領先于曲線。例如,工程師需要快速構建和迭代可與客戶一起評估和測試的概念證明或產品原型,以快速確定其是否是可構建并推向市場的可行產品。
上市速度
原型經過測試和批準后,你需要做好準備并盡快將其推向市場。如果測試成功,你還希望成為市場上第一個使用有望領先于競爭對手的新一代產品的人。
生命周期管理的長期視野
嵌入式 Linux 設備需要長期維護,需要一種可靠的方式來安全地更新和維護設備。對于嵌入式系統,嵌入式開發人員需要一致的電源和一種簡單的方法來回滾或轉發到良好狀態,以防出現問題而不是最終導致設備變磚。
在沒有容器的情況下構建嵌入式 Linux 系統
多年來,構建嵌入式 Linux 系統幾乎沒有變化。盡管有像 Buildroot 和 Yocto 這樣專門針對嵌入式系統的發行版,但圍繞嵌入式系統設計和架構的開發方法和實踐與 20 年前相似。
傳統上,嵌入式團隊的發布周期很慢,包括每隔幾個月甚至每年一次的整體發布,其中包含每個小的更改到一個大版本中。這種類型的釋放可能適用于封閉的設備。但是,如果你的設備連接到互聯網或在一個車隊中呢?如果是這種情況,則需要快速交付其中一些更改和更新。
單映像整體部署
以下是嵌入式 Linux 工程師在創建嵌入式系統時將采用的傳統工作流程。編譯和調試后,結果是部署到板上的單個圖像。
在組裝和定制板級支持包以及 Linux 內核庫和模塊后,你需要決定要用于你的應用程序的框架和庫。然后,整個系統使用 Yocto 或 Buildroot 分層構建或“配方”。
當然,這從來沒有聽起來那么簡單,而且在使用特定工具鏈進行交叉編譯時,通常會出現依賴沖突需要調試。但是,一旦完成,最終結果是部署到設備的單個整體映像。
單一映像部署的優缺點
單個圖像的一個優點是可以對其進行優化以在設備上運行得更快。但是,一個缺點是,如果有關鍵補丁、新功能或任何其他類型的更新,嵌入式開發人員必須重復整個過程,這可能很耗時。
容器和管理復雜性
還記得開發人員說“在我的機器上工作!”的日子。使用容器,你現在可以做到這一點。本質上,容器允許你將帶有應用程序及其底層依賴項的機器移動到另一臺機器上,并確信它按預期運行。這是因為容器將應用程序和任何依賴項打包為可以在任何環境(包括嵌入式 Linux 設備)中運行的標準化單元。
將所有依賴項打包到一個獨立的單元中,使系統和應用程序能夠在沒有任何外部幫助的情況下完成工作,并提供了許多單體架構所不具備的獨特優勢。
嵌入式 Linux 系統的便攜式構建模塊
自包含的標準化軟件單元的一個顯著優勢是能夠將你的整體系統劃分為邏輯組件。每個組件都可以獨立地使用容器之間的接口和容器運行時來管理它們。例如,你可以將系統級組件與應用程序分開。你還可以在用戶空間中為你的應用程序使用你想要的任何語言或框架,而不必擔心下面運行的是什么操作系統。有關更多信息,請參閱“掌握嵌入式 Linux 設備上的容器”或觀看演講“(發行版)是否仍然相關”。
便攜式構建塊為嵌入式世界提供了與云開發人員如今所使用的語言獨立性相同的優勢。今天,大多數云開發人員甚至都沒有考慮他們正在運行什么 Distro,甚至沒有考慮在一個集群中運行了多少其他語言。相反,開發人員將時間花在他們的應用程序或服務上,以便為客戶而不是基礎設施提供價值。這些相同的好處也可以擴展到構建物聯網的嵌入式開發Linux工程團隊。
更高效、更敏捷的工程團隊
將內核庫與用戶區分開組件化的另一個優點是能夠將更高級別的應用程序開發移交給另一個團隊。例如,嵌入式 Linux 操作系統可以由根文件系統、引導加載程序、內核和 BSP 在單獨的容器和其他可選實用程序(如容器中的網絡和圖形庫)中組件化。一旦硬件工程師為特定板構建了系統,就可以使用簡單的 Docker 組合文件跨項目共享標準系統級容器。
同樣,應用程序開發人員使用的框架(例如 UI 或分布式存儲)也可以構建為容器,并以可移植的方式在應用程序開發團隊之間共享。同樣,這可以提高開發效率,并有助于快速完成概念驗證,然后最終更快地將可生產的產品推向市場。
簡化的軟件生命周期管理
容器化嵌入式 Linux 系統和應用程序庫的另一個好處是它們可以更快、更有效地更新。通過容器管理不同版本庫的能力,你無需重新開始并通過更新構建新的單體應用程序,你可以更新單個組件,而無需每次都重新構建整個系統。由于容器是不可變且可移植的,你還可以將測試和部署自動化為 CICD 管道,從眾多可用的開放工具中進行選擇,并使用更新和安全補丁快速構建新容器。所有這些最終都會加快產品交付速度并提高物聯網安全性。
歸根結底,在你的嵌入式開發工作流程中實施 DevOps 可以快速有效地更新你的 IoT 設備。DevOps、容器和自動化將使物聯網車隊更加安全,同時不斷為你的客戶提供新的服務和功能。