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

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

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

從以往經(jīng)驗(yàn)來看,開發(fā)環(huán)境(即開發(fā)人員的本地 部署)和線上環(huán)境(外部用戶訪問的真實(shí)部署)之間存在著很多差異。這些差異表現(xiàn)在以下三個(gè)方面:

  • 時(shí)間差異: 開發(fā)人員正在編寫的代碼可能需要幾天,幾周,甚至幾個(gè)月才會上線。
  • 人員差異: 開發(fā)人員編寫代碼,運(yùn)維人員部署代碼。
  • 工具差異: 開發(fā)人員或許使用 Nginx,SQLite,OS X,而線上環(huán)境使用 Apache,MySQL 以及 Linux。

12-Factor 應(yīng)用想要做到 持續(xù)部署 就必須縮小本地與線上差異。 再回頭看上面所描述的三個(gè)差異:

  • 縮小時(shí)間差異:開發(fā)人員可以幾小時(shí),甚至幾分鐘就部署代碼。
  • 縮小人員差異:開發(fā)人員不只要編寫代碼,更應(yīng)該密切參與部署過程以及代碼在線上的表現(xiàn)。
  • 縮小工具差異:盡量保證開發(fā)環(huán)境以及線上環(huán)境的一致性。

將上述總結(jié)變?yōu)橐粋€(gè)表格如下:

<table>
<tr>
<th></th>
<th>傳統(tǒng)應(yīng)用</th>
<th>12-Factor 應(yīng)用</th>
</tr>
<tr>
<th>每次部署間隔</th>
<td>數(shù)周</td>
<td>幾小時(shí)</td>
</tr>
<tr>
<th>開發(fā)人員 vs 運(yùn)維人員</th>
<td>不同的人</td>
<td>相同的人</td>
</tr>
<tr>
<th>開發(fā)環(huán)境 vs 線上環(huán)境</th>
<td>不同</td>
<td>盡量接近</td>
</tr>
</table>

后端服務(wù) 是保持開發(fā)與線上等價(jià)的重要部分,例如數(shù)據(jù)庫,隊(duì)列系統(tǒng),以及緩存。許多語言都提供了簡化獲取后端服務(wù)的類庫,例如不同類型服務(wù)的 適配器 。下列表格提供了一些例子。

<table>
<tr>
<th>類型</th>
<th>語言</th>
<th>類庫</th>
<th>適配器</th>
</tr>
<tr>
<td>數(shù)據(jù)庫</td>
<td>Ruby/Rails</td>
<td>ActiveRecord</td>
<td>MySQL, PostgreSQL, SQLite</td>
</tr>
<tr>
<td>隊(duì)列</td>
<td>Python/Django</td>
<td>Celery</td>
<td>RabbitMQ, Beanstalkd, Redis</td>
</tr>
<tr>
<td>緩存</td>
<td>Ruby/Rails</td>
<td>ActiveSupport::Cache</td>
<td>Memory, filesystem, Memcached</td>
</tr>
</table>

開發(fā)人員有時(shí)會覺得在本地環(huán)境中使用輕量的后端服務(wù)具有很強(qiáng)的吸引力,而那些更重量級的健壯的后端服務(wù)應(yīng)該使用在生產(chǎn)環(huán)境。例如,本地使用 SQLite 線上使用 PostgreSQL;又如本地緩存在進(jìn)程內(nèi)存中而線上存入 Memcached。

12-Factor 應(yīng)用的開發(fā)人員應(yīng)該反對在不同環(huán)境間使用不同的后端服務(wù) ,即使適配器已經(jīng)可以幾乎消除使用上的差異。這是因?yàn)?,不同的后端服?wù)意味著會突然出現(xiàn)的不兼容,從而導(dǎo)致測試、預(yù)發(fā)布都正常的代碼在線上出現(xiàn)問題。這些錯(cuò)誤會給持續(xù)部署帶來阻力。從應(yīng)用程序的生命周期來看,消除這種阻力需要花費(fèi)很大的代價(jià)。

與此同時(shí),輕量的本地服務(wù)也不像以前那樣引人注目。借助于Homebrewapt-get等現(xiàn)代的打包系統(tǒng),諸如Memcached、PostgreSQL、RabbitMQ 等后端服務(wù)的安裝與運(yùn)行也并不復(fù)雜。此外,使用類似 ChefPuppet 的聲明式配置工具,結(jié)合像 Vagrant 這樣輕量的虛擬環(huán)境就可以使得開發(fā)人員的本地環(huán)境與線上環(huán)境無限接近。與同步環(huán)境和持續(xù)部署所帶來的益處相比,安裝這些系統(tǒng)顯然是值得的。

不同后端服務(wù)的適配器仍然是有用的,因?yàn)樗鼈兛梢允挂浦埠蠖朔?wù)變得簡單。但應(yīng)用的所有部署,這其中包括開發(fā)、預(yù)發(fā)布以及線上環(huán)境,都應(yīng)該使用同一個(gè)后端服務(wù)的相同版本。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容