自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

開源驅(qū)動12 Factor現(xiàn)代化項目

開源
12 factor軟件開發(fā)方法已經(jīng)激發(fā)了十多年來的軟件開發(fā)和架構(gòu)。其原則定義了一種統(tǒng)一、可預(yù)測的方式,使企業(yè)系統(tǒng)更安全地部署和更容易維護。

極具影響力的12 factor應(yīng)用方法論并未涵蓋許多近期的技術(shù)創(chuàng)新。Heroku 正在領(lǐng)導(dǎo)一項社區(qū)主導(dǎo)的努力,以使其保持最新。

譯自O(shè)pen Source Drives the Twelve-Factor Modernization Project,作者 Bob Reselman。

12 factor方法論是一套包含12個原則的體系,使公司能夠以統(tǒng)一且高度可管理的方式創(chuàng)建、運行和維護企業(yè)級軟件即服務(wù) (SaaS) 應(yīng)用程序。12 factor方法論不依賴于任何特定產(chǎn)品、技術(shù)或工具集。相反,它是一種軟件開發(fā)理念,其驅(qū)動力是可移植性、彈性、穩(wěn)定性和成本效益。

12 factor應(yīng)用由Heroku聯(lián)合創(chuàng)始人Adam Wiggins于2011年創(chuàng)建,因此已經(jīng)存在一段時間了。多年來,12 factor原則幫助開發(fā)人員創(chuàng)建在云中運行的更具彈性、更易于擴展、管理和維護的應(yīng)用程序。

12 factor方法論首次出現(xiàn)時,基于Web的應(yīng)用程序和Amazon Web Services仍處于起步階段。從那時起發(fā)生了很多變化,但12 factor方法論在很大程度上保持不變?,F(xiàn)在是將其現(xiàn)代化并使其與我們今天使用技術(shù)的方式保持一致的時候了,因此12 factor方法論已開源。

在深入探討12 factor方法論開源的目的和影響之前,我將首先介紹其背后的原則。

12 factor

以下是驅(qū)動12 factor的原則的簡要回顧,包括每個原則的含義以及如何使用它們。

Factor 1:代碼庫

含義:每個應(yīng)用使用一個代碼庫,通過版本控制進行跟蹤,并進行多次部署。這確保所有與應(yīng)用程序相關(guān)的資產(chǎn)都在單個存儲庫中進行管理。

應(yīng)用方式:通常,支持單個代碼庫意味著將項目的所有源代碼和輔助工件保存在單個源代碼存儲庫中,例如GitHub、BitBucket、AWS CodeCommit或Google CloudSource Repositories。代碼庫不應(yīng)散布在各種存儲庫中。

Factor 2:依賴

含義:明確聲明并隔離所有依賴項,以避免隱式依賴于系統(tǒng)工具或庫。這使應(yīng)用程序更易于預(yù)測和管理。

應(yīng)用方式:支持依賴原則的關(guān)鍵是使用以受控方式存儲獨立庫和包的存儲庫。應(yīng)用程序應(yīng)將自定義代碼與獨立開發(fā)的庫分開,并在配置文件中列出這些庫。然后,在運行應(yīng)用程序時,獨立庫會在構(gòu)建和運行時添加到項目中。庫不與源代碼一起存儲,而是存儲在由庫開發(fā)者控制的單獨存儲庫中。

一些此類存儲庫的示例包括npm(用于Node.js項目)、PyPI(用于Python)、MVN Repository(用于Java)、Chocolatey(用于.NET)和RubyGems(用于Ruby編程語言)。

Factor 3:配置

含義:將不同部署之間變化的任何配置與代碼分開存儲。這允許您更輕松地進行更改,而無需修改代碼庫。

應(yīng)用方式:將配置與代碼分離已成為企業(yè)系統(tǒng)架構(gòu)中的基本實踐。有時,配置信息存儲在清單文件中。Kubernetes等框架會自動將清單中聲明的信息注入環(huán)境中。此外,配置更新是通過更改清單文件中的信息來執(zhí)行的??蚣軙⒁獾礁牟⒆詣痈颅h(huán)境。

