Linux
容器已成為云開發(fā)和部署工作流中的標(biāo)準(zhǔn)工具。好處很多,包括跨平臺(tái)的可移植性、最小的開銷以及嵌入式開發(fā)人員對(duì)其代碼運(yùn)行方式的更多控制。容器的流行度持續(xù)增長:Docker
是一種開源容器引擎,受到特別高的關(guān)注。
Linux 容器標(biāo)志著嵌入式世界第一個(gè)實(shí)用的虛擬化技術(shù)的到來。在 Raspberry Pi 上運(yùn)行 Docker
可為您提供在云中運(yùn)行 Docker 的大部分好處,同時(shí)啟用對(duì)任何 IoT
項(xiàng)目成功至關(guān)重要的附加功能:隔離的應(yīng)用程序故障、高效的更新以及靈活但熟悉的工作流程。
為什么 Linux 容器用于物聯(lián)網(wǎng)?
孤立的應(yīng)用程序故障
在遠(yuǎn)程連接 Internet
設(shè)備的世界中,停機(jī)時(shí)間尤其昂貴。與云實(shí)例不同,如果一個(gè)設(shè)備出現(xiàn)故障,您不能簡單地啟動(dòng)另一個(gè)來替換它。該設(shè)備可能是無人機(jī)、汽車、某人家中的智能鎖或油田中的傳感器站。
物聯(lián)網(wǎng)設(shè)備通常在物理上無法訪問,因此手動(dòng)重啟并不容易。容器可以在出現(xiàn)問題時(shí)進(jìn)行恢復(fù)。
這是如何運(yùn)作的?它本質(zhì)上是將設(shè)備的核心操作與應(yīng)用層分離,確保應(yīng)用故障不會(huì)影響設(shè)備在網(wǎng)絡(luò)上通信的能力。
這個(gè)主機(jī)操作系統(tǒng)管理兩個(gè)容器:一個(gè)運(yùn)行主管,一個(gè)確保設(shè)備正常運(yùn)行并可以連接到resin.io的代理,另一個(gè)運(yùn)行用戶應(yīng)用程序,并帶有自己的基本操作系統(tǒng)。在嵌入式開發(fā)中,主機(jī)操作系統(tǒng)與硬件看門狗接口,確保在低級(jí)軟件出現(xiàn)任何問題時(shí)重新啟動(dòng)。最后,這使得高于該級(jí)別的任何問題都成為可以遠(yuǎn)程解決的應(yīng)用程序問題。
高效更新
容器提供的另一個(gè)優(yōu)勢(shì)是能夠更好地管理更新,包括降低停機(jī)頻率和減少磁盤空間的使用。舉個(gè)例子,讓我們看看resinOS是如何處理更新的。
應(yīng)用帶有回退選項(xiàng)的更新的傳統(tǒng)方法是 A/B
分區(qū)策略。這將驅(qū)動(dòng)器一分為二,其中一半未使用??梢栽诳辗謪^(qū)中下載和安裝更新,而無需移除活動(dòng)操作系統(tǒng),也不會(huì)失去與網(wǎng)絡(luò)的連接。如果在切換到更新的操作系統(tǒng)時(shí)出現(xiàn)任何問題,可以使用最新的工作版本重新啟動(dòng)設(shè)備,從而大大減少丟失到網(wǎng)絡(luò)的機(jī)會(huì)。
使用resinOS,運(yùn)行用戶應(yīng)用程序所需的大部分內(nèi)容都打包在Docker容器中,并且可以在不停機(jī)的情況下進(jìn)行更新。這減少了主機(jī)操作系統(tǒng)所需的更新頻率。當(dāng)確實(shí)需要進(jìn)行主機(jī)操作系統(tǒng)更新時(shí),仍然使用
A/B 分區(qū)策略,但主機(jī)操作系統(tǒng)的最小占用空間允許更新分區(qū)小得多。
靈活而熟悉的工作流程
容器在彌合云和嵌入式工作流之間的差距方面發(fā)揮著重要作用。Linux 是一種廣泛使用且高度可定制的操作系統(tǒng),Linux
容器提供了一組標(biāo)準(zhǔn)的核心功能,同時(shí)仍然讓嵌入式開發(fā)人員可以自由選擇他們已經(jīng)熟悉的工具、庫和配置。云開發(fā)人員期望這種靈活性,并將其擴(kuò)展到嵌入式設(shè)備使更多的開發(fā)人員能夠構(gòu)建和支持物聯(lián)網(wǎng)項(xiàng)目。通過在云和邊緣設(shè)備之間調(diào)整底層技術(shù),容器減少了支持混合工作流的開發(fā)人員和組織的摩擦。