新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一次開發(fā),隨處部署

一次開發(fā),隨處部署

作者:Tomas Holmberg 時間:2023-08-29 來源:電子產(chǎn)品世界 收藏

現(xiàn)代開發(fā)方法論快速發(fā)展,有代表性的包括Agile、SCRUM、CI/CD、DevOps等,其理念都是追求更快速度、更高質(zhì)量地進行軟件開發(fā)工作。開發(fā)速度的衡量指標可以是推出新應(yīng)用所需時間以及發(fā)現(xiàn)Bug之后發(fā)布更新版的時效等。質(zhì)量指標則主要是代碼的信息安全性和功能安全性。當然也可能包含其他要求,這跟企業(yè)的目標密切相關(guān)。“一次開發(fā),隨處部署”的目標是減少時間人力耗費,方法則是避免重復(fù)編寫功能相同的軟件代碼,并使其獨立于部署的目標硬件。

本文引用地址:http://butianyuan.cn/article/202308/450015.htm

 

盡量減少開發(fā)工作量并確保結(jié)果可以運行在幾乎任何目標硬件,這種概念并不新鮮。“編寫一次,隨處運行”,這個概念早在1995年就形成了。Java就被用來創(chuàng)建跨平臺代碼。還有許多關(guān)于“一次構(gòu)建、隨處部署”的探討,其思路是一樣的。

 

一次構(gòu)建”也代表著構(gòu)建某種軟件并使其不再需要重復(fù)構(gòu)建。在這種情況下,借助于容器之類的技術(shù),可以幫助我們創(chuàng)建可以在許多系統(tǒng)上運行的微服務(wù),并且不依賴任何外部庫。請注意,容器仍然對內(nèi)核有依賴關(guān)系,而且這一點經(jīng)常被忽略。

 

一次構(gòu)建 

為什么可以做到只需要構(gòu)建一次?當今的開發(fā)人員不需要按下構(gòu)建(Build )按鈕來將應(yīng)用程序候選版本部署到目標環(huán)境中。我們有自動構(gòu)建和測試自動化系統(tǒng)來管理這些工作。因此,只構(gòu)建一次已不再復(fù)雜。

 

但是,“一次構(gòu)建”存在一些根本性的問題。您不可能確保應(yīng)用程序不需要升級或修復(fù)錯誤?即使您編寫的應(yīng)用程序十分完美,它仍然取決于構(gòu)建它的工具鏈以及動態(tài)或靜態(tài)鏈接的庫。如果編譯器中的錯誤致使應(yīng)用程序不安全,將會發(fā)生什么后果?如果在庫中的錯誤致使應(yīng)用程序不安全,又將會引發(fā)什么后果?庫通常又依賴于其他庫,這就使我們很難確定一個應(yīng)用程序是完全沒有錯誤的。所以,您交付的軟件不可能是完美的,您幾乎肯定需要對應(yīng)用程序進行更新。

 

一次開發(fā) 

一次開發(fā)通常是要開發(fā)這樣一些東西——它可能是代碼、配置腳本或聲明性規(guī)范。應(yīng)用場景即便有所不同,您也還是可以使用相同的開發(fā)工件來創(chuàng)建最佳交付軟件。

 

任何依賴項中的漏洞修復(fù)工作都有可能觸發(fā)重新構(gòu)建。即使是配置中的一個很小的更改也可能觸發(fā)一個中等規(guī)模的漏洞。

 

Project是一個Linux Distribution Builder(分發(fā)構(gòu)建器),這是一個很好的工具,可以在不定義如何部署及其環(huán)境的情況下進行代碼開發(fā)工作。開發(fā)人員用一個或多個配方(Recipe)來定義他/她自己的層(layer)。配方(Recipe)包含構(gòu)建工件所需的全部信息?,F(xiàn)在,開發(fā)人員應(yīng)該編寫盡可能好的代碼,以避免以后需要重寫。

 

有很多種方法可以用來避免重寫代碼。一個關(guān)鍵因素是編寫的代碼盡可能少——沒有代碼就沒有漏洞。有一種思路是確保代碼的高度模塊化,其中每個部分都只設(shè)定單一目標。這段代碼針對其功能進行優(yōu)化,并對代碼量做出限制。

 

編程語言也可以幫助您避免代碼重寫。用高級聲明式語言(Declarative Language)編寫代碼可以減少代碼量。庫和工具負責把編程代碼解析為機器代碼。即便在源代碼中不存在Bug,但是在依賴項中仍然可能存在。另一種解決方案是使用一種內(nèi)存安全的語言,比如Rust,它可以幫助您確保應(yīng)用程序是內(nèi)存安全的。

 

隨處部署 

隨處部署意思是應(yīng)用程序可以部署到任何地方。請注意,任何地方”的含義可能有些不確定,具體取決于您的視角。有些人認為“任何地方”是指運行Linux的經(jīng)典x86系統(tǒng)。但更廣泛的觀點是指任何硬件架構(gòu)以及任何規(guī)模的系統(tǒng),從大型服務(wù)器到小型嵌入式設(shè)備。

 

支持多種架構(gòu)(如Power PC、ARM和x86)的跨架構(gòu)構(gòu)建。在這些主流體系架構(gòu)中,對不同的指令集和硬件偏移(Hardware Skews)有著豐富的支持。應(yīng)用程序開發(fā)人員不需要關(guān)心細節(jié),因為它們是由構(gòu)建系統(tǒng)來管理的。構(gòu)建系統(tǒng)將為每個體系架構(gòu)生成一個工件。工件、應(yīng)用程序和依賴項都針對您的特定目標進行了優(yōu)化。

 

有許多工具可用于創(chuàng)建工件,但它們通常依賴于預(yù)構(gòu)建的映像和庫,這些映像和庫是為大多數(shù)特定類型的硬件而構(gòu)建的。不同,其結(jié)果沒有針對特定硬件的功能進行優(yōu)化。

 

Yocto構(gòu)建系統(tǒng)把應(yīng)用程序構(gòu)建從可部署構(gòu)件的打包和創(chuàng)建工作中分離出來。構(gòu)建系統(tǒng)創(chuàng)建deb、rpm或ipm包,這些包可以直接部署,也可以通過其他介質(zhì)部署。構(gòu)建系統(tǒng)可以生成幾種映像類型、SDK、系統(tǒng)容器或應(yīng)用程序容器。Yocto包含標準配方(Recipe),您可以編寫自己的配方以便創(chuàng)建新的部署類型。其結(jié)果可被部署到任何硬件之上,從只運行精簡Linux安裝的小型ARM嵌入式設(shè)備到云環(huán)境中成熟的Kubernetes系統(tǒng)。

 

總結(jié) 

開發(fā)軟件是一項艱巨的工作。通過編寫高水平的應(yīng)用程序并將構(gòu)建、打包和部署等工作交給工具去做,您可以提升敏捷性和速度。Yocto可以把最終工件的開發(fā)和創(chuàng)建分離開來,從而幫助開發(fā)人員實現(xiàn)這一目標,其工件針對獨立于體系結(jié)構(gòu)的特定部署進行了優(yōu)化。于是開發(fā)人員可以專注于應(yīng)用程序的開發(fā),而不必分心費力去開發(fā)最終工件。



關(guān)鍵詞: 風河 Yocto

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