配置要素有一個開放的更新提案(issue #4)。

Factor 4:后端服務(wù)

含義:將后端服務(wù)(如數(shù)據(jù)庫、隊列和內(nèi)存緩存)視為附加資源,可以通過存儲在配置中的URL或其他定位器進行訪問。這使得服務(wù)易于互換。

應(yīng)用方式:該原則要求通過標準協(xié)議(例如HTTP/HTTPS連接)進行資源訪問。 理解使用庫和命令行界面 (CLI) 工具的關(guān)鍵在于,這些技術(shù)是對實際資源的抽象。它們與資源之間沒有緊密的綁定。程序員聲明對資源的訪問憑據(jù)以及要執(zhí)行的操作。工具負責(zé)處理與資源交互的細節(jié)。

理論上,程序員應(yīng)該能夠以最小的影響從一個資源提供商切換到另一個資源提供商。但是,與任何技術(shù)一樣,魔鬼總是隱藏在細節(jié)中。因此,程序員應(yīng)該使用基于 TCP/IP 的資源。然后,代碼將被構(gòu)建為以通用的方式訪問資源。

Factor 5:構(gòu)建、發(fā)布、運行

含義:嚴格分離部署過程的構(gòu)建、發(fā)布和運行階段。構(gòu)建階段編譯代碼,發(fā)布階段添加特定于環(huán)境的配置,運行階段執(zhí)行應(yīng)用程序。

如何應(yīng)用:諸如 Jenkins 和 TeamCity 之類的綜合 CI/CD 應(yīng)用程序可用于支持構(gòu)建、發(fā)布、運行原則。這些工具通常允許程序員定義應(yīng)用程序的配置設(shè)置和源代碼存儲庫。這些工具具有腳本,可以自動從指定的存儲庫獲取源代碼。然后,這些腳本構(gòu)建應(yīng)用程序并將配置設(shè)置應(yīng)用于測試代碼。(這些測試腳本與源代碼一起存儲在存儲庫中。)一旦構(gòu)建的代碼通過測試,腳本就會將構(gòu)建的應(yīng)用程序部署到指定的運行時環(huán)境。CI/CD 工具與構(gòu)建、發(fā)布、運行原則結(jié)合使用,允許持續(xù)快速、準確且可觀察地部署應(yīng)用程序。

Factor 6:進程

含義:將應(yīng)用程序作為一個或多個無狀態(tài)進程執(zhí)行。持久性數(shù)據(jù)應(yīng)存儲在有狀態(tài)后端服務(wù)中。這使得擴展更容易,并防止意外的副作用。

如何應(yīng)用:無狀態(tài)代碼是基于 Web 的應(yīng)用程序的基本原則。進程唯一應(yīng)該做的是執(zhí)行處理邏輯。應(yīng)避免進程之間的副作用;進程不應(yīng)影響應(yīng)用程序的整體狀態(tài)或應(yīng)用程序中另一個進程的狀態(tài)。要確定進程的狀態(tài),請檢查獨立的真相來源,該來源協(xié)調(diào)所有進程之間的活動。

Factor 7:端口綁定

含義:使用端口綁定導(dǎo)出服務(wù),使其自包含并可通過指定的端口訪問。

如何應(yīng)用:某些端口號已成為特定服務(wù)的象征。例如,非安全 Web 應(yīng)用程序的默認端口是 80 端口。安全網(wǎng)站通過 443 端口上的 HTTPS 訪問。Kafka 消息服務(wù)偵聽 9092 端口上的客戶端流量。MySQL 數(shù)據(jù)庫的默認端口是 3306。一些公司會不遺余力地將產(chǎn)品的品牌標識與端口號關(guān)聯(lián)起來。Docker和Kubernetes使用端口聲明來定義域內(nèi)服務(wù)的訪問點。在開發(fā)級別,程序員通常根據(jù) localhost URL 在其機器上使用資源或服務(wù),然后通過關(guān)聯(lián)的端口號綁定到給定的資源或服務(wù)。

Factor 8:并發(fā)

含義:擴展應(yīng)用程序時,應(yīng)通過添加更多進程來水平擴展,而不是垂直擴展單個進程。

如何應(yīng)用:對按需水平擴展的支持已成為現(xiàn)代 Web 規(guī)模企業(yè)應(yīng)用程序的關(guān)鍵功能。許多技術(shù),包括 AWS Elastic Container Service (ECS)、Docker Swarm、Google Cloud Run、Heroku、HashiCorpNomad 和 Kubernetes,都支持自動擴展。理解并發(fā)原則的關(guān)鍵在于,應(yīng)用程序必須由離散的、獨立的執(zhí)行邏輯單元組成,這些單元可以冗余地和同時運行。運行的單元數(shù)量可以根據(jù)當(dāng)前的流量需求進行擴展或縮減。

Factor 9:可丟棄性

含義:確??焖賳雍完P(guān)閉時間,以最大限度地提高彈性和使系統(tǒng)更強大。

如何應(yīng)用:12 factor原則的可丟棄性原則體現(xiàn)了現(xiàn)代分布式應(yīng)用程序的短暫性。正如并發(fā)原則所指出的那樣,應(yīng)用程序?qū)⒁匀哂嗟姆绞絾淤Y源以滿足當(dāng)時的需要。因此,組件總是“來來去去”以滿足流量需求。 當(dāng)資源終止時,必須快速且優(yōu)雅地進行。這意味著確保沒有操作以無定形狀態(tài)終止。必須完成操作,必須關(guān)閉與外部資源的連接,并且必須安全地從內(nèi)存中刪除資源。組件終止后,應(yīng)用程序的整體狀態(tài)應(yīng)保持一致。

