容器是一種不斷發(fā)展的標(biāo)準(zhǔn)化和便攜式包裝技術(shù)。它們最初是為 Web 應(yīng)用程序和微服務(wù)開發(fā)和部署而引入的,在 IT 行業(yè)中得到了廣泛的采用。
今天,我們也看到它們被應(yīng)用于嵌入式行業(yè),例如汽車電子控制單元(ECU)的開發(fā)。這適用于自適應(yīng) AUTOSAR 和經(jīng)典 AUTOSAR,適用于深度嵌入式安全和安保關(guān)鍵系統(tǒng),其中 C 和 C++ 是主要的編程語言。
容器可在軟件開發(fā)的任何階段為嵌入式開發(fā)、測試、暫存和生產(chǎn)提供相同環(huán)境的快速復(fù)制,從而提高整體生產(chǎn)力、代碼質(zhì)量、減少勞動力、節(jié)省成本等。
借助容器,組織及其供應(yīng)商發(fā)現(xiàn)了驚人的敏捷性、靈活性和可靠性。公司使用容器來:
縮短軟件開發(fā)上市時間。
提高代碼質(zhì)量興趣。
應(yīng)對管理日益復(fù)雜的開發(fā)生態(tài)系統(tǒng)方面的挑戰(zhàn)。
在快速且不斷發(fā)展的市場中動態(tài)響應(yīng)軟件交付試驗(yàn)。
正在使用的一個例子是如何將容器直接部署到當(dāng)今的現(xiàn)代敏捷開發(fā)工作流中,如DevOps / DevSecOps。
在進(jìn)入細(xì)節(jié)和好處之前,讓我們將這項(xiàng)技術(shù)放在上下文中并回答以下問題。
為什么存在容器,它們是什么?
容器如何適應(yīng)軟件開發(fā)生命周期?
它們?nèi)绾斡绊憳I(yè)務(wù)成果?
容器技術(shù)
開放容器計(jì)劃(OCI)是一個Linux基金會項(xiàng)目,由多家公司于2015年建立,旨在圍繞容器格式和運(yùn)行時創(chuàng)建開放的行業(yè)標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)允許兼容的容器在所有主要操作系統(tǒng)、硬件、CPU 架構(gòu)、公共/私有云等中無縫移植。
容器是與其他組件或依賴項(xiàng)(如二進(jìn)制文件或特定語言運(yùn)行時庫和配置文件)捆綁在一起的應(yīng)用程序。容器有自己的進(jìn)程、網(wǎng)絡(luò)接口和掛載。它們彼此隔離,并在“容器引擎”之上運(yùn)行,便于攜帶和靈活。
此外,容器共享一個操作系統(tǒng)。它們可以在以下任一設(shè)備上運(yùn)行。
Linux、Windows 和 Mac 操作系統(tǒng)
虛擬機(jī)或物理服務(wù)器
開發(fā)人員的計(jì)算機(jī)或本地?cái)?shù)據(jù)中心
公共云
圖 1:容器化架構(gòu)
了解容器引擎的作用很重要,因?yàn)樗峁┝艘韵玛P(guān)鍵功能:
操作系統(tǒng)級虛擬化。
容器運(yùn)行時,用于管理容器的生命周期(執(zhí)行、監(jiān)督、映像傳輸、存儲和網(wǎng)絡(luò)附件)。
用于隔離資源的內(nèi)核命名空間。
還有各種容器引擎,包括:Docker,runC,CoreOS rkt,LXD,CRI-O,Podman,Containerd,Microsoft Hyper-V,LXC,Google Container Engine (GKE),Amazon Elastic Container Service(ECS)等。
其他值得一目了然的概念是容器映像和容器業(yè)務(wù)流程。
容器映像是具有可執(zhí)行代碼的靜態(tài)文件,包含容器運(yùn)行所需的所有內(nèi)容。因此,容器是容器映像的運(yùn)行實(shí)例。此外,在大型復(fù)雜部署中,容器化體系結(jié)構(gòu)中可能有許多容器。管理所有容器的生命周期變得尤為重要。
容器編排通過預(yù)配、部署、縱向擴(kuò)展或縮減等方式管理工作負(fù)載和服務(wù)。流行的容器編排解決方案是Kubernetes,Docker群和Marathon。
現(xiàn)在,讓我們考慮一下將應(yīng)用程序與其所有依賴項(xiàng)打包在一起的靈活性帶來的技術(shù)和業(yè)務(wù)收益,以便它們從一個計(jì)算環(huán)境快速可靠地運(yùn)行到另一個計(jì)算環(huán)境。
技術(shù)和業(yè)務(wù)收益
嵌入式軟件系統(tǒng)的開發(fā)生態(tài)系統(tǒng)可能過于復(fù)雜。讓大型團(tuán)隊(duì)都在通用或相同的環(huán)境中工作,這增加了復(fù)雜性。例如,開發(fā)團(tuán)隊(duì)環(huán)境由編譯器、SDK、庫、IDE 組成,在某些情況下,還包括人工智能 (AI) 等現(xiàn)代技術(shù)的結(jié)合。所有這些工具和解決方案都在協(xié)同工作,它們的所有依賴項(xiàng)也是如此,以及不斷發(fā)展的發(fā)布版本,這些版本提供對發(fā)現(xiàn)的安全漏洞的修復(fù)、對已識別缺陷的修復(fù)、許可等等。
此外,組織應(yīng)該有單獨(dú)的環(huán)境用于開發(fā)、測試/驗(yàn)證、生產(chǎn),也許還有災(zāi)難恢復(fù)。借助容器,組織可以通過輕松擴(kuò)展或縮減應(yīng)用程序依賴項(xiàng)、將開發(fā)環(huán)境恢復(fù)到特定狀態(tài)以及根據(jù)需要推出容器映像來有效地管理所有這些復(fù)雜的開發(fā)環(huán)境,從而確保每個團(tuán)隊(duì)成員都能獲得一致的開發(fā)環(huán)境。如今,許多組織在每臺開發(fā)人員/測試人員計(jì)算機(jī)上復(fù)制開發(fā)和測試環(huán)境,為人為錯誤留有余地。
我記得有一次我在桌面上開發(fā)和測試了一個嵌入式應(yīng)用程序,它運(yùn)行良好,所以我提交了代碼。很久以后,QA 團(tuán)隊(duì)在驗(yàn)收測試期間通知我該應(yīng)用程序不起作用。我開始調(diào)試報(bào)告的問題,但無法產(chǎn)生所描述的問題。
我讓其他開發(fā)團(tuán)隊(duì)成員參與進(jìn)來,以幫助識別和解決問題,但我們就是無法重現(xiàn)問題。經(jīng)過幾天的調(diào)查,與QA團(tuán)隊(duì)合作,有時抓住稻草,我們終于開始調(diào)查QA的構(gòu)建環(huán)境。
一切都是相同的,除了QA團(tuán)隊(duì)更新了他們機(jī)器上的操作系統(tǒng)(OS)和編譯器版本。在他們的操作系統(tǒng)版本中,對任務(wù)優(yōu)先級處理進(jìn)行了修改。代碼邏輯是合理的,但正在運(yùn)行的任務(wù)被具有相同優(yōu)先級的另一個任務(wù)阻止。將競爭任務(wù)優(yōu)先級中的任何一個減少一個都可以解決問題。
由于代碼邏輯是第一個疑似罪魁禍?zhǔn)?,因此我們花費(fèi)了大量人力和時間來調(diào)查和解決問題。調(diào)查問題需要更多開發(fā)和 QA 工程師花費(fèi)更多時間。我們舉行了額外的會議和狀態(tài)報(bào)告,并推遲了其他任務(wù)。漣漪效應(yīng)尚不完全清楚,但產(chǎn)生了巨大的成本。如果已經(jīng)使用容器對開發(fā)環(huán)境進(jìn)行集中管理和部署,它將使開發(fā)和 QA 團(tuán)隊(duì)的部署環(huán)境保持同步,并且可以完全避免此問題。
嵌入式部署策略
可以通過多種方式配置和部署使用容器的軟件開發(fā)。組織可以根據(jù)正在使用的現(xiàn)有工具、所需的自動化級別和團(tuán)隊(duì)組織來確定容器的使用并不斷發(fā)展。
策略可以是在開發(fā)人員的主機(jī)上使用公共容器來制作、構(gòu)建和運(yùn)行其應(yīng)用程序。這可確保每個開發(fā)人員都使用完全相同的構(gòu)建工具和運(yùn)行環(huán)境的集合和版本。
許多嵌入式團(tuán)隊(duì)使用 Jenkins、GitHub、Azure、GitLab 等進(jìn)行持續(xù)集成和持續(xù)交付 (CI/CD)。在此示例中,有兩個容器。一個容器創(chuàng)建并生成應(yīng)用程序,而另一個容器運(yùn)行應(yīng)用程序。這有助于表達(dá)容器提供的靈活性。
組織也可能具有圖形分布的團(tuán)隊(duì)。擁有容器映像庫可以促進(jìn)共享容器并消除重新發(fā)明輪子。這通過為不同目的重復(fù)使用現(xiàn)有容器來提高效率。共享容器可確保整個開發(fā)供應(yīng)鏈的質(zhì)量。
CI/CD 管道中的嵌入式測試自動化
容器也被用于DevOps工作流程中的軟件測試。通過將容器化測試解決方案集成到 CI/CD 管道中,組織可以執(zhí)行靜態(tài)分析,以確保符合 MISRA C:2012、MISRA C++ 202x、AUTOSAR C++14、CERT、CWE、OWASP 等標(biāo)準(zhǔn)。
像Parasoft C/C++test這樣的軟件測試自動化工具提供了一個可以在Docker Hub中找到的容器。此外,還可以執(zhí)行單元測試,包括語句、分支的結(jié)構(gòu)代碼覆蓋和/或修改條件決策覆蓋率 (MC/DC)。然后,只有在成功完成測試后,軟件才會提交到主分支中。
構(gòu)建過程中的這種容器化部署在代碼開發(fā)和代碼質(zhì)量方面產(chǎn)生了驚人的效率。在這個快速和自動化的持續(xù)集成周期中,讓多名工程師并行工作,確保在整個產(chǎn)品生命周期中生成和維護(hù)堅(jiān)實(shí)的軟件基礎(chǔ)。
結(jié)論
構(gòu)建嵌入式實(shí)時安全和安保關(guān)鍵系統(tǒng)的組織正在采用包含容器的 DevOps 工作流。其他人正在采用集裝箱化戰(zhàn)略。那些已經(jīng)構(gòu)建了 CI/CD 管道并已經(jīng)使用它幾年的公司報(bào)告說,他們已經(jīng)能夠更好地預(yù)測軟件的交付,并輕松適應(yīng)需求和設(shè)計(jì)的變化。
隨著生產(chǎn)力的提高和測試成本的降低,開發(fā)團(tuán)隊(duì)報(bào)告說產(chǎn)品質(zhì)量和上市時間都有所提高。此外,嵌入式組織已通知我們 QA 問題報(bào)告和客戶票證的可衡量下降。
審核編輯:郭婷
-
嵌入式
+關(guān)注
關(guān)注
5086文章
19141瀏覽量
305939 -
Web
+關(guān)注
關(guān)注
2文章
1264瀏覽量
69523 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6840瀏覽量
123407
發(fā)布評論請先 登錄
相關(guān)推薦
評論