第 0 天/第 1 天/第 2 天:雲時代的軟體生命周期
在當今的專業 IT 媒體中有一個非常突出的話題,那就是在軟體生命周期中的「第 0 天/第 1 天/第 2 天」。在演講和會議講話當中,通常著重於使軟體開發過程有效且易於管理,為此,有必要明確定義所使用的概念。通常,如果直觀地理解基本術語「 第 0 天 / 第 1 天 / 第 2 天 」,這在談論軟體生命周期時可能會引起一些歧義。因此,我決定更準確地定義它們,以展示軟體開發的整個過程以及它們在實際項目中的使用方式。這篇簡短的博客文章提供了「天」的定義,這些「天」被理解為軟體生命周期的各個階段。它還描述了雲如何改變了有關軟體開發和維護過程的傳統思維方式。畢竟,正如《RightScale 2019 雲狀態報告》所確認的那樣,我們正處於「雲時代」。該報告解釋說,有 94% 的調查受訪者正在使用雲(私有雲或公有雲)。因此,閑話少說,讓我們探討一下「天」和雲如何結合在一起。
「天」究竟是什麼?
在 IT 中,術語「第 0 天/第 1 天/第 2 天」指的是軟體生命周期的不同階段。用軍事術語來說,「第 0 天」是訓練的第一天,新兵進入訓練階段。在軟體開發中,它代表設計階段,在此階段中指定項目需求並確定解決方案的體系結構。
「第 1 天」涉及開發和部署在「第 0 天」階段設計的軟體。在此階段,我們不僅創建應用程序本身,還創建應用程序的基礎設施、網路、外部服務,並實現所有部分的初始配置。
「第 2 天」是產品出廠或交付給客戶的時間。在這裡,大部分工作都集中在維護、監控和優化系統上。分析系統的行為並做出正確的反應至關重要,因為所產生的反饋循環將一直持續到應用程序生命周期結束為止。
在雲時代之前的日子裡,這些階段是分別處理的,彼此之間沒有重疊。今天,情況已不再如此。讓我們看一下所有這些如何應用於現代應用程序的生命周期。
第 0 天:無聊但必不可少
第 0 天經常被忽略,因為它可能很無聊,但這並不會降低其重要性。成功的軟體產品是經過全面規劃和設計過程的結果。必須仔細計劃系統或應用程序的體系結構以及啟動和運行所需的資源(CPU、存儲空間、RAM)。其次,你應該定義可衡量的里程碑,以實現項目目標。每個裡程碑應有一個準確的日期。這有助於衡量項目的進度,並確定你是否延遲了計劃運行。所有項目時間估算都應基於概率,而不僅僅是按最佳情況預估。進行計劃時,最好添加緩衝餘量,因為意外事件甚至可能使精心策劃的計劃陷入困境。測試階段也起著重要的作用,也應該包括在初始項目計劃中。這些是基本要求,它們在「雲時代」中同以往一樣重要。
儘管如此,在計算資源的第 0 天計劃中,雲還是改變了兩件事。由於雲可以在項目的任何地方獲得不同的資源或新資源(CPU、存儲空間、RAM),因此比本地基礎設施要容易得多。因此,可以避免在計劃階段犯下的一些錯誤。另一方面,在計劃階段對特定雲供應商的承諾可能會在以後導致供應商鎖定。這可能會花費你的金錢,並且需要時間來進行更改,因此選擇雲供應商時要明智一些。
其次,正如我們當前在向雲的遷移中觀察到的那樣,與運維相關的工作依舊保持不變,但不再專註於基礎設施。現在,正是軟體在推動著自動化和價值。
第 1 天:實現創意的階段
對於開發人員和項目負責人而言,第 1 天絕對是最有趣的階段。最初的設計得以實現,並根據項目的規範創建了基礎設施。為了成為真正的雲原生,必須遵守最佳實踐。可以遵循諸如 十二要素應用程序方法 之類的準則。此外,使用雲端意味著你應該遵循重要的 DevOps 慣例:持續集成/持續交付(如果你想了解有關 CI/CD 的更多信息,請參閱我們的博客文章)。
云為我們帶來了從傳統方法到軟體開發的重要變化:將第一行代碼拼湊在一起以進行概念驗證後,應用程序即開始運行。你可以從持續集成實踐開始,以測試你的應用程序的健全性,但是你很快會讓企業邁入到持續交付。在開發應用程序時,我們開始引入一些運維元素,尤其是在使用多個環境的情況下。注意這些運維要素將使維護團隊在維護階段(第 2 天)的工作更加輕鬆。
在第 1 天期間可以使用幾種工具。可以將它們按解決的問題分組。這個列表的頂部應提及「 基礎設施即代碼 」(IaaC)。 IaaC 就像應用程序或代碼一樣管理運維環境。這種方法允許將 DevOps 最佳實踐(包括版本控制、虛擬化測試和持續監視)應用於驅動基礎設施的代碼。這裡有很多工具可供我們使用,例如 Terraform、Ansible 或 Puppet 等。第二類工具與容器的自動化部署和管理的容器編排系統有關。Kubernetes 及其實現(例如 Google Kubernetes Engine 和亞馬遜的 Elastic Kubernetes Service)至關重要。最後,還有諸如 Jenkins、Zuul 和 CircleCI 之類的 CI/CD 系統,可幫助工程師自動化軟體的構建、測試以及交付或部署。
第 2 天:日常運維環節
一旦軟體準備就緒,它就會上線,客戶開始使用它。第 2 天始於此,並引入了包括軟體維護和客戶支持在內的各個元素。該軟體本身將不斷發展,以適應不斷變化的需求和客戶需求。在第 2 天期間,主要重點是建立反饋循環。我們監控該應用程序的工作方式,收集用戶反饋並將其發送給開發團隊,該團隊將在產品中實施該應用程序並發布新版本。軍事術語「 觀察-導向-決定-行動 」(OODA)恰當地抓住了這一階段發生的事情。
- 觀察:從監視系統獲取信息(資源使用情況和指標,應用程序性能監控)。
- 導向:執行問題的根本原因分析。
- 決定:找到解決問題的方法。
- 行動:實施解決方案。
與戰鬥中一樣,該循環不斷重複。
監控程序基於 服務水平協議 (SLA)中定義的要求。 SLA 基於 服務水平目標 (SLO),代表我們的 服務水平指標 (SLI)的狀態。自動化和監控是解決第 2 天職責的關鍵。
有幾種工具可幫助完成第 2 天的工作。 應用程序性能監控 (APM)類軟體可以幫助 IT 管理員監控應用程序性能,從而提供高質量的用戶體驗。在這裡,我們可以點名 Datadog、Dynatrace、SignalFX 或 Nutanix Xi Epoch。 還有一些自動化和編排工具,例如 Ansible 或 Kubernetes,可幫助管理應用程序環境。你可能已經注意到,這些工具的應用與第 1 天的工作重疊。最後,工單系統(例如 Servicedesk 或 Zendesk)可以處理客戶服務,使用戶可以報告故障以及與他們正在運行的應用程序有關的問題。
雲將改變遊戲規則
在前雲時代,這些階段之間的分隔清晰可見,但是今天,隨著雲的日常運行,事物在不斷變化。使用雲和現代軟體開發實踐,可以更輕鬆地處理軟體生命周期中不斷變化的要求。持續集成/持續開發方法使我們能夠動態響應客戶反饋並實時改進應用程序,而無需等待主要版本進行改進。
基於雲和原生雲的軟體中的 DevOps 實踐有助於實現 向左移動 (LCTT 譯註:環節前置的意思),這意味著傳統上一直保留到最後的步驟現在可以更快地執行。除此以外,這導致第 1 天和第 2 天現在相互重疊。此外,傳統軟體開發的最大痛點在於從第 1 天到第 2 天的過渡:從開發人員到運維人員的過渡。現在,DevOps 展示了如何解決此問題:及早啟動流程,並使流程一直運行到應用程序生命周期結束。最後但同樣重要的是,工具鏈正在完善,這使得執行第 1 天的任務和適應第 2 天的更改成為可能。 可以根據我們的需求對所使用的工具進行建模,並且過程中涉及的每個人都可以使用同一套工具。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive