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