Factor 10:開發(fā)/生產(chǎn)環(huán)境一致性

含義:保持開發(fā)、登臺和生產(chǎn)環(huán)境盡可能相似,以促進持續(xù)部署并減少開發(fā)和生產(chǎn)之間的差距。

如何應(yīng)用:開發(fā)/生產(chǎn)環(huán)境一致性原則類似于構(gòu)建、發(fā)布、運行原則,它將應(yīng)用程序開發(fā)過程分解為離散的片段。但是,構(gòu)建、發(fā)布、運行關(guān)注的是代碼發(fā)布,而開發(fā)/生產(chǎn)環(huán)境一致性則關(guān)注跨升級開發(fā)環(huán)境的代碼一致性。

通常,在軟件開發(fā)的不同階段執(zhí)行不同的操作。在開發(fā)階段,開發(fā)人員提交代碼。該代碼會進行代碼分析和單元(可能還有性能)測試。如果一切順利,它將被移至登臺環(huán)境。在登臺階段,代碼將接受更廣泛的測試制度,其中可能包括集成測試和滲透測試以查找安全風(fēng)險。如果應(yīng)用程序?qū)⒂扇祟愂褂?,則登臺環(huán)境也是代碼進行可用性測試以確保滿足人類需求的地方。最后,成功后,代碼將在生產(chǎn)階段發(fā)布。

關(guān)于開發(fā)/生產(chǎn)環(huán)境一致性的重要一點是,每個環(huán)境(開發(fā)、登臺和生產(chǎn))必須相同,并且在每個環(huán)境中執(zhí)行自動化工作時必須使用相同的工具。此外,除非是緊急更新,否則升級過程必須是單向的:代碼必須從開發(fā)環(huán)境移動到登臺環(huán)境,再到生產(chǎn)環(huán)境。不能來回移動。并且,在緊急情況下,例如修補程序,當(dāng)代碼繞過開發(fā)環(huán)境并直接從開發(fā)人員的機器移動到登臺環(huán)境時,一旦修補程序代碼發(fā)布到生產(chǎn)環(huán)境,則必須更新開發(fā)環(huán)境以適應(yīng)登臺環(huán)境中的更改。

在一個運行良好的 IT 部門中,開發(fā)人員的習(xí)慣是在本地機器上開始編碼會話之前,每天檢查開發(fā)環(huán)境的更新。這確保了任何緊急“向后”更新(在修補程序的情況下,從登臺環(huán)境到開發(fā)環(huán)境)都會返回到開發(fā)人員的機器。

