日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Heroku创始人Adam Wiggins发布十二要素应用宣言

發(fā)布時(shí)間:2025/6/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Heroku创始人Adam Wiggins发布十二要素应用宣言 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Heroku是業(yè)內(nèi)知名的云應(yīng)用平臺(tái),從對(duì)外提供服務(wù)以來,他們已經(jīng)有上百萬應(yīng)用的托管和運(yùn)營經(jīng)驗(yàn)。前不久,創(chuàng)始人Adam Wiggins根據(jù)這些經(jīng)驗(yàn),發(fā)布了一個(gè)“十二要素應(yīng)用宣言(The Twelve-Factor App)”,該宣言由國內(nèi)工作于安居客的程序員梁山將其翻譯為中文,InfoQ中文站摘錄如下。

十二要素應(yīng)用宣言

簡介:

如今,軟件通常會(huì)作為一種服務(wù)來交付,它們被稱為網(wǎng)絡(luò)應(yīng)用程序,或“軟件即服務(wù)”(SaaS)。“十二要素應(yīng)用程序”(12-Factor App)為構(gòu)建如下的SaaS應(yīng)用提供了方法論:

  • 使用標(biāo)準(zhǔn)化流程自動(dòng)配置,從而使新的開發(fā)者花費(fèi)最少的學(xué)習(xí)成本加入這個(gè)項(xiàng)目;
  • 和操作系統(tǒng)之間盡可能的劃清界限,在各個(gè)系統(tǒng)中提供最大的可移植性;
  • 適合部署在現(xiàn)代的云計(jì)算平臺(tái),從而在服務(wù)器和系統(tǒng)管理方面節(jié)省資源;
  • 將開發(fā)環(huán)境和生產(chǎn)環(huán)境的差異降至最低,并使用持續(xù)交付實(shí)施敏捷開發(fā);
  • 可以在工具、架構(gòu)和開發(fā)流程不發(fā)生明顯變化的前提下實(shí)現(xiàn)擴(kuò)展;

這套理論適用于任意語言和后端服務(wù)(數(shù)據(jù)庫、消息隊(duì)列、緩存等)開發(fā)的應(yīng)用程序。

背景

本文的貢獻(xiàn)者者參與過數(shù)以百計(jì)的應(yīng)用程序的開發(fā)和部署,并通過Heroku平臺(tái)間接見證了數(shù)十萬應(yīng)用程序的開發(fā),運(yùn)作以及擴(kuò)展的過程。

本文綜合了我們關(guān)于SaaS應(yīng)用幾乎所有的經(jīng)驗(yàn)和智慧,是開發(fā)此類應(yīng)用的理想實(shí)踐標(biāo)準(zhǔn),并特別關(guān)注于應(yīng)用程序如何保持良性成長,開發(fā)者之間如何進(jìn)行有效的代碼協(xié)作,以及如何避免軟件污染?。

我們的初衷是分享在現(xiàn)代軟件開發(fā)過程中發(fā)現(xiàn)的一些系統(tǒng)性問題,并加深對(duì)這些問題的認(rèn)識(shí)。我們提供了討論這些問題時(shí)所需的共享詞匯,同時(shí)使用相關(guān)術(shù)語給出一套針對(duì)這些問題的廣義解決方案。本文格式的靈感來自于Martin Fowler的書籍:?Patterns of Enterprise Application Architecture,?Refactoring?。

讀者應(yīng)該是哪些人?

任何SaaS應(yīng)用的開發(fā)人員。部署和管理此類應(yīng)用的運(yùn)維工程師。

I. 基準(zhǔn)代碼

一份基準(zhǔn)代碼,多份部署

基準(zhǔn)代碼和應(yīng)用之間總是保持一一對(duì)應(yīng)的關(guān)系:

  • 一旦有多個(gè)基準(zhǔn)代碼,就不能稱為一個(gè)應(yīng)用,而是一個(gè)分布式系統(tǒng)。分布式系統(tǒng)中的每一個(gè)組件都是一個(gè)應(yīng)用,每一個(gè)應(yīng)用可以分別使用12-Factor進(jìn)行開發(fā)。
  • 多個(gè)應(yīng)用共享一份基準(zhǔn)代碼是有悖于12-Factor原則的。解決方案是將共享的代碼拆分為獨(dú)立的類庫,然后使用依賴管理策略去加載它們。

