淺談 Immutable Infrastructure

今天我們來聊一聊 immutable infrastructure。

當我們開發一個應用程式,例如 web app,並想要讓它能夠順利的運行。這時,apache 或 nginx 這類的網頁伺服器可能就是必須的選項之一。然而 apache 或 nginx 必須要掛載在 OS 底下才能順利的運行,OS (linux, windows, …) 又是必要的選項之一。更不用說其它的資源 (plugin, library, utility ...) 寫到這裡一般人大概就沒有耐心再繼續看下去,不過這正恰巧說明了一件很重要的事

一個 app 的運作並非只是 app 完成即可,還需要其他資源的配合

這時候,一個有趣的現象發生了:既然 app 必須配合其他資源運作,我們該如何確保 app 在不同資源的組合下能夠正確的運作呢?

答案是:不能,或者說實務上這是不切實際也不必要的作法

如果要確保在不同資源的組合下 app 都要能運行,表示任意組合的環境 (OS + library + Server + …) 都要進行測試,而且每做一次修改就要全部再測試一遍,應該沒有人有這種勇氣。

實務上,當 app 從開發到上線通常會經過三個階段

開發 > 測試 > 正式上線

這表示 app 至少會歷經三個環境,而有可能發生以下錯誤造成 app 無法順利運作:

  1. 不同版本的軟體
  2. 需要的資源被佔住 (例如:port)
  3. 權限設定錯誤,造成無法順利存取資料
  4. 必要的軟體 (software, plugin, library) 未安裝
  5. 目錄名稱有錯誤

以上的問題如果透過 immutable infrastructure 來封裝,即可解決。

即是:確保 app 能夠在相同資源組合的環境下運作

相同資源組合的環境 說的正是 immutable infrastructure

參考資料:https://boxfuse.com/learn/why

Like what you read? Give James Lu a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.