12-Factor 應用方法論 為在短時間內(nèi)構(gòu)建應用程序并使其具有可擴展性提供了指導。它由 Heroku 的開發(fā)人員創(chuàng)建,用于軟件即服務(wù)(SaaS)應用程序、網(wǎng)絡(luò)應用程序以及可能的通信平臺即服務(wù)(CPaaS)。在有效組織項目和管理可擴展應用程序方面,12 要素應用程序方法論對開源開發(fā)具有強大的優(yōu)勢。
12-Factor 應用方法論的規(guī)則非常嚴格,也是開發(fā)和部署 SaaS 應用程序的基石,并且不受任何編程語言或數(shù)據(jù)庫的限制。
一個說明圖表:顯示了一個由左邊的綠線代表的代碼庫,引導到右邊由綠色方塊代表的四個部署。橙色方塊代表暫存環(huán)境,而紅色方塊代表生產(chǎn)環(huán)境。
一個說明圖表:顯示了一個由左邊的綠線代表的代碼庫,引導到右邊由綠色方塊代表的四個部署。橙色方塊代表暫存環(huán)境,而紅色方塊代表生產(chǎn)環(huán)境。
每個應用程序都應該有一個具有多個不同環(huán)境/部署的代碼庫。
開發(fā)人員不應僅僅為了在不同環(huán)境中設(shè)置而開發(fā)另一個代碼庫。不同的環(huán)境代表不同的狀態(tài),但這些不同的環(huán)境應該共享同一個代碼庫。
在許多開源項目都存儲在 GitLab 這樣的版本控制系統(tǒng)中的情況下,一個環(huán)境可以被視為一個分支。例如,你可以在任何中央版本控制系統(tǒng)中為名為 VoIP-app 的云 VoIP 應用程序創(chuàng)建一個單獨的存儲庫,然后創(chuàng)建兩個分支:開發(fā)分支(development
)和暫存分支(staging
),并將主分支(master
)作為發(fā)布分支。
應聲明所有依賴關(guān)系。你的應用程序可能會依賴外部系統(tǒng)工具或庫,但不應對系統(tǒng)工具或庫有任何 隱含的
在代碼庫中包含依賴關(guān)系可能會產(chǎn)生問題,特別是在開源項目中,外部庫的更改可能會將錯誤引入代碼庫。例如,代碼庫可能會使用一個外部庫,但沒有明確聲明該依賴關(guān)系或版本。如果外部庫更新到更新的、未經(jīng)測試的版本,這可能會與你的代碼產(chǎn)生兼容性問題。如果明確聲明了依賴關(guān)系及其正確版本,你的代碼庫就不會出現(xiàn)這種問題。
根據(jù)技術(shù)棧的不同,最好使用軟件包管理器,通過讀取代表依賴庫名稱和版本的依賴庫聲明清單,在各自的系統(tǒng)上下載依賴庫。
當需要支持多個環(huán)境或客戶端時,配置就成了應用程序的重要組成部分。不同部署之間的配置應存儲在環(huán)境變量中。這樣就可以在部署之間輕松更改配置,而無需更改代碼。
對于閉源應用程序來說,這一原則是有益的,因為你不會希望數(shù)據(jù)庫連接信息或其他秘密數(shù)據(jù)等敏感信息被公開。然而,在開放源代碼開發(fā)中,這些細節(jié)都是公開的。在這種情況下,好處是你不需要反復修改代碼。你只需這樣設(shè)置變量,只需改變環(huán)境,就能讓代碼完美運行。
所有后備服務(wù)(如數(shù)據(jù)庫、外部存儲或消息隊列)都被視為附加資源,由執(zhí)行環(huán)境附加或分離。根據(jù)這一原則,如果這些服務(wù)的位置或連接細節(jié)發(fā)生變化,仍無需更改代碼。這些細節(jié)可以在配置中找到。
備份服務(wù)可以從部署中快速附加或分離。例如,如果基于云的電子表格的數(shù)據(jù)庫無法正常工作,開發(fā)人員應該能夠創(chuàng)建一個從最近備份恢復的新數(shù)據(jù)庫服務(wù)器,而無需對代碼庫進行任何更改。
12-Factor 應用方法論要求嚴格區(qū)分構(gòu)建、發(fā)布和運行階段。
通過嚴格區(qū)分這些階段,我們可以避免代碼中斷,使系統(tǒng)維護更加易于管理。
應用程序作為一個或多個進程的集合在執(zhí)行環(huán)境中執(zhí)行。這些進程是無狀態(tài)的,其持久化數(shù)據(jù)存儲在數(shù)據(jù)庫等后臺服務(wù)中。
這對開源非常有用,因為使用某版本應用程序的開發(fā)人員可以在其云平臺上創(chuàng)建多節(jié)點部署,以實現(xiàn)可擴展性。數(shù)據(jù)不會在其中持久化,因為如果其中任何一個節(jié)點崩潰,數(shù)據(jù)就會丟失。
你的應用程序應作為獨立的服務(wù),獨立于其他應用程序。它它應該能通過URL供其他服務(wù)訪問,以服務(wù)形式存在。這樣,你的應用程序就可以在需要時作為其他應用程序的資源。利用這一概念,你可以構(gòu)建 REST API。
該原則也稱為并發(fā)原則,它表明應用程序中的每個進程都應能夠自我擴展、重啟或克隆。
開發(fā)人員可以創(chuàng)建多個進程,并將應用程序的負載分配給這些進程,而不是將一個進程變大。通過這種方法,你可以將每種工作負載分配給一個進程類型,從而構(gòu)建能處理不同工作負載的應用程序。
你的應用應當基于簡單的進程構(gòu)建,因此開發(fā)者可以放大進程的同時還能在發(fā)生問題時重啟它們。這使得應用的進程易于丟棄。
根據(jù)這一原則構(gòu)建應用程序意味著代碼的快速部署、快速彈性擴展、更靈活的發(fā)布流程以及穩(wěn)健的生產(chǎn)部署。所有這些在開源開發(fā)環(huán)境中都非常有用。
同一項目的團隊應使用相同的操作系統(tǒng)、支持服務(wù)和依賴關(guān)系。這樣可以降低出現(xiàn)錯誤的可能性,減少開發(fā)所需的時間。
由于開源項目的開發(fā)人員分散在各地,他們可能無法就所使用的系統(tǒng)、服務(wù)和依賴關(guān)系進行 溝通 ,因此將這一原則付諸實踐對于開源項目來說可能是一個挑戰(zhàn)。減少這些差異的一種可能性是制定開發(fā)指南,建議使用何種操作系統(tǒng)、服務(wù)和依賴關(guān)系。
日志對于排除生產(chǎn)問題或了解用戶行為至關(guān)重要。但是,12-Factor 應用方法論并不適合處理日志的管理。
相反,應將日志條目作為事件流,寫入標準輸出,并將其發(fā)送到單獨的服務(wù)進行分析和存檔。機器人流程自動化(RPA)技術(shù)可作為處理和分析日志的第三方服務(wù)。執(zhí)行環(huán)境將決定如何處理該數(shù)據(jù)流。這為反省應用程序的行為提供了更大的靈活性和能力。
這一原則實際上與開發(fā)無關(guān),而是與應用程序管理有關(guān)。管理進程應在與應用程序常規(guī)長期運行進程相同的環(huán)境中運行。在本地部署中,開發(fā)人員可以直接使用應用程序簽出目錄內(nèi)的 Shell 命令來執(zhí)行一次性管理進程。
使用 12-Factor 應用方法論開發(fā)應用程序,可以提高效率,加快發(fā)布速度。在開源開發(fā)中,偏離某些指導原則可能是有意義的,但最好還是盡可能嚴格遵守這些指導原則。
開源的 12-Factor 應用是可能的。一個很好的例子是 Jitsi, (一個開源視頻會議平臺), 在疫情期間擴展了 100 倍的規(guī)模,取得了巨大成功,它就是采用 12-Factor 應用方法論構(gòu)建的。
本文鏈接:http://www.www897cc.com/showinfo-26-27581-0.html12-Factor 應用方法論的開源開發(fā)者指南
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: Rust、Zig,能夠干翻Java、C?