盡管每個(gè)應(yīng)用只對(duì)應(yīng)一份基準(zhǔn)代碼,但可以同時(shí)存在多份部署。

所有部署的基準(zhǔn)代碼相同,但每份部署可以使用其不同的版本。

II. 依賴

顯式聲明依賴關(guān)系

12-Factor規(guī)則下的應(yīng)用程序不會(huì)隱式依賴系統(tǒng)級(jí)的類庫。 它一定通過依賴清單?,確切地聲明所有依賴項(xiàng)。此外,在運(yùn)行過程中通過 依賴隔離 工具來確保程序不會(huì)調(diào)用系統(tǒng)中存在但清單中未聲明的依賴項(xiàng)。這一做法會(huì)統(tǒng)一應(yīng)用到生產(chǎn)和開發(fā)環(huán)境。

III. 配置

在環(huán)境中存儲(chǔ)配置

12-Factor推薦將應(yīng)用的配置存儲(chǔ)于環(huán)境變量 中 (env vars, env) 。環(huán)境變量可以非常方便地在不同的部署間做修改,卻不動(dòng)一行代碼;與配置文件不同,不小心把它們簽入代碼庫的概率微乎其微;與一些傳統(tǒng)的解決配置問題的機(jī)制(比如Java的屬性配置文件)相比,環(huán)境變量與語言和系統(tǒng)無關(guān)。

12-Factor應(yīng)用中,環(huán)境變量的粒度要足夠小,且相對(duì)獨(dú)立。它們永遠(yuǎn)也不會(huì)組合成一個(gè)所謂的“環(huán)境”,而是獨(dú)立存在于每個(gè)部署之中。當(dāng)應(yīng)用程序不斷擴(kuò)展,需要更多種類的部署時(shí),這種配置管理方式能夠做到平滑過渡。

IV. 后端服務(wù)

把后端服務(wù)當(dāng)作附加資源

12-Factor應(yīng)用不會(huì)區(qū)別對(duì)待本地或第三方服務(wù)。 對(duì)應(yīng)用程序而言,兩種都是附加資源,通過一個(gè)url或是其他存儲(chǔ)在 配置 中的服務(wù)定位/服務(wù)證書來獲取數(shù)據(jù)。12-Factor應(yīng)用的任意 部署 ,都應(yīng)該可以在不進(jìn)行任何代碼改動(dòng)的情況下,將本地MySQL數(shù)據(jù)庫換成第三方服務(wù)(例如 Amazon RDS)。類似的,本地SMTP服務(wù)應(yīng)該也可以和第三方SMTP服務(wù)(例如Postmark)互換。

V. 構(gòu)建,發(fā)布,運(yùn)行

嚴(yán)格分離構(gòu)建和運(yùn)行

12-facfor應(yīng)用嚴(yán)格區(qū)分構(gòu)建,發(fā)布,運(yùn)行這三個(gè)步驟。

每一個(gè)發(fā)布版本必須對(duì)應(yīng)一個(gè)唯一的發(fā)布ID。

新的代碼在部署之前,需要開發(fā)人員觸發(fā)構(gòu)建操作。但是,運(yùn)行階段不一定需要人為觸發(fā),而是可以自動(dòng)進(jìn)行。

VI. 進(jìn)程

以一個(gè)或多個(gè)無狀態(tài)進(jìn)程運(yùn)行應(yīng)用

12-factor應(yīng)用的進(jìn)程必須無狀態(tài)且無共享 。任何需要持久化的數(shù)據(jù)都要存儲(chǔ)在后端服務(wù)內(nèi),比如數(shù)據(jù)庫。粘性Session是twelve-factor極力反對(duì)的。Session中的數(shù)據(jù)應(yīng)該保存在諸如Memcached 或 Redis 這樣的帶有過期時(shí)間的緩存中。

