如果你將嵌入式軟件開發(fā)的重點放在基于微控制器的系統(tǒng)上,你可能不熟悉容器和微服務(wù)。迄今為止,容器和微服務(wù)在基于微控制器的嵌入式系統(tǒng)中相對較少。相反,這些技術(shù)主要存在于云和移動應(yīng)用程序中。然而,這些工具為團隊提供了編寫安全、易于更新、可伸縮和易于維護的軟件的能力。
微服務(wù)和容器是構(gòu)建和部署軟件應(yīng)用程序的兩種流行方法。雖然它們經(jīng)常一起使用,但它們不是一回事。嵌入式系統(tǒng)的一個發(fā)展趨勢是利用容器和微服務(wù)。在本文中,我們將探討容器和微服務(wù)之間的區(qū)別,以及各自的優(yōu)缺點。
什么是容器?
容器是一個半隔離的執(zhí)行環(huán)境,它將應(yīng)用程序與其依賴項捆綁在一起。容器允許應(yīng)用程序獨立于主機環(huán)境運行,從而在各種環(huán)境中實現(xiàn)一致的執(zhí)行。例如,假設(shè)你編寫了一個接受數(shù)據(jù)包并解析它的容器化應(yīng)用程序。在這種情況下,應(yīng)用程序可以運行在服務(wù)器、主機PC上,甚至是嵌入式目標上,如果容器運行時支持的話。圖1概述了一個虛構(gòu)的系統(tǒng),該系統(tǒng)使用容器來運行五個獨立的應(yīng)用程序。
圖1:基于容器的應(yīng)用程序的典型堆棧。
容器有助于確??缍鄠€環(huán)境的一致性,減少由不同配置引起的問題。例如,你有沒有嘗試過讓一個新的開發(fā)人員使用你正在使用的構(gòu)建系統(tǒng)?確保每個人都擁有相同版本的工具、庫等等通常是一件非常痛苦的事情。開發(fā)環(huán)境的容器化允許相同的環(huán)境被部署到任意數(shù)量的開發(fā)人員,不管他們的本地系統(tǒng)配置如何。
什么是微服務(wù)?
微服務(wù)是一種軟件架構(gòu)風格,它將一個應(yīng)用程序分解成一組小型自治服務(wù)。每個微服務(wù)都可以獨立部署,并與應(yīng)用程序中的其他微服務(wù)松散耦合。一個定義良好的接口用于允許微服務(wù)之間的通信,以便它們可以一起工作來實現(xiàn)應(yīng)用程序的總體目標。微服務(wù)架構(gòu)比傳統(tǒng)的整體架構(gòu)更加靈活和可擴展。
圖2:微服務(wù)通常包含這里描述的五個部分。[1]
微服務(wù)使開發(fā)團隊能夠輕松地遵循敏捷流程,如DevOps和TDD。微服務(wù)更易于測試和部署,軟件也可以在現(xiàn)場輕松擴展。由于大多數(shù)微服務(wù)都很小,因此可以由一個團隊輕松維護,并根據(jù)應(yīng)用程序需求在不同的產(chǎn)品中重用。
容器和微服務(wù)有什么區(qū)別?
容器是一種用于將應(yīng)用程序及其依賴項捆綁在一起的技術(shù)。微服務(wù)是一種架構(gòu)風格,它將應(yīng)用程序分解為小型自治服務(wù)。開發(fā)者不需要選擇一個或另一個,他們可以同時使用兩者。例如,一個或多個微服務(wù)可以捆綁在一起并部署在一個容器中。(你通常不會找到包含容器的微服務(wù))。
容器使得獨立于微服務(wù)的執(zhí)行環(huán)境部署微服務(wù)成為可能。例如,可以使用容器來部署用于開發(fā)、測試和生產(chǎn)的微服務(wù)。但是容器和微服務(wù)都不需要對方。你可以擁有部署時沒有容器的純微服務(wù)架構(gòu),也可以擁有在其包含的應(yīng)用程序中不利用微服務(wù)的容器。我已經(jīng)提到過,把它們一起使用是有好處的。
結(jié)論
容器和微服務(wù)不是需要獨立使用的技術(shù)。相反,開發(fā)人員可以利用容器和微服務(wù)來高效地交付和維護他們的產(chǎn)品。這些工具可以為開發(fā)人員提供機制來打破他們的單片應(yīng)用程序并使他們的架構(gòu)現(xiàn)代化——容器和微服務(wù)徹底改變團隊設(shè)計和構(gòu)建嵌入式系統(tǒng)的潛力很大。既然你已經(jīng)理解了這兩者之間的區(qū)別,那么你應(yīng)該問問自己,你是否能夠在你的產(chǎn)品中受益于并利用這些技術(shù)。