雲端服務 Cloud Native (1)

教學目標

初步了解雲原生架構的基本概念。

重點概念

首先雲原生的概念最早是在 2015 年由 Pivotal 公司的 Matt Stine 撰寫了一本叫做遷移至雲原生應用架構的文件,我們能夠從官方網站免費下載 PDF 檔,其中探討了雲原生應用架構的主要特性,分別為:

  1. 十二個因素的應用程式 (Twelve-Factor Applications):雲原生應用程式架構的集合,其主要專注於透過宣告性設定來提高速度、安全性和規模橫向擴展,並且提供無狀態和無共享的程序,以及部署環境需要整體鬆散耦合。
  2. 微服務 (Microservices):微服務代表了整體業務的分解,並且將系統轉換為可以獨立部署的服務,並且最小的原子服務單元就是提供商業價值。
  3. 自主式服務的敏捷基礎設施 (Self-Service Agile Infrastructure):開發雲原生應用程式架構的團隊通常也會負責部署和持續運營,所以雲原生架構必須提供團隊自助式的服務平台,也就是快速、重複和一致的提供前端應用環境和後端服務平台。
  4. 基于 API 的協同合作 (API-Based Collaboration):在雲原生應用程式中服務之間的唯一互動模式主要是透過已經發佈和版本化的 API,這些 API 通常是具有 JSON 序列化的 HTTP REST 格式,但是也能夠使用其它協議和序列化格式,以利要團隊能夠部署新功能,以及自主式服務的敏捷基礎設施主要透過 API 請求互動進行提供、縮放和維護應用程式基礎設施的相關操作。
  5. 反脆弱 (Antifragile):所謂反脆弱的概念主要是受到壓力時變得更高品質的系統,像是將隨機讓正式環境產生故障,以利識別和消除架構中的缺陷,並且透過明確的查找出應用程式架構中的弱點,並且強制進行修復,此時架構自然會隨著時間的推移更大程度提供更高品質的系統。

接著雲原生應用程式架構的集合主要有十二個因素,分別為:

  1. 程式碼庫 (Codebase):每個部署的應用程式皆在版本系統中有一個獨立的程式碼庫,並且能夠在不同的環境部署多個實體。
  2. 相依 (Dependencies):每個部署的應用程式皆需要使用適當的工具針對相依關係進行顯式的宣告,而不會在在部署環境中隱式的實現相依關係。
  3. 設定 (Config):設定或其隨著發佈環境而變更的部份應該作為作業系統層級的環境變數進行注入。
  4. 後端服務 (Backing services):主要需要後端服務,並且部署在所有環境中皆相同執行。
  5. 建置、發佈和執行 (Build, release, run):主要需要建立一個能夠部署應用程式元件,並且綁定設定,以及根據元件和設定的組合來啟動一個或多個程序,請注意部署和設定這兩個階段是嚴格分離。
  6. 處理程序 (Processes):每個部署的應用程式執行一個或多個無狀態程序,並且它們之間不需要共享任何東西,至於任何需要的狀態皆會儲存於後端服務。
  7. 連接埠綁定 (Port binding):每個部署的應用程式皆是獨立的,並且透過連接埠綁定導出所有服務。
  8. 平行 (Concurrency):主要透過水平擴展應用程式處理程序來實現平行處理。
  9. 可任意處理 (Disposability):主要透過快速啟動和優雅的終止處理程序,實現最大程度的強建性,以利允許快速彈性縮放、部署更改和從崩潰中恢復。
  10. 開發和正式環境平台 (Dev/prod parity):主要透過保持開發、測試和正式環境盡可能相同的環境來實現持續交付和部署。
  11. 日誌記錄 (Logs):主要將日誌視為事件串流,並且允許執行環境透過集中式服務進行收集、聚合、索引和分析事件。
  12. 管理程序 (Admin processes):主要針對行政或管理類型的任務皆應該與應用程式長期執行的相同環境中一次性完成。

上述十二個因素非常適合快速部署應用程式,因為其不需要針對將要部署的環境進行任何設定,而是採用簡單而一致的機制,以利實現自動化和快速設定新環境的部署應用。

再來從高層次來看,雲原生架構意味著適應許多新的可能性,但與傳統的本地基礎架構相比,雲原生所提供的架構限制條件非常不同,雲原生主要提供非常不同的方式來滿足非功能性需求,如果架構師未能使他們的方法適應這些不同的限制條件,則其設計的系統通常是脆弱、昂貴,並且難以維護,但是架構良好的雲原生架構下的系統理應能夠很大程度的自我修復,具有成本效益,並且可以透過持續整合和持續交付,以利更容易更新和維護。此時雲原生架構有五大原則,這些原則將能夠有助於確保您的設計充分利用雲原生架構,同時避免將舊的方法帶入新平台的陷阱,分別為:

  1. 設計自動化 (Design for automation):自動化一直是軟體系統的最佳實務,自動化流程將能夠比手動更快速的進行修復,擴展和部署系統。
  2. 有效管理狀態 (Be smart with state):管理使用者資料或系統狀態是建構分散式雲原生架構最困難的部份,因此我們應該將針對狀態儲存進行設定,以及如何設計無狀態的元件服務。
  3. 支援託管服務 (Favor managed services):大多數的雲端提供商皆提供豐同的託管服務,以利我們免於管理後端平台或基礎架構的麻煩,因此託管服務通常能夠盡可能的節省組織時間和營運成本。
  4. 深度防禦方法 (Practice defense in depth):雲原生架構需要處理外部攻擊,因此他們透過在每個元件之間應用身份驗證,並且透過深度防禦方法最小化內部和外部元件之間的信任,除了身份驗證之外,更包括速率限制和腳本注入等內容,設計中的每個元件皆應該個保護本身免受其它元件的影響,這不僅使架構具有很強的彈性,並且使得雲端環境中部署服務的結果更加容易
  5. 不斷調整架構 (Always be architecting):雲原生架構的核心特徵之一是它始終在不斷發展,作為一個雲原生的架構師,隨著組織需求的變化,IT 系統的變化和雲端提供商本身的功能發生變化,我們應該始終尋求改進和簡化系統架構,雖然這無疑需要不斷的投資,若是 IT 系統無法迅速使組織陷入停滯,將無法應對新的威脅和機遇。

最後建構雲原生的架構主要測重於如何針對雲原生獨特功能優化系統架構,傳統架構傾向於針對固定的高成本基礎架構進行優化,這需要大量的手動修改,因此傳統架構主要側重於相對較小固定數量的元件彈性和效能。然而在雲原生架構中固定的基礎設施沒有多大意義,因為雲端環境是根據使用情況進行收費,這樣可以減少佔用空間時節省資金,而且自動化也更容易,因此自動放大和縮小要容易得多,所以雲原生架構主要側重於透過水平擴展,分散式處理和自動更換故障元件來實現彈性和擴展,同時我們遵循雲原生的架構原則將能夠更有效的改進和調整系統架構,以利適應下一個環境轉變。

相關資源