VII. 端口綁定

通過端口綁定提供服務(wù)

12-factor應(yīng)用完全自我加載而不依賴于任何網(wǎng)絡(luò)服務(wù)器就可以創(chuàng)建一個(gè)面向網(wǎng)絡(luò)的服務(wù)。互聯(lián)網(wǎng)應(yīng)用 通過端口綁定來提供服務(wù),并監(jiān)聽發(fā)送至該端口的請(qǐng)求。

VIII. 并發(fā)

通過進(jìn)程模型進(jìn)行擴(kuò)展

在12-factor應(yīng)用中,進(jìn)程是一等公民。 12-factor應(yīng)用的進(jìn)程主要借鑒于 unix守護(hù)進(jìn)程模型 。開發(fā)人員可以運(yùn)用這個(gè)模型去設(shè)計(jì)應(yīng)用架構(gòu),將不同的工作分配給不同的進(jìn)程類型 。

IX. 易處理

快速啟動(dòng)和優(yōu)雅終止可最大化健壯性

12-factor應(yīng)用的進(jìn)程是可支配的,意思是說它們可以瞬間開啟或停止。 這有利于快速、彈性的伸縮應(yīng)用,迅速部署變化的代碼或配置,穩(wěn)健地部署應(yīng)用。進(jìn)程應(yīng)當(dāng)追求最小啟動(dòng)時(shí)間;進(jìn)程一旦接收終止信號(hào)(SIGTERM) 就會(huì)優(yōu)雅的終止 。進(jìn)程還應(yīng)當(dāng)在面對(duì)突然死亡時(shí)保持健壯 ,

X. 開發(fā)環(huán)境與線上環(huán)境等價(jià)

盡可能的保持開發(fā)、預(yù)發(fā)布、線上環(huán)境相同

12-factor應(yīng)用想要做到持續(xù)部署就必須縮小本地與線上差異。12-factor應(yīng)用的開發(fā)人員應(yīng)該反對(duì)在不同環(huán)境間使用不同的后端服務(wù) ,即使適配器已經(jīng)可以幾乎消除使用上的差異。

XI. 日志

把日志當(dāng)作事件流

12-factor應(yīng)用本身從不考慮存儲(chǔ)自己的輸出流。 不應(yīng)該試圖去寫或者管理日志文件。相反,每一個(gè)運(yùn)行的進(jìn)程都會(huì)直接的標(biāo)準(zhǔn)輸出(stdout)事件流。開發(fā)環(huán)境中,開發(fā)人員可以通過這些數(shù)據(jù)流,實(shí)時(shí)在終端看到應(yīng)用的活動(dòng)。

XII. 管理進(jìn)程

后臺(tái)管理任務(wù)當(dāng)作一次性進(jìn)程運(yùn)行

一次性管理進(jìn)程應(yīng)該和正常的 常駐進(jìn)程 使用同樣的環(huán)境。這些管理進(jìn)程和任何其他的進(jìn)程一樣使用相同的代碼和配置,基于某個(gè)發(fā)布版本運(yùn)行。后臺(tái)管理代碼應(yīng)該隨其他應(yīng)用程序代碼一起發(fā)布,從而避免同步問題。所有進(jìn)程類型應(yīng)該使用同樣的依賴隔離技術(shù)。12-factor尤其青睞那些提供了REPL shell的語言,因?yàn)槟菚?huì)讓運(yùn)行一次性腳本變得簡單。

希望詳細(xì)了解“十二要素應(yīng)用宣言”的同學(xué),可以點(diǎn)擊這里查看英文版,或是直接查看梁山同學(xué)翻譯的中文版。

http://www.infoq.com/cn/news/2012/09/12-factor-app

https://www.12factor.net/

?

總結(jié)

以上是生活随笔為你收集整理的Heroku创始人Adam Wiggins发布十二要素应用宣言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。