開發(fā)/生產(chǎn)環(huán)境一致性的關(guān)鍵因素是每個環(huán)境中基礎(chǔ)設(shè)施的統(tǒng)一性以及環(huán)境之間升級過程的可預(yù)測控制。

Factor 11:日志

含義:將日志視為事件流,并讓執(zhí)行環(huán)境聚合它們。這簡化了日志管理和調(diào)試。

如何應(yīng)用:日志記錄應(yīng)通過將日志記錄事件視為獨立于任何特定技術(shù)的獨立數(shù)據(jù)流來完成。通常的實現(xiàn)是將日志事件視為一條消息,該消息由數(shù)據(jù)流技術(shù)(例如 Kafka)使用。將日志發(fā)射與日志存儲分離使應(yīng)用程序的可移植性更容易。

將日志記錄到數(shù)據(jù)流中會將存儲和數(shù)據(jù)管理的責(zé)任放在流管理技術(shù)上。權(quán)衡是關(guān)于發(fā)出日志數(shù)據(jù)的機器和應(yīng)用程序的信息變得不透明。因此,為了提高效率,使用標準化的消息格式至關(guān)重要。消息格式應(yīng)包含有關(guān)事件、機器、應(yīng)用程序以及與應(yīng)用程序操作相關(guān)的任何其他環(huán)境信息。

將日志記錄到事件流中有很多好處,但是您必須進行額外的規(guī)劃以確保日志呈現(xiàn)準確、全面且有用的信息。

此因素有一個開放的提案,以擴展它以反映當(dāng)前的可觀察性實踐,包括遙測(issue #3)。

Factor 12:管理流程

含義:將管理任務(wù)作為一次性流程運行,在與應(yīng)用程序相同的代碼庫和版本控制系統(tǒng)中進行管理。這確保了一致性和易于執(zhí)行。

如何應(yīng)用:應(yīng)用程序必須附帶其自身的管理功能,例如儀表板。例如,Substack(一個面向作家、記者和其他內(nèi)容創(chuàng)建者的在線出版平臺)附帶一個儀表板功能,允許內(nèi)容創(chuàng)建者控制出版操作和讀者訪問。該平臺還使內(nèi)容創(chuàng)建者能夠為付費訪問細分某些內(nèi)容,并配置資金的收取方式。 此管理功能是Substack的一部分。它不是一個單獨的應(yīng)用程序,其源代碼也沒有托管在單獨的存儲庫中。通用應(yīng)用程序和管理流程都是統(tǒng)一代碼庫的一部分。Substack是管理流程原則的一個例子。重要的是要理解,管理功能是作為應(yīng)用程序的一部分進行管理的,而不是作為與應(yīng)用程序分離的東西。

通過開源邁向更高水平

您可能會從每個因素的描述中注意到的一件事是,12 factor方法對用于支持其原則的技術(shù)是不可知的。

當(dāng)12 factor應(yīng)用在2011年推出時,這種方法論在技術(shù)領(lǐng)域是新思維。該原則的不可知性使得采用更容易,特別是對于像Heroku這樣的公司,它提供一個平臺可以支持各種各樣的工具和技術(shù)。然而,在接下來的幾年里,各種各樣的云提供商都采用了12 factor方法,并且通過使這種方法開源,Heroku正在鼓勵社區(qū)幫助對其進行現(xiàn)代化改造。

正如Heroku首席營銷官在一次采訪中解釋的那樣:

“當(dāng)Adam Wiggins在14年前編寫它時,云計算仍然很新,Docker和Kubernetes還不存在。他正在為優(yōu)秀的SaaS應(yīng)該是什么樣子制定路線。從那時起,許多事情都發(fā)生了變化,修訂是必要的。但是,這不應(yīng)該僅僅是Heroku的觀點。許多云提供商和最終用戶組織都采用了12 factor原則。每一個都帶來了在云中大規(guī)模運行這些類型的應(yīng)用程序和基礎(chǔ)設(shè)施的不同經(jīng)驗。他們的想法和貢獻需要被納入,以將12 factor提升到一個新的水平?!?/span>

正如Junod所指出的,推動12 factor的原則在當(dāng)時是有意義的,但技術(shù)環(huán)境已經(jīng)發(fā)生了巨大的變化。它必須現(xiàn)代化,以解決遙測、身份驗證和服務(wù)到服務(wù)(S2S)通信等問題,現(xiàn)代開發(fā)人員和架構(gòu)師每天都在處理這些問題,但它們不是原始方法論的一部分。

為了鼓勵廣泛參與12 factor的現(xiàn)代化,11月,Heroku將其項目開源,采用CC-BY-4.0許可證。該公司已將其12 factor的源代碼從其原始網(wǎng)站遷移到一個新的開源存儲庫。

新的存儲庫為對12 factor的貢獻提供了一個中心活動點。它包含更新版本的網(wǎng)站代碼和文檔,其中包含對這些因素更深入的描述。該存儲庫還包含來自各個組織的新思想和附加文檔的鏈接,包括O’Reilly、Nginx和IBM。這些公司秉承了12 factor的精神,他們的觀點對于使其在今天更實用非常寶貴。

開源的兩個最重要的優(yōu)點是透明度和促進基于社區(qū)的技術(shù)創(chuàng)新的機制。Heroku首席架構(gòu)師兼12 factor存儲庫維護者在12 factorDiscord服務(wù)器上的最近討論中表示,除了拓寬12 factor的范圍外,這種創(chuàng)新有望激發(fā)基于該方法論創(chuàng)建應(yīng)用程序的工具。

訣竅是使基于12 factor的應(yīng)用程序開發(fā)成為一種全面統(tǒng)一的體驗。開源該項目和推動12 factor的思想是朝著構(gòu)建彈性、可擴展和可維護的、在網(wǎng)絡(luò)規(guī)模上運行的應(yīng)用程序邁出的重要一步。

參與其中

12 factor軟件開發(fā)方法已經(jīng)激發(fā)了十多年來的軟件開發(fā)和架構(gòu)。其原則定義了一種統(tǒng)一、可預(yù)測的方式,使企業(yè)系統(tǒng)更安全地部署和更容易維護。

但是,鑒于過去十年發(fā)生的巨大技術(shù)變革,12 factor需要不斷發(fā)展以適應(yīng)時代。希望通過將12 factor作為一個開源項目,更廣泛的貢獻者將帶來各種各樣的觀點,這將有助于使12 factor在今天像2011年首次發(fā)布時一樣有用。

責(zé)任編輯:武曉燕 來源: 云云眾生s
相關(guān)推薦

2024-03-29 06:32:46

CSSJavaScript前端

2015-10-29 14:35:21

移動設(shè)備現(xiàn)代化

2022-07-11 05:34:19

云原生應(yīng)用程序

2022-05-11 11:07:15

API云原生開源

2023-01-09 07:55:43

Rust開源數(shù)據(jù)倉庫

2022-05-24 20:06:08

開源應(yīng)用現(xiàn)代化數(shù)字化轉(zhuǎn)型

2020-06-05 14:16:05

醫(yī)藥

2024-01-23 15:21:14

2023-05-03 21:47:22

2024-12-02 09:26:17

2023-02-08 11:07:56

數(shù)字時代數(shù)字運營模式

2015-09-15 11:06:33

第一屆稅務(wù)行業(yè)信息化研華為

2020-05-08 14:47:53

網(wǎng)絡(luò)現(xiàn)代化網(wǎng)絡(luò)IT

2013-03-19 18:04:06

51CTO

2021-07-09 05:25:48

CIO遺留系統(tǒng)現(xiàn)代化用戶體驗

2021-04-13 16:13:38

大數(shù)據(jù)教育科學(xué)

2022-11-01 07:14:32

裸金屬云云服務(wù)云原生

2023-06-25 09:04:12

數(shù)字企業(yè)架構(gòu)EA

2023-12-07 08:00:00

數(shù)字化轉(zhuǎn)型數(shù)字化
點贊
收藏

51CTO技術(shù)棧